Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
bench
readwriteblock.cpp
Go to the documentation of this file.
1
// Copyright (c) 2023-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
bench/bench.h
>
6
#include <bench/data/block413567.raw.h>
7
#include <
flatfile.h
>
8
#include <
node/blockstorage.h
>
9
#include <
primitives/block.h
>
10
#include <
primitives/transaction.h
>
11
#include <
serialize.h
>
12
#include <
span.h
>
13
#include <
streams.h
>
14
#include <
test/util/setup_common.h
>
15
#include <validation.h>
16
17
#include <cassert>
18
#include <cstdint>
19
#include <memory>
20
#include <vector>
21
22
static
CBlock
CreateTestBlock
()
23
{
24
CBlock
block;
25
SpanReader
{benchmark::data::block413567} >>
TX_WITH_WITNESS
(block);
26
return
block;
27
}
28
29
static
void
WriteBlockBench
(
benchmark::Bench
& bench)
30
{
31
const
auto
testing_setup{
MakeNoLogFileContext<const TestingSetup>
(
ChainType::MAIN
)};
32
auto
& blockman{testing_setup->m_node.chainman->m_blockman};
33
const
CBlock
block{
CreateTestBlock
()};
34
bench.
run
([&] {
35
const
auto
pos{blockman.WriteBlock(block, 413'567)};
36
assert
(!pos.IsNull());
37
});
38
}
39
40
static
void
ReadBlockBench
(
benchmark::Bench
& bench)
41
{
42
const
auto
testing_setup{
MakeNoLogFileContext<const TestingSetup>
(
ChainType::MAIN
)};
43
auto
& blockman{testing_setup->m_node.chainman->m_blockman};
44
const
auto
& test_block{
CreateTestBlock
()};
45
const
auto
& expected_hash{test_block.GetHash()};
46
const
auto
& pos{blockman.WriteBlock(test_block, 413'567)};
47
bench.
run
([&] {
48
CBlock
block;
49
const
auto
success{blockman.ReadBlock(block, pos, expected_hash)};
50
assert
(success);
51
});
52
}
53
54
static
void
ReadRawBlockBench
(
benchmark::Bench
& bench)
55
{
56
const
auto
testing_setup{
MakeNoLogFileContext<const TestingSetup>
(
ChainType::MAIN
)};
57
auto
& blockman{testing_setup->m_node.chainman->m_blockman};
58
const
auto
pos{blockman.WriteBlock(
CreateTestBlock
(), 413'567)};
59
bench.
run
([&] {
60
const
auto
res{blockman.ReadRawBlock(pos)};
61
assert
(res);
62
});
63
}
64
65
BENCHMARK
(
WriteBlockBench
);
66
BENCHMARK
(
ReadBlockBench
);
67
BENCHMARK
(
ReadRawBlockBench
);
bench.h
BENCHMARK
#define BENCHMARK(n)
Definition
bench.h:68
block.h
blockstorage.h
ChainType::MAIN
@ MAIN
Definition
chaintype.h:12
CBlock
Definition
block.h:74
SpanReader
Minimal stream for reading from an existing byte array by std::span.
Definition
streams.h:83
ankerl::nanobench::Bench
Main entry point to nanobench's benchmarking facility.
Definition
nanobench.h:627
ankerl::nanobench::Bench::run
Bench & run(char const *benchmarkName, Op &&op)
Repeatedly calls op() based on the configuration, and performs measurements.
Definition
nanobench.h:1234
flatfile.h
transaction.h
TX_WITH_WITNESS
static constexpr TransactionSerParams TX_WITH_WITNESS
Definition
transaction.h:180
CreateTestBlock
static CBlock CreateTestBlock()
Definition
readwriteblock.cpp:22
ReadRawBlockBench
static void ReadRawBlockBench(benchmark::Bench &bench)
Definition
readwriteblock.cpp:54
WriteBlockBench
static void WriteBlockBench(benchmark::Bench &bench)
Definition
readwriteblock.cpp:29
ReadBlockBench
static void ReadBlockBench(benchmark::Bench &bench)
Definition
readwriteblock.cpp:40
serialize.h
setup_common.h
MakeNoLogFileContext
std::unique_ptr< T > MakeNoLogFileContext(const ChainType chain_type=ChainType::REGTEST, TestOpts opts={})
Make a test setup that has disk access to the debug.log file disabled.
Definition
setup_common.h:250
span.h
streams.h
assert
assert(!tx.IsCoinBase())
Generated on
for Bitcoin Core by
1.17.0