// 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 '../common.dart'; const int _kNumIterations = 1000; const int _kNumWarmUp = 100; void main() { assert(false, "Don't run benchmarks in debug mode! Use 'flutter run --release'."); // Warm up lap for (int i = 0; i < _kNumWarmUp; i += 1) { sumIterable(generateIterableSyncStar()); sumIterable(generateIterableList()); sumIterable(Iterable<int>.generate(100, generate)); } final Stopwatch watch = Stopwatch(); watch.start(); for (int i = 0; i < _kNumIterations; i += 1) { sumIterable(generateIterableSyncStar()); } final int traverseIterableSyncStar = watch.elapsedMicroseconds; watch ..reset() ..start(); for (int i = 0; i < _kNumIterations; i += 1) { sumIterable(generateIterableList()); } final int traverseIterableList = watch.elapsedMicroseconds; watch ..reset() ..start(); for (int i = 0; i < _kNumIterations; i += 1) { sumIterable(Iterable<int>.generate(100, generate)); } final int traverseIterableGenerated = watch.elapsedMicroseconds; watch ..reset() ..start(); final BenchmarkResultPrinter printer = BenchmarkResultPrinter(); const double scale = 1000.0 / _kNumIterations; printer.addResult( description: 'traverseIterableSyncStar', value: traverseIterableSyncStar * scale, unit: 'ns per iteration', name: 'traverseIterableSyncStar_iteration', ); printer.addResult( description: 'traverseIterableList', value: traverseIterableList * scale, unit: 'ns per iteration', name: 'traverseIterableList_iteration', ); printer.addResult( description: 'traverseIterableGenerated', value: traverseIterableGenerated * scale, unit: 'ns per iteration', name: 'traverseIterableGenerated_iteration', ); printer.printToStdout(); } int generate(int index) => index; // Generate an Iterable using a sync* method. Iterable<int> generateIterableSyncStar() sync* { for (int i = 0; i < 100; i++) { yield i; } } // Generate an Iterable using a List. Iterable<int> generateIterableList() { final List<int> items = <int>[]; for (int i = 0; i < 100; i++) { items.add(i); } return items; } int sumIterable(Iterable<int> values) { int result = 0; for (final int value in values) { result += value; } return result; }