From a763504f9d779391cf19b5259508c28a9e0cd331 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 27 Nov 2013 17:37:54 -0800 Subject: 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 --- benchmarks/benchmark_main.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'benchmarks') 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]; -- cgit v1.1