blob: 2d9780863e44d0419f90e45d5491b8f1ba391e28 [file] [log] [blame] [view]
# Binary Size Metrics
This document lists metrics used to track binary size.
[TOC]
## Metrics for Desktop
* Sizes are collected by
[//build/scripts/slave/chromium/sizes.py](https://cs.chromium.org/chromium/build/scripts/slave/chromium/sizes.py)
* [Win32 Telemetry Graphs](https://chromeperf.appspot.com/report?sid=b3dcc318b51f3780924dfd3d82265ca901ac690cb61af91919997dda9821547c)
* [Linux Telemetry Graphs](https://chromeperf.appspot.com/report?sid=bd18d34b6d29f26877e7075cb5c34c56c011d99803e9120d61610d7eaef38e9c)
* [Mac Telemetry Graphs](https://chromeperf.appspot.com/report?sid=2cb6e0a9941e63418e7b83f91583282fa9fbaaafc2d19b3fa1179b28e7d3f7eb)
### Alerting
* Alerts are sheriffed as part of the main perf sheriff rotation.
* Alerts generally fire for ~100kb jumps.
## Metrics for Android
For Googlers, more information available at [go/chrome-apk-size](https://goto.google.com/chrome-apk-size).
* Sizes are collected by
[//build/android/resource_sizes.py](https://cs.chromium.org/chromium/src/build/android/resource_sizes.py).
* How to analyze Android binary size discussed in [apk_size_regressions.md#debugging-apk-size-increase](../apk_size_regressions.md#debugging-apk-size-increase).
* Sizes for `ChromePublic.apk`, `ChromeModernPublic.apk`, `TrichromeChrome.aab`, `SystemWebview.apk` are tracked.
* But only `TrichromeChrome.aab` is actively monitored.
* We care most about on-disk size (for users with small device storage)
* But also care about patch size (so that browser updates get applied)
### Normalized APK Size
* [Telemetry Graph](https://chromeperf.appspot.com/report?sid=e55e2189727a5bc410196e8cb7492879f9a224dc1383c6cdf9409edc0a8a1050)
* Monitored by [Binary Size Sheriffs](../apk_size_regressions.md).
* Alerts fire for changes of 16kb or more.
* Computed as:
* The size of an APK
* With all native code as the sum of section sizes (except .bss), uncompressed.
* Why: Removes effects of ELF section alignment.
* With all dex code as if it were stored uncompressed.
* Why: Best practice is to store dex uncompressed on Android P and above.
* On prior versions, or when stored compressed, dex is extracted upon installation.
* With all zipalign padding removed.
* Why: Removes effects of file alignment (esp. relevant because native libraries are 4k-aligned).
* With size of apk signature block removed.
* Why: Size fluctuates by several KB based on how hash values turn out.
* With all translations as if they were not missing (estimates size of missing translations based on size of english strings).
* Why: Without translation-normalization, translation dumps cause jumps.
* Translation-normalization applies only to apks (not to Android App Bundles).
* For Android App Bundles, the normalized size is the sum of the normalized size of all splits that have onDemand="false" (those installed by default).
### Native Code Size Metrics
* [Telemetry Graph](https://chromeperf.appspot.com/report?sid=7b392aa248c77bd4c4fe03ca870e30863e3dcb7f06167cb50c9d7d99010687a9)
* File size of `libchrome.so`
* Code vs data sections (.text vs .data + .rodata)
### Java Code Size Metrics
* [Telemetry Graph](https://chromeperf.appspot.com/report?sid=d2f2a1dfefd89c43902299efeddf6e4e6521db5e01d3716b8202f6ad8ad960da)
* File size of `classes.dex`
* "Dex": Counts of the number of fields, methods, strings, types.
* "DexCache": The number of bytes of RAM required to load our dex file (computed from counts)
### Breakdown Metrics
* [Telemetry Graph](https://chromeperf.appspot.com/report?sid=c7f4afc0f438e7868b81be12c44aca7d0e9f7379bf1ae862df261fcd28d222f1)
* Compressed size of each apk component.
* The sum of these equals APK Size (which can be found under "Install Size Metrics": "APK Size")
### Install Metrics
* [Telemetry Graph](https://chromeperf.appspot.com/report?sid=33515ace819bc607a742c8748316ffe6a36b3fcbc598efd35cd80d0a83c190ae)
* Estimated installed size: How much disk is required to install Chrome on a device.
* This is just an estimate, since actual size depends on Android version (e.g. Dex overhead is very different for pre-L vs L+).
* Does not include disk used up by profile, etc.
* We believe it to be fairly accurate for all L+ devices (less space is required for Dalvik runtime pre-L).
* The sum of these equals Estimated installed size.
### Transfer Size Metrics
* Deflated apk size:
* [Telemetry Graph](https://chromeperf.appspot.com/report?sid=c7dcbe09dee57f6dab19f9307acd97a044a150710357ad25bf217ce004b3b4bb)
* Only relevant for non-patch updates of Chrome (new installs, or manual app updates)
* Patch Size (no longer available):
* Is too slow to be running on the Perf Builder
* Was found to be fairly unactionable
* Used to use [https://github.com/googlesamples/apk-patch-size-estimator](https://github.com/googlesamples/apk-patch-size-estimator)
* Functionality now exists in `//third_party/android_sdk/public/cmdline-tools/latest/bin/apkanalyzer download-size`
### Uncompressed Metrics
* [Telemetry Graph](https://chromeperf.appspot.com/report?sid=33f59871f4e9fa3d155be3c13a068d35e6e621bcc98d9b7b103e0c8485e21097)
* Uncompressed size of classes.dex, locale .pak files, etc
* Reported only for things that are compressed within the .apk