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
This commit is contained in:
parent
3159972a80
commit
a763504f9d
1 changed files with 8 additions and 4 deletions
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue