blob: 62cd08526efb7a3c57b8e81530522173e3f52668 [file] [log] [blame] [view]
# AOT code size analysis
The Dart VM's AOT compiler has support for emitting binary size information
for all the code that gets generated. This information can then be visualized.
## Telling the AOT compiler to generate binary size information
Our AOT compiler accepts an extra `--print-instructions-sizes-to=sizes.json`
flag. If supplied the AOT compiler will emit binary size information for all
generated functions to `sizes.json`.
This flag can be passed to `gen_snapshot` directly, or to the various wrapper
scripts (e.g. `pkg/vm/tool/precompiler2`):
```
% tools/build.py -mrelease -ax64 runtime runtime_precompiled
% pkg/vm/tool/precompiler2 --print-instructions-sizes-to=hello_sizes.json hello.dart hello.dart.aot
```
In Flutter, pass this argument to `flutter build`:
```
% flutter build aot --release --extra-gen-snapshot-options=--print-instructions-sizes-to=hello_sizes.json
```
## Visualizing the information from the binary size json file
To visualize the information emitted by the AOT compiler one can use our binary
size analysis tool:
```
% dart pkg/vm/bin/snapshot_analysis.dart treemap hello_sizes.json hello_sizes
Generated file:///.../sdk/hello_sizes/index.html
% chrome hello_sizes/index.html
```
## Comparing the sizes of two AOT builds
To visualize the differences between two AOT builds one can use our binary size
comparison tool:
```
% dart pkg/vm/bin/snapshot_analysis.dart compare app-sizes--before.json app-sizes--after.json
+---------+--------+--------------+
| Library | Method | Diff (Bytes) |
+---------+--------+--------------+
...
```
## Object-level data
gen_snapshot also accepts an extra `--write-v8-snapshot-profile-to=hello.heapsnapshot`
flag. If supplied the AOT compiler will emit snapshot size information for all objects in the snapshot
to `hello.heapsnapshot` in V8 snapshot format.
This flag can be passed to `gen_snapshot` directly, or to the various wrapper
scripts (e.g. `pkg/vm/tool/precompiler2`):
```
% tools/build.py -mrelease -ax64 runtime runtime_precompiled
% pkg/vm/tool/precompiler2 --write-v8-snapshot-profile-to=hello.heapsnapshot hello.dart hello.dart.aot
```
In Flutter, pass this argument to `flutter build`:
```
% flutter build aot --release --extra-gen-snapshot-options=--write-v8-snapshot-profile-to=hello.heapsnapshot
```
This output can be visualized by loading it in the "Memory" tab in Chrome's developer tools, or by loading it into [Graph Explorer](../tools/graphexplorer/graphexplorer.html).