Have BenchmarkBase report runs, total and average run times.
diff --git a/lib/src/benchmark_base.dart b/lib/src/benchmark_base.dart
index 9368e5a..5d32d19 100644
--- a/lib/src/benchmark_base.dart
+++ b/lib/src/benchmark_base.dart
@@ -1,6 +1,8 @@
// Copyright 2011 Google Inc. All Rights Reserved.
// BenchmarkBase.dart
+part of benchmark_harness;
+
class BenchmarkBase {
final String name;
@@ -12,15 +14,19 @@
void run() { }
// Runs a short version of the benchmark. By default invokes [run] once.
- void warmup() {
+ int warmup() {
run();
+ return 1;
}
// Exercices the benchmark. By default invokes [run] 10 times.
- void exercise() {
+ int exercise() {
+ int runs = 0;
for (int i = 0; i < 10; i++) {
run();
+ runs++;
}
+ return runs;
}
// Not measured setup code executed prior to the benchmark runs.
@@ -31,34 +37,40 @@
// Measures the score for this benchmark by executing it repeately until
// time minimum has been reached.
- static double measureFor(Function f, int timeMinimum) {
+ static List measureFor(Function f, int timeMinimum) {
int time = 0;
int iter = 0;
+ int runs = 0;
Stopwatch watch = new Stopwatch();
watch.start();
int elapsed = 0;
while (elapsed < timeMinimum) {
- f();
+ int r = f();
+ runs += r;
elapsed = watch.elapsedMilliseconds;
iter++;
}
- return 1000.0 * elapsed / iter;
+ return [1000.0 * elapsed / iter, runs];
}
// Measures the score for the benchmark and returns it.
- double measure() {
+ List measure() {
setup();
// Warmup for at least 100ms. Discard result.
- measureFor(() { this.warmup(); }, 100);
+ measureFor(() { return this.warmup(); }, 100);
// Run the benchmark for at least 2000ms.
- double result = measureFor(() { this.exercise(); }, 2000);
+ List result = measureFor(() { return this.exercise(); }, 2000);
teardown();
return result;
}
void report() {
- double score = measure();
- print("$name(RunTime): $score us.");
+ List result = measure();
+ double score = result[0];
+ int runs = result[1];
+ print("$name(TotalRunTime): $score us.");
+ print("$name(Runs): $runs.");
+ print("$name(AverageRunTime): ${score/runs} us.");
}
}