Engine disk footprint

Here are all the tools to help track and debug the disk size of the Flutter engine.

Treemaps

For each commit to flutter/flutter the Chromebots generate treemaps illustrating the sizes of the individual components within release builds of libflutter.so. The treemap is uploaded to Google Cloud Storage and linked from the LUCI console.

To find a treemap for a given commit follow these steps:

  1. go to the list of all flutter commits: https://github.com/flutter/flutter/commits/main/
  2. find the commit you want to evaluate, then click on the green checkbox to see the checks
  3. find the check titled Linux linux_android_aot_engine, click on details
  4. Click on View more details on flutter-dashboard to get access to the LUCI build page (example: https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20linux_android_aot_engine/17969/overview).
  5. expand the section called launch builds
  6. find the launched build named something like Linux Production Engine Drone for ci/android_release_arm64, click it (example https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20Production%20Engine%20Drone/1294317/overview).
  7. look for the build section called log links, click the index.html link under it (example: https://storage.googleapis.com/flutter_logs/engine/96fe3b3df509d451116124f0abbd288e36a03805/builder/ff60e5a3-b415-42ae-a7b4-025b1af8ec71/index.html).

Treemaps can also be generated locally with the following call:

flutter/ci/binary_size_treemap.sh <path/to/libflutter.so> <output_directory>

Benchmarks

In devicelab we run various benchmarks to track the APK/IPA sizes and various (engine) artifacts contained within. These benchmarks run for every commit to flutter/flutter and are visible on our build dashboard. The most relevant benchmarks for engine size are:

  • APK/IPA size of Flutter Gallery
    • Android: flutter_gallery_android__compile/release_size_bytes
    • iOS: flutter_gallery_ios__compile/release_size_bytes
  • APK/IPA size of minimal hello_world app
    • Android: hello_world_android__compile/release_size_bytes
    • iOS: hello_world_ios__compile/release_size_bytes
  • Size of bundled icudtl.dat
    • Compressed in APK: hello_world_android__compile/icudtl_compressed_bytes
    • Uncompressed: hello_world_android__compile/icudtl_uncompressed_bytes
  • Size of bundled libflutter.so (release mode)
    • Compressed in APK: hello_world_android__compile/libflutter_compressed_bytes
    • Uncompressed: hello_world_android__compile/libflutter_uncompressed_bytes
  • Size of VM & isolate snapshots (data and instructions)
    • Compressed in APK: hello_world_android__compile/snapshot_compressed_bytes
    • Uncompressed: hello_world_android__compile/snapshot_uncompressed_bytes

Comparing AOT Snapshot Sizes

A detailed comparison of AOT snapshot sizes can be performed using the instructions documented here.