aboutsummaryrefslogtreecommitdiff
path: root/src/bench/bench.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2016-11-22 09:59:50 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2016-11-22 10:01:41 +0100
commite0a9cb25b0af87723d50cb8d8cffa10f1ebf7dcc (patch)
treec364b3a50ffbb06cff94102754da92729feada7e /src/bench/bench.cpp
parente4dbeb94998ddf2c0f018eb4753a01515265b310 (diff)
downloadbitcoin-e0a9cb25b0af87723d50cb8d8cffa10f1ebf7dcc.tar.xz
bench: Fix subtle counting issue when rescaling iteration count
Make sure that the count is a zero modulo the new mask before scaling, otherwise the next time until a measure triggers will take only 1/2 as long as accounted for. This caused the 'min time' to be potentially off by as much as 100%.
Diffstat (limited to 'src/bench/bench.cpp')
-rw-r--r--src/bench/bench.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/bench/bench.cpp b/src/bench/bench.cpp
index 227546a7a7..8942da8c74 100644
--- a/src/bench/bench.cpp
+++ b/src/bench/bench.cpp
@@ -64,8 +64,11 @@ bool State::KeepRunning()
return true;
}
if (elapsed*16 < maxElapsed) {
- countMask = ((countMask<<1)|1) & ((1LL<<60)-1);
- countMaskInv = 1./(countMask+1);
+ uint64_t newCountMask = ((countMask<<1)|1) & ((1LL<<60)-1);
+ if ((count & newCountMask)==0) {
+ countMask = newCountMask;
+ countMaskInv = 1./(countMask+1);
+ }
}
}
lastTime = now;