compute_bench.dart 1.23 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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<String, dynamic> toJson() => <String, dynamic>{ 'value': value };

  final int value;
}

List<Data> test(int length) {
  return List<Data>.generate(length,
      (int index) => Data(index * index));
}

Future<void> 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();
}