diff options
author | Cory Fields <cory-nospam-@coryfields.com> | 2017-10-25 17:54:05 -0400 |
---|---|---|
committer | Cory Fields <cory-nospam-@coryfields.com> | 2017-11-07 17:17:34 -0500 |
commit | 24a0bddf4ae13d8f1fa0436a547de67dcf6d4f2a (patch) | |
tree | 750eb10d5a83e928c2afb9ad3e68623f1f4f8809 /src | |
parent | c515d266ec04d7f0b2b1b3815a793c27ddcd4e1c (diff) |
bench: prefer a steady clock if the resolution is no worse
Diffstat (limited to 'src')
-rw-r--r-- | src/bench/bench.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/bench/bench.h b/src/bench/bench.h index d7037e1f33..d276f4ee91 100644 --- a/src/bench/bench.h +++ b/src/bench/bench.h @@ -37,8 +37,15 @@ BENCHMARK(CODE_TO_TIME); */ namespace benchmark { - - using clock = std::chrono::high_resolution_clock; + // On many systems, the high_resolution_clock offers no better resolution than the steady_clock. + // If that's the case, prefer the 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<steady_clock::period, hi_res_clock::period>::value; + using type = std::conditional<steady_is_high_res, steady_clock, hi_res_clock>::type; + }; + using clock = best_clock::type; using time_point = clock::time_point; using duration = clock::duration; |