SuperSize is comprised of two parts:
- A command-line tool for creating and inspecting
.sizeand.sizedifffiles, - A web app for visualizing
.sizeand.sizedifffiles.
For more details, see //tools/binary_size/libsupersize/docs.
[TOC]
Chrome on Android needs to be as lean as possible. Having a tool that can show why binary grows & shrinks helps keep it lean.
The android-binary-size trybot uses SuperSize to show an APK Breakdown on every Chromium code review.
SuperSize is also used when creating milestone size reports (Googlers only).
No. It works only for binaries built using Chrome's custom build system. E.g.:
- It assumes
.ninjabuild rules are available. - It uses heuristic for locating
.sogiven.apk. - It requires the
size-infobuild directory to analyze.pakand.dexfiles.
Collect size information into a .size file.
*** note Note: Refer to diagnose_bloat.py for list of GN args to build a release binary (or just use the tool with --single).
Example Usage:
# Android:
autoninja -C out/Release chrome_public_apk
tools/binary_size/supersize archive chrome.size -f out/Release/apks/ChromePublic.apk -v
# Linux:
autoninja -C out/Release chrome
tools/binary_size/supersize archive chrome.size -f out/Release/chrome -vStarts a Python interpreter where you can run custom queries, or run pre-made
queries from canned_queries.py.
Example Usage:
# Prints size information and exits (does not enter interactive mode).
tools/binary_size/supersize console chrome.size --query='Print(size_info)'
# Enters a Python REPL (it will print more guidance).
tools/binary_size/supersize console chrome.sizeExample Session:
>>> ShowExamples() # Get some inspiration.
...
>>> sorted = size_info.symbols.WhereInSection('t').Sorted()
>>> Print(sorted) # Have a look at the largest symbols.
...
>>> sym = sorted.WhereNameMatches('TrellisQuantizeBlock')[0]
>>> Disassemble(sym) # Time to learn assembly.
...
>>> help(canned_queries)
...
>>> Print(canned_queries.TemplatesByName(depth=-1))
...
>>> syms = size_info.symbols.WherePathMatches(r'skia').Sorted()
>>> Print(syms, verbose=True) # Show full symbol names with parameter types.
...
>>> # Dump all string literals from skia files to "strings.txt".
>>> Print((t[1] for t in ReadStringLiterals(syms)), to_file='strings.txt')Creates a .sizediff file given two .size files. A .sizediff file contains
two .size files, with all unchanged symbols removed.
Example Usage:
tools/binary_size/supersize save_diff before.size after.size out.sizediffA convenience command equivalent to:
console before.size after.size --query='Print(Diff(size_info1, size_info2))'
Example Usage:
tools/binary_size/supersize diff before.size after.size --allThere is a GCS bucket available for Googlers to share SuperSize files (requires
a one-time gsutil.py config to login).
To share publicly:
FILENAME=descriptive_name.sizediff
gsutil.py cp -a public-read "$FILENAME" gs://chrome-supersize/oneoffs/$USER/
echo "Share via: https://chrome-supersize.firebaseapp.com/viewer.html?load_url=https://storage.googleapis.com/chrome-supersize/oneoffs/$USER/$(basename $FILENAME)"To share to Googlers only:
FILENAME=descriptive_name.sizediff
gsutil.py cp "$FILENAME" gs://chrome-supersize/private-oneoffs/$USER/
echo "Share via: https://chrome-supersize.firebaseapp.com/viewer.html?load_url=https://storage.googleapis.com/chrome-supersize/private-oneoffs/$USER/$(basename $FILENAME)"To delete a file you uploaded by mistake:
gsutil.py rm gs://chrome-supersize/oneoffs/$USER/filename