diff options
author | Colin Cross <ccross@android.com> | 2013-11-27 17:37:54 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2015-01-15 16:42:20 -0800 |
commit | a763504f9d779391cf19b5259508c28a9e0cd331 (patch) | |
tree | 958c8f5343bef148d5edaf3266883ef75fb0da30 /benchmarks | |
parent | 3159972a80234f7a8e3903cefaeb7719a50f6279 (diff) | |
download | bionic-a763504f9d779391cf19b5259508c28a9e0cd331.zip bionic-a763504f9d779391cf19b5259508c28a9e0cd331.tar.gz bionic-a763504f9d779391cf19b5259508c28a9e0cd331.tar.bz2 |
bionic benchmarks: limit benchmark run time to 1s real time
The benchmark run loop tries to run until 1s of time has been
accumulated between StartBenchmarkTiming() and StopBenchmarkTiming().
If a majority of the time is spent stopped this can lead to
benchmarks running for very long periods of time. This can easily
happen when benchmarking something that requires initialization or
cleanup on each iteration.
Modify the loop to run for 1s of real time instead of 1s of
benchmark time. For existing benchmarks this shouldn't make much
of a difference.
Change-Id: Iaba8a13b4dfc4a5e2cd9992041c9173ea556f9cc
Diffstat (limited to 'benchmarks')
-rw-r--r-- | benchmarks/benchmark_main.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/benchmarks/benchmark_main.cpp b/benchmarks/benchmark_main.cpp index 7140ab6..e922e1e 100644 --- a/benchmarks/benchmark_main.cpp +++ b/benchmarks/benchmark_main.cpp @@ -134,19 +134,23 @@ void Benchmark::RunRepeatedlyWithArg(int iterations, int arg) { } void Benchmark::RunWithArg(int arg) { - // run once in case it's expensive + // Run once in case it's expensive. int iterations = 1; + int64_t realStartTime = NanoTime(); RunRepeatedlyWithArg(iterations, arg); - while (g_benchmark_total_time_ns < 1e9 && iterations < 1e9) { + int64_t realTotalTime = NanoTime() - realStartTime; + while (realTotalTime < 1e9 && iterations < 1e8) { int last = iterations; - if (g_benchmark_total_time_ns/iterations == 0) { + if (realTotalTime/iterations == 0) { iterations = 1e9; } else { - iterations = 1e9 / (g_benchmark_total_time_ns/iterations); + iterations = 1e9 / (realTotalTime/iterations); } iterations = std::max(last + 1, std::min(iterations + iterations/2, 100*last)); iterations = Round(iterations); + realStartTime = NanoTime(); RunRepeatedlyWithArg(iterations, arg); + realTotalTime = NanoTime() - realStartTime; } char throughput[100]; |