Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
bench
rpc_blockchain.cpp
Go to the documentation of this file.
1
// Copyright (c) 2016-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 <chain.h>
8
#include <
core_io.h
>
9
#include <
primitives/block.h
>
10
#include <
primitives/transaction.h
>
11
#include <
rpc/blockchain.h
>
12
#include <
serialize.h
>
13
#include <
span.h
>
14
#include <
streams.h
>
15
#include <
test/util/setup_common.h
>
16
#include <
uint256.h
>
17
#include <
univalue.h
>
18
#include <validation.h>
19
20
#include <cstddef>
21
#include <memory>
22
#include <vector>
23
24
namespace
{
25
26
struct
TestBlockAndIndex {
27
const
std::unique_ptr<const TestingSetup> testing_setup{
MakeNoLogFileContext<const TestingSetup>
(
ChainType::MAIN
)};
28
CBlock block{};
29
uint256 blockHash{};
30
CBlockIndex blockindex{};
31
32
TestBlockAndIndex()
33
{
34
DataStream stream{benchmark::data::block413567};
35
std::byte a{0};
36
stream.
write
({&a, 1});
// Prevent compaction
37
38
stream >>
TX_WITH_WITNESS
(block);
39
40
blockHash = block.GetHash();
41
blockindex.phashBlock = &blockHash;
42
blockindex.nBits = 403014710;
43
}
44
};
45
46
}
// namespace
47
48
static
void
BlockToJson
(
benchmark::Bench
& bench,
TxVerbosity
verbosity)
49
{
50
TestBlockAndIndex data;
51
const
uint256
pow_limit{data.testing_setup->m_node.chainman->GetParams().GetConsensus().powLimit};
52
bench.
run
([&] {
53
auto
univalue =
blockToJSON
(data.testing_setup->m_node.chainman->m_blockman, data.block, data.blockindex, data.blockindex, verbosity, pow_limit);
54
ankerl::nanobench::doNotOptimizeAway
(univalue);
55
});
56
}
57
58
static
void
BlockToJsonVerbosity1
(
benchmark::Bench
& bench)
59
{
60
BlockToJson
(bench,
TxVerbosity::SHOW_TXID
);
61
}
62
63
static
void
BlockToJsonVerbosity2
(
benchmark::Bench
& bench)
64
{
65
BlockToJson
(bench,
TxVerbosity::SHOW_DETAILS
);
66
}
67
68
static
void
BlockToJsonVerbosity3
(
benchmark::Bench
& bench)
69
{
70
BlockToJson
(bench,
TxVerbosity::SHOW_DETAILS_AND_PREVOUT
);
71
}
72
73
BENCHMARK
(
BlockToJsonVerbosity1
);
74
BENCHMARK
(
BlockToJsonVerbosity2
);
75
BENCHMARK
(
BlockToJsonVerbosity3
);
76
77
static
void
BlockToJsonVerboseWrite
(
benchmark::Bench
& bench)
78
{
79
TestBlockAndIndex data;
80
const
uint256
pow_limit{data.testing_setup->m_node.chainman->GetParams().GetConsensus().powLimit};
81
auto
univalue =
blockToJSON
(data.testing_setup->m_node.chainman->m_blockman, data.block, data.blockindex, data.blockindex,
TxVerbosity::SHOW_DETAILS_AND_PREVOUT
, pow_limit);
82
bench.
run
([&] {
83
auto
str = univalue.write();
84
ankerl::nanobench::doNotOptimizeAway
(str);
85
});
86
}
87
88
BENCHMARK
(
BlockToJsonVerboseWrite
);
bench.h
BENCHMARK
#define BENCHMARK(n)
Definition
bench.h:68
block.h
blockToJSON
UniValue blockToJSON(BlockManager &blockman, const CBlock &block, const CBlockIndex &tip, const CBlockIndex &blockindex, TxVerbosity verbosity, const uint256 pow_limit)
Block description to JSON.
Definition
blockchain.cpp:202
blockchain.h
ChainType::MAIN
@ MAIN
Definition
chaintype.h:12
DataStream::write
void write(std::span< const value_type > src)
Definition
streams.h:236
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
uint256
256-bit opaque blob.
Definition
uint256.h:195
core_io.h
TxVerbosity
TxVerbosity
Verbose level for block's transaction.
Definition
core_io.h:28
TxVerbosity::SHOW_DETAILS_AND_PREVOUT
@ SHOW_DETAILS_AND_PREVOUT
The same as previous option with information about prevouts if available.
Definition
core_io.h:31
TxVerbosity::SHOW_TXID
@ SHOW_TXID
Only TXID for each block's transaction.
Definition
core_io.h:29
TxVerbosity::SHOW_DETAILS
@ SHOW_DETAILS
Include TXID, inputs, outputs, and other common block's transaction information.
Definition
core_io.h:30
ankerl::nanobench::doNotOptimizeAway
void doNotOptimizeAway(Arg &&arg)
Makes sure none of the given arguments are optimized away by the compiler.
Definition
nanobench.h:1279
transaction.h
TX_WITH_WITNESS
static constexpr TransactionSerParams TX_WITH_WITNESS
Definition
transaction.h:180
BlockToJsonVerbosity2
static void BlockToJsonVerbosity2(benchmark::Bench &bench)
Definition
rpc_blockchain.cpp:63
BlockToJson
static void BlockToJson(benchmark::Bench &bench, TxVerbosity verbosity)
Definition
rpc_blockchain.cpp:48
BlockToJsonVerbosity1
static void BlockToJsonVerbosity1(benchmark::Bench &bench)
Definition
rpc_blockchain.cpp:58
BlockToJsonVerboseWrite
static void BlockToJsonVerboseWrite(benchmark::Bench &bench)
Definition
rpc_blockchain.cpp:77
BlockToJsonVerbosity3
static void BlockToJsonVerbosity3(benchmark::Bench &bench)
Definition
rpc_blockchain.cpp:68
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
uint256.h
univalue.h
Generated on
for Bitcoin Core by
1.17.0