// 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/gestures.dart'; import '../common.dart'; import 'data/velocity_tracker_data.dart'; const int _kNumIters = 10000; class TrackerBenchmark { TrackerBenchmark({required this.name, required this.tracker }); final VelocityTracker tracker; final String name; } void main() { assert(false, "Don't run benchmarks in debug mode! Use 'flutter run --release'."); final BenchmarkResultPrinter printer = BenchmarkResultPrinter(); final List<TrackerBenchmark> benchmarks = <TrackerBenchmark>[ TrackerBenchmark(name: 'velocity_tracker_iteration', tracker: VelocityTracker.withKind(PointerDeviceKind.touch)), TrackerBenchmark(name: 'velocity_tracker_iteration_ios_fling', tracker: IOSScrollViewFlingVelocityTracker(PointerDeviceKind.touch)), ]; final Stopwatch watch = Stopwatch(); for (final TrackerBenchmark benchmark in benchmarks) { print('${benchmark.name} benchmark...'); final VelocityTracker tracker = benchmark.tracker; watch.reset(); watch.start(); for (int i = 0; i < _kNumIters; i += 1) { for (final PointerEvent event in velocityEventData) { if (event is PointerDownEvent || event is PointerMoveEvent) { tracker.addPosition(event.timeStamp, event.position); } if (event is PointerUpEvent) { tracker.getVelocity(); } } } watch.stop(); printer.addResult( description: 'Velocity tracker: ${tracker.runtimeType}', value: watch.elapsedMicroseconds / _kNumIters, unit: 'µs per iteration', name: benchmark.name, ); } printer.printToStdout(); }