Performance benchmarks use either flutter drive or the web benchmark harness.
To run the cull opacity benchmark on a device:
flutter drive --profile test_driver/cull_opacity_perf.dart
Results should be in the file build/cull_opacity_perf.timeline_summary.json
.
More detailed logs should be in build/cull_opacity_perf.timeline.json
.
To run the cubic bezier benchmark on a device:
flutter drive --profile test_driver/cubic_bezier_perf.dart
Results should be in the file build/cubic_bezier_perf.timeline_summary.json
.
More detailed logs should be in build/cubic_bezier_perf.timeline.json
.
To run the backdrop filter benchmark on a device:
flutter drive --profile test_driver/backdrop_filter_perf.dart
Results should be in the file build/backdrop_filter_perf.timeline_summary.json
.
More detailed logs should be in build/backdrop_filter_perf.timeline.json
.
To run the post-backdrop filter benchmark on a device:
flutter drive --profile test_driver/post_backdrop_filter_perf.dart
Results should be in the file build/post_backdrop_filter_perf.timeline_summary.json
.
More detailed logs should be in build/post_backdrop_filter_perf.timeline.json
.
Web benchmarks are compiled from the same entrypoint in lib/web_benchmarks.dart
.
Create a new file for your benchmark under lib/src/web
. See bench_draw_rect.dart
as an example.
Choose one of the two benchmark types:
dart:ui
with no framework. This kind of benchmark is good for benchmarking low-level engine primitives, such as layer, picture, and semantics performance.For a raw benchmark extend RawRecorder
(tip: you can start by copying bench_draw_rect.dart
).
For a widget benchmark extend WidgetRecorder
(tip: you can start by copying bench_simple_lazy_text_scroll.dart
).
For a widget build benchmark extend WidgetBuildRecorder
(tip: you can start by copying bench_build_material_checkbox.dart
).
Pick a unique benchmark name and class name and add it to the benchmarks
list in lib/web_benchmarks.dart
.
Web benchmarks can be run using flutter run
in debug, profile, and release modes, using either the HTML or the CanvasKit rendering backend. Note, however, that running in debug mode will result in worse numbers. Profile mode is useful for profiling in Chrome DevTools because the numbers are close to release mode and the profile contains unobfuscated names.
Example:
cd dev/benchmarks/macrobenchmarks # Runs in profile mode using the HTML renderer flutter run --profile -d web-server lib/web_benchmarks.dart # Runs in profile mode using the CanvasKit renderer flutter run --dart-define=FLUTTER_WEB_USE_SKIA=true --profile -d web-server lib/web_benchmarks.dart
You can also run all benchmarks exactly like the devicelab runs them:
cd dev/devicelab # Runs using the HTML renderer ../../bin/cache/dart-sdk/bin/dart bin/run.dart -t bin/tasks/web_benchmarks_html.dart # Runs using the CanvasKit renderer ../../bin/cache/dart-sdk/bin/dart bin/run.dart -t bin/tasks/web_benchmarks_canvaskit.dart