summaryrefslogtreecommitdiffstats
path: root/benchmarks
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2013-11-27 17:37:54 -0800
committerElliott Hughes <enh@google.com>2015-01-15 16:42:20 -0800
commita763504f9d779391cf19b5259508c28a9e0cd331 (patch)
tree958c8f5343bef148d5edaf3266883ef75fb0da30 /benchmarks
parent3159972a80234f7a8e3903cefaeb7719a50f6279 (diff)
downloadbionic-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.cpp12
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];