| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file | |
| // for details. 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:pool/pool.dart'; | |
| void main(List<String> args) async { | |
| var poolSize = args.isEmpty ? 5 : int.parse(args.first); | |
| print('Pool size: $poolSize'); | |
| final pool = Pool(poolSize); | |
| final watch = Stopwatch()..start(); | |
| final start = DateTime.now(); | |
| DateTime? lastLog; | |
| Duration? fastest; | |
| late int fastestIteration; | |
| var i = 1; | |
| void log(bool force) { | |
| var now = DateTime.now(); | |
| if (force || | |
| lastLog == null || | |
| now.difference(lastLog!) > const Duration(seconds: 1)) { | |
| lastLog = now; | |
| print([ | |
| now.difference(start), | |
| i.toString().padLeft(10), | |
| fastestIteration.toString().padLeft(7), | |
| fastest!.inMicroseconds.toString().padLeft(9) | |
| ].join(' ')); | |
| } | |
| } | |
| print(['Elapsed ', 'Iterations', 'Fastest', 'Time (us)'].join(' ')); | |
| for (;; i++) { | |
| watch.reset(); | |
| var sum = await pool | |
| .forEach<int, int>(Iterable<int>.generate(100000), (i) => i) | |
| .reduce((a, b) => a + b); | |
| assert(sum == 4999950000, 'was $sum'); | |
| var elapsed = watch.elapsed; | |
| if (fastest == null || fastest > elapsed) { | |
| fastest = elapsed; | |
| fastestIteration = i; | |
| log(true); | |
| } else { | |
| log(false); | |
| } | |
| } | |
| } |