velocity_tracker_bench.dart 1.74 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5 6
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/gestures.dart';

7
import '../common.dart';
8
import 'data/velocity_tracker_data.dart';
9

10 11
const int _kNumIters = 10000;

12
class TrackerBenchmark {
13
  TrackerBenchmark({required this.name, required this.tracker });
14 15 16 17 18

  final VelocityTracker tracker;
  final String name;
}

19
void main() {
20
  assert(false, "Don't run benchmarks in debug mode! Use 'flutter run --release'.");
21
  final BenchmarkResultPrinter printer = BenchmarkResultPrinter();
22
  final List<TrackerBenchmark> benchmarks = <TrackerBenchmark>[
23
    TrackerBenchmark(name: 'velocity_tracker_iteration', tracker: VelocityTracker.withKind(PointerDeviceKind.touch)),
24
    TrackerBenchmark(name: 'velocity_tracker_iteration_ios_fling', tracker: IOSScrollViewFlingVelocityTracker(PointerDeviceKind.touch)),
25
  ];
26
  final Stopwatch watch = Stopwatch();
27

28 29 30
  for (final TrackerBenchmark benchmark in benchmarks) {
    print('${benchmark.name} benchmark...');
    final VelocityTracker tracker = benchmark.tracker;
31 32 33 34
    watch.reset();
    watch.start();
    for (int i = 0; i < _kNumIters; i += 1) {
      for (final PointerEvent event in velocityEventData) {
35
        if (event is PointerDownEvent || event is PointerMoveEvent) {
36
          tracker.addPosition(event.timeStamp, event.position);
37 38
        }
        if (event is PointerUpEvent) {
39
          tracker.getVelocity();
40
        }
41
      }
42
    }
43 44
    watch.stop();
    printer.addResult(
45
      description: 'Velocity tracker: ${tracker.runtimeType}',
46 47
      value: watch.elapsedMicroseconds / _kNumIters,
      unit: 'µs per iteration',
48
      name: benchmark.name,
49
    );
50
  }
51 52

  printer.printToStdout();
53
}