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'),