From 576844f33f16e6dc65c54ee9aa40c33031d7ca8e Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Fri, 10 Nov 2017 08:20:15 +0100 Subject: [PATCH] Merge #11646: Require a steady clock for bench with at least micro precision 620bae3 Require a steady clock for bench with at least micro precision (Matt Corallo) Pull request description: Using a non-steady high_precision_clock by default is definitely not what we want, and in practice steady_clock has more than enough precision. Should double-check that travis passes on this one to make sure we actually have at least microsecond precision on all platforms. Tree-SHA512: 54a4af3b6addca9897e8ab04694f9461343691b475ca3ed2368595c37520612e284969be94a8ee3d7c66d16532f7bb16b6ad80284cbc153653e8ef2d56696e9d --- src/bench/bench.cpp | 3 +++ src/bench/bench.h | 6 ++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bench/bench.cpp b/src/bench/bench.cpp index 741d037dbdc8e..b6b5ed5ad8f31 100644 --- a/src/bench/bench.cpp +++ b/src/bench/bench.cpp @@ -23,6 +23,9 @@ void benchmark::BenchRunner::RunAll(benchmark::duration elapsedTimeForOne) { perf_init(); + if (std::ratio_less_equal::value) { + std::cerr << "WARNING: Clock precision is worse than microsecond - benchmarks may be less accurate!\n"; + } std::cout << "#Benchmark" << "," << "count" << "," << "min(ns)" << "," << "max(ns)" << "," << "average(ns)" << "," << "min_cycles" << "," << "max_cycles" << "," << "average_cycles" << "\n"; diff --git a/src/bench/bench.h b/src/bench/bench.h index 4b6074e00fe12..2028bd551edb6 100644 --- a/src/bench/bench.h +++ b/src/bench/bench.h @@ -37,13 +37,11 @@ BENCHMARK(CODE_TO_TIME); */ namespace benchmark { - // On many systems, the high_resolution_clock offers no better resolution than the steady_clock. - // If that's the case, prefer the steady_clock. + // In case high_resolution_clock is steady, prefer that, otherwise use steady_clock. struct best_clock { using hi_res_clock = std::chrono::high_resolution_clock; using steady_clock = std::chrono::steady_clock; - static constexpr bool steady_is_high_res = std::ratio_less_equal::value; - using type = std::conditional::type; + using type = std::conditional::type; }; using clock = best_clock::type; using time_point = clock::time_point;