aboutsummaryrefslogtreecommitdiff
path: root/src/bench/Examples.cpp
diff options
context:
space:
mode:
authorGavin Andresen <[email protected]>2015-09-29 17:17:24 -0400
committerGavin Andresen <[email protected]>2015-09-30 09:24:42 -0400
commit7072c544b52774ac5a22835121e8e2747ad61158 (patch)
tree61bab3fc434f5c058ef43a73cf2cc3b4fd78661a /src/bench/Examples.cpp
parentSimple benchmarking framework (diff)
downloaddiscoin-7072c544b52774ac5a22835121e8e2747ad61158.tar.xz
discoin-7072c544b52774ac5a22835121e8e2747ad61158.zip
Support very-fast-running benchmarks
Avoid calling gettimeofday every time through the benchmarking loop, by keeping track of how long each loop takes and doubling the number of iterations done between time checks when they take less than 1/16'th of the total elapsed time.
Diffstat (limited to 'src/bench/Examples.cpp')
-rw-r--r--src/bench/Examples.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/bench/Examples.cpp b/src/bench/Examples.cpp
new file mode 100644
index 000000000..b6b020a97
--- /dev/null
+++ b/src/bench/Examples.cpp
@@ -0,0 +1,34 @@
+// Copyright (c) 2015 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include "bench.h"
+#include "main.h"
+#include "utiltime.h"
+
+// Sanity test: this should loop ten times, and
+// min/max/average should be close to 100ms.
+static void Sleep100ms(benchmark::State& state)
+{
+ while (state.KeepRunning()) {
+ MilliSleep(100);
+ }
+}
+
+BENCHMARK(Sleep100ms);
+
+// Extremely fast-running benchmark:
+#include <math.h>
+
+volatile double sum = 0.0; // volatile, global so not optimized away
+
+static void Trig(benchmark::State& state)
+{
+ double d = 0.01;
+ while (state.KeepRunning()) {
+ sum += sin(d);
+ d += 0.000001;
+ }
+}
+
+BENCHMARK(Trig);