Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Side by Side Diff: code_transformers/lib/src/async_benchmark_base.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « code_transformers/lib/resolver.dart ('k') | code_transformers/lib/src/dart_sdk.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 library code_transformers.src.async_benchmark_base;
5
6 import 'dart:async';
7
8 /// An adaptation of [BenchmarkBase] from the `benchmark_harness` package that
9 /// works for async benchmarks.
10 /// TODO(jakemac): Get this merged into `benchmark_harness`.
11 class AsyncBenchmarkBase {
12 // Empty constructor.
13 const AsyncBenchmarkBase();
14
15 // The benchmark code.
16 // This function is not used, if both [warmup] and [exercise] are overwritten.
17 Future run() => new Future.value();
18
19 // Runs a short version of the benchmark. By default invokes [run] once.
20 Future warmup() => run();
21
22 // Exercices the benchmark. By default invokes [run] 10 times.
23 Future exercise({int iterations: 10}) {
24 var i = 0;
25 return Future.doWhile(() {
26 if (i >= iterations) return new Future.value(false);
27 i++;
28 return run().then((_) => true);
29 });
30 }
31
32 // Not measured setup code executed prior to the benchmark runs.
33 Future setup() => new Future.value();
34
35 // Not measures teardown code executed after the benchark runs.
36 Future teardown() => new Future.value();
37
38 // Measures the score for this benchmark by executing it repeatedly until
39 // time minimum has been reached.
40 static Future<double> measureFor(Function f, int minimumMillis) {
41 int minimumMicros = minimumMillis * 1000;
42 int iter = 0;
43 Stopwatch watch = new Stopwatch();
44 watch.start();
45 int elapsed = 0;
46 return Future.doWhile(() {
47 if (elapsed > minimumMicros) return new Future.value(false);
48 return f().then((_) {
49 elapsed = watch.elapsedMicroseconds;
50 iter++;
51 return true;
52 });
53 }).then((_) => elapsed / iter);
54 }
55
56 // Measures the average time to call `run` once and returns it.
57 Future<double> measure({int iterations: 10}) {
58 // Unmeasured setup code.
59 return setup().then((_) {
60 // Warmup for at least 100ms. Discard result.
61 return measureFor(() => warmup(), 100);
62 }).then((_) {
63 // Run the benchmark for at least 2000ms.
64 return measureFor(() => exercise(iterations: iterations), 2000);
65 }).then((result) {
66 // Tear down the test (unmeasured) and return the result divided by the
67 // number of iterations.
68 return teardown().then((_) => result / iterations);
69 });
70 }
71 }
OLDNEW
« no previous file with comments | « code_transformers/lib/resolver.dart ('k') | code_transformers/lib/src/dart_sdk.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698