|
19 | 19 | #include <memory> |
20 | 20 | #include <vector> |
21 | 21 |
|
22 | | -static FlatFilePos WriteBlockToDisk(ChainstateManager& chainman) |
| 22 | +static CBlock CreateTestBlock() |
23 | 23 | { |
24 | 24 | DataStream stream{benchmark::data::block413567}; |
25 | 25 | CBlock block; |
26 | 26 | stream >> TX_WITH_WITNESS(block); |
| 27 | + return block; |
| 28 | +} |
27 | 29 |
|
28 | | - return chainman.m_blockman.SaveBlockToDisk(block, 0); |
| 30 | +static void SaveBlockBench(benchmark::Bench& bench) |
| 31 | +{ |
| 32 | + const auto testing_setup{MakeNoLogFileContext<const TestingSetup>(ChainType::MAIN)}; |
| 33 | + auto& blockman{testing_setup->m_node.chainman->m_blockman}; |
| 34 | + const CBlock block{CreateTestBlock()}; |
| 35 | + bench.run([&] { |
| 36 | + const auto pos{blockman.SaveBlockToDisk(block, 413'567)}; |
| 37 | + assert(!pos.IsNull()); |
| 38 | + }); |
29 | 39 | } |
30 | 40 |
|
31 | 41 | static void ReadBlockFromDiskBench(benchmark::Bench& bench) |
32 | 42 | { |
33 | 43 | const auto testing_setup{MakeNoLogFileContext<const TestingSetup>(ChainType::MAIN)}; |
34 | | - ChainstateManager& chainman{*testing_setup->m_node.chainman}; |
35 | | - |
| 44 | + auto& blockman{testing_setup->m_node.chainman->m_blockman}; |
| 45 | + const auto pos{blockman.SaveBlockToDisk(CreateTestBlock(), 413'567)}; |
36 | 46 | CBlock block; |
37 | | - const auto pos{WriteBlockToDisk(chainman)}; |
38 | | - |
39 | 47 | bench.run([&] { |
40 | | - const auto success{chainman.m_blockman.ReadBlockFromDisk(block, pos)}; |
| 48 | + const auto success{blockman.ReadBlockFromDisk(block, pos)}; |
41 | 49 | assert(success); |
42 | 50 | }); |
43 | 51 | } |
44 | 52 |
|
45 | 53 | static void ReadRawBlockFromDiskBench(benchmark::Bench& bench) |
46 | 54 | { |
47 | 55 | const auto testing_setup{MakeNoLogFileContext<const TestingSetup>(ChainType::MAIN)}; |
48 | | - ChainstateManager& chainman{*testing_setup->m_node.chainman}; |
49 | | - |
| 56 | + auto& blockman{testing_setup->m_node.chainman->m_blockman}; |
| 57 | + const auto pos{blockman.SaveBlockToDisk(CreateTestBlock(), 413'567)}; |
50 | 58 | std::vector<uint8_t> block_data; |
51 | | - const auto pos{WriteBlockToDisk(chainman)}; |
52 | | - |
| 59 | + blockman.ReadRawBlockFromDisk(block_data, pos); // warmup |
53 | 60 | bench.run([&] { |
54 | | - const auto success{chainman.m_blockman.ReadRawBlockFromDisk(block_data, pos)}; |
| 61 | + const auto success{blockman.ReadRawBlockFromDisk(block_data, pos)}; |
55 | 62 | assert(success); |
56 | 63 | }); |
57 | 64 | } |
58 | 65 |
|
| 66 | +BENCHMARK(SaveBlockBench, benchmark::PriorityLevel::HIGH); |
59 | 67 | BENCHMARK(ReadBlockFromDiskBench, benchmark::PriorityLevel::HIGH); |
60 | 68 | BENCHMARK(ReadRawBlockFromDiskBench, benchmark::PriorityLevel::HIGH); |
0 commit comments