From 98120d19d35c8f13721973b8cc42501805032829 Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Mon, 4 Oct 2021 14:16:23 -0700 Subject: [PATCH] Add a microbenchmark that measures performance of flutter compute. (#91257) * Add a microbenchmark that measures performance of flutter compute. This benchmark should show performance improvements when compute is switched to Isolate.exit * Fix analyzer warnings, increase warmup iterations * Fix license header --- .../lib/language/compute_bench.dart | 49 +++++++++++++++++++ dev/devicelab/lib/tasks/microbenchmarks.dart | 1 + 2 files changed, 50 insertions(+) create mode 100644 dev/benchmarks/microbenchmarks/lib/language/compute_bench.dart diff --git a/dev/benchmarks/microbenchmarks/lib/language/compute_bench.dart b/dev/benchmarks/microbenchmarks/lib/language/compute_bench.dart new file mode 100644 index 0000000000..fa9d995eec --- /dev/null +++ b/dev/benchmarks/microbenchmarks/lib/language/compute_bench.dart @@ -0,0 +1,49 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/foundation.dart'; + +import '../common.dart'; + +const int _kNumIterations = 10; +const int _kNumWarmUp = 100; + +class Data { + Data(this.value); + + Map toJson() => { 'value': value }; + + final int value; +} + +List test(int length) { + return List.generate(length, + (int index) => Data(index * index)); +} + +Future main() async { + assert(false, "Don't run benchmarks in checked mode! Use 'flutter run --release'."); + + // Warm up lap + for (int i = 0; i < _kNumWarmUp; i += 1) { + await compute(test, 10); + } + + final Stopwatch watch = Stopwatch(); + watch.start(); + for (int i = 0; i < _kNumIterations; i += 1) { + await compute(test, 1000000); + } + final int elapsedMicroseconds = watch.elapsedMicroseconds; + + final BenchmarkResultPrinter printer = BenchmarkResultPrinter(); + const double scale = 1000.0 / _kNumIterations; + printer.addResult( + description: 'compute', + value: elapsedMicroseconds * scale, + unit: 'ns per iteration', + name: 'compute_iteration', + ); + printer.printToStdout(); +} diff --git a/dev/devicelab/lib/tasks/microbenchmarks.dart b/dev/devicelab/lib/tasks/microbenchmarks.dart index 957ab4cd8e..0ed109834e 100644 --- a/dev/devicelab/lib/tasks/microbenchmarks.dart +++ b/dev/devicelab/lib/tasks/microbenchmarks.dart @@ -54,6 +54,7 @@ TaskFunction createMicrobenchmarkTask() { ...await _runMicrobench('lib/gestures/velocity_tracker_bench.dart'), ...await _runMicrobench('lib/gestures/gesture_detector_bench.dart'), ...await _runMicrobench('lib/stocks/animation_bench.dart'), + ...await _runMicrobench('lib/language/compute_bench.dart'), ...await _runMicrobench('lib/language/sync_star_bench.dart'), ...await _runMicrobench('lib/language/sync_star_semantics_bench.dart'), ...await _runMicrobench('lib/foundation/all_elements_bench.dart'),