Changeset View
Changeset View
Standalone View
Standalone View
src/bench/merkle_root.cpp
// Copyright (c) 2016 The Bitcoin Core developers | // Copyright (c) 2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <bench/bench.h> | #include <bench/bench.h> | ||||
#include <consensus/merkle.h> | #include <consensus/merkle.h> | ||||
#include <random.h> | #include <random.h> | ||||
#include <uint256.h> | #include <uint256.h> | ||||
static void MerkleRoot(benchmark::State &state) { | static void MerkleRoot(benchmark::Bench &bench) { | ||||
FastRandomContext rng(true); | FastRandomContext rng(true); | ||||
std::vector<uint256> leaves; | std::vector<uint256> leaves; | ||||
leaves.resize(9001); | leaves.resize(9001); | ||||
for (auto &item : leaves) { | for (auto &item : leaves) { | ||||
item = rng.rand256(); | item = rng.rand256(); | ||||
} | } | ||||
while (state.KeepRunning()) { | bench.batch(leaves.size()).unit("leaf").run([&] { | ||||
bool mutation = false; | bool mutation = false; | ||||
uint256 hash = | uint256 hash = | ||||
ComputeMerkleRoot(std::vector<uint256>(leaves), &mutation); | ComputeMerkleRoot(std::vector<uint256>(leaves), &mutation); | ||||
leaves[mutation] = hash; | leaves[mutation] = hash; | ||||
} | }); | ||||
} | } | ||||
BENCHMARK(MerkleRoot, 800); | BENCHMARK(MerkleRoot); |