# binary-size **Repository Path**: mirrors_chromium_googlesource/binary-size ## Basic Information - **Project Name**: binary-size - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-19 - **Last Updated**: 2025-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Binary Size Plugin for Gerrit ## How it works The plugin queries tryjobs for the current patchset on Gerrit, and gets the `binary_sizes` property from each of them. It also queries the equivalent CI jobs for the same base revision, and gets the same property from them. It then displays the results in a table under the Checks tab, with rows being the files (keys in `binary_sizes` dict), and the columns being: Size before | Size after | Size delta (including %) | Budget info | File | Builder This is based on JSON output of the form: { "some binary name": BINARY_SIZE_IN_BYTES, "some binary name.budget": BINARY_SIZE_BUDGET_IN_BYTES, "some binary name.owner": OWNER_URL, } For example: { "foo": 1024, "foo.budget": 2048, "foo.owner": "mailto:foo_owner@gmail.com" "bar": 2048, } Note that including a *.budget item for any given binary is optional. If no budget items are provided, then the "Budget info" column will be omitted from the results table. In the event that a *.budget item is specified, an addition *.owner item can be used to provide a URL for context/ownership related to the pertinent budget item (in the UI, the budget value is clickable, taking the user to the provided URL). ## Usage This plugin is configured via the `binary-size.config` file present in the repo's `refs/meta/config` ref, as well as the same file in all repositories in the repo's inheritance chain (up to and including All-Projects). See an example of binary-size.config: https://webrtc.googlesource.com/src/+/refs/meta/config/binary-size.config Also a short snippet below: ``` [host] git = "webrtc.googlesource.com" gerrit = "webrtc-review.googlesource.com" [builder "luci.webrtc.try/linux_rel"] base = "luci.webrtc.ci/Linux64 Release" # Optional, needed if the base builder is triggered from a different repo # than the try builder. Assumed to be hosted on [host].git. baseRepo = "foo" [builder "luci.webrtc.try/win_x64_clang_rel"] base = "luci.webrtc.ci/Win64 Release (Clang)" ``` This contains a mapping between tryjob builders and equivalent postsubmit builders. Equivalent in the sense that if they ran with the same code, they would produce the same `binary_sizes`. The plugin queries builds only from buckets that are mentioned at least once. It is OK to specify builders that don't provide a `binary_sizes` property, they will just be ignored. Note that populating the `binary_sizes` property is a separate responsibility, and it is up to you to implement in your recipes. It needs to be a dict like `{"some_file.so": 123456, ...}`. The values of the dict are treated as sizes in bytes. Builders also need to set the `got_revision` property. This is the commit hash on top of which the Gerrit patchset is applied, and is used to look up previous data for comparison. All changes to `binary-size.config` files are instantly reflected. There is no caching period or need to restart the server. ### Dependencies This plugin **requires** the [buildbucket][] plugin in order to search builds. Ensure that it is also installed, or prepare to see errors in the browser's console. ## Development This plugin must be placed inside the Gerrit plugins directory: git clone --recurse-submodules https://gerrit.googlesource.com/gerrit cd gerrit/plugins git clone https://chromium.googlesource.com/infra/gerrit-plugins/binary-size ### Testing #### Manual on live Gerrit instance For testing the plugin with [Gerrit FE Dev Helper](https://gerrit.googlesource.com/gerrit-fe-dev-helper/) build the JavaScript bundle and copy it to the `plugins/binary-size` folder: bazel build //plugins/binary-size/web:binary-size cp -f bazel-bin/plugins/binary-size/web/binary-size.js plugins/binary-size and let the Dev Helper redirect from `.+/plugins/binary-size/static/binary-size.js` to `http://localhost:8081/plugins_/binary-size/binary-size.js`. **Note**: this works only for frontend (JavaScript) changes. Not for changes to the backend (Java) code. #### Automated For running TypeScript unit tests execute: bazel test --test_output=all //plugins/binary-size/web:karma_test For checking or fixing eslint formatter problems run: bazel test //plugins/binary-size/web:lint_test bazel run //plugins/binary-size/web:lint_bin -- --fix "$(pwd)/plugins/binary-size/web" Note: Testing is disabled for Safari due to [this issue](https://github.com/Polymer/web-component-tester/issues/411). [buildbucket]: https://chromium.googlesource.com/infra/gerrit-plugins/buildbucket/