aboutsummaryrefslogtreecommitdiff
path: root/src/bench
diff options
context:
space:
mode:
authorCory Fields <[email protected]>2017-10-25 17:54:05 -0400
committerCory Fields <[email protected]>2017-11-07 17:17:34 -0500
commit24a0bddf4ae13d8f1fa0436a547de67dcf6d4f2a (patch)
tree750eb10d5a83e928c2afb9ad3e68623f1f4f8809 /src/bench
parentbench: switch to std::chrono for time measurements (diff)
downloaddiscoin-24a0bddf4ae13d8f1fa0436a547de67dcf6d4f2a.tar.xz
discoin-24a0bddf4ae13d8f1fa0436a547de67dcf6d4f2a.zip
bench: prefer a steady clock if the resolution is no worse
Diffstat (limited to 'src/bench')
-rw-r--r--src/bench/bench.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/bench/bench.h b/src/bench/bench.h
index d7037e1f3..d276f4ee9 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;