Clone this repo:


  1. 336402f Use check result to pass around data by Gavin Mak · 1 year, 1 month ago main
  2. a28003e Reland "Show newly added "try" rows" by Anthony Fandrianto · 1 year, 1 month ago
  3. 344baa2 Revert "Show newly added "try" rows" by Anthony Fandrianto · 1 year, 1 month ago
  4. 43780ea Show newly added "try" rows by Anthony Fandrianto · 1 year, 1 month ago
  5. 34b15b2 Handle case where last patchset is not autogenerated by Gavin Mak · 1 year, 3 months ago

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”: “” “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).


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:

Also a short snippet below:

    git = ""
    gerrit = ""

[builder "luci.webrtc.try/linux_rel"]
    base = " 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 = " 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 {"": 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.


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.


This plugin must be placed inside the Gerrit plugins directory:

git clone --recurse-submodules
cd gerrit/plugins
git clone


Manual on live Gerrit instance

For testing the plugin with 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.


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.