From 2f9703fca2af40f7bfadb63cd66fadd90070eeca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wo=CC=81jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Tue, 27 May 2025 18:36:30 +0200 Subject: [PATCH] Stats benchmarks --- nano/benchmarks/CMakeLists.txt | 2 +- nano/benchmarks/stats.cpp | 49 ++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 nano/benchmarks/stats.cpp diff --git a/nano/benchmarks/CMakeLists.txt b/nano/benchmarks/CMakeLists.txt index 97aa9665..dc382930 100644 --- a/nano/benchmarks/CMakeLists.txt +++ b/nano/benchmarks/CMakeLists.txt @@ -1,4 +1,4 @@ -add_executable(benchmarks entry.cpp) +add_executable(benchmarks entry.cpp stats.cpp) target_link_libraries(benchmarks test_common benchmark::benchmark) diff --git a/nano/benchmarks/stats.cpp b/nano/benchmarks/stats.cpp new file mode 100644 index 00000000..92247f22 --- /dev/null +++ b/nano/benchmarks/stats.cpp @@ -0,0 +1,49 @@ +#include +#include +#include + +#include + +#include + +static void BM_stats_inc_single (benchmark::State & state) +{ + nano::logger logger; + nano::stats stats{ logger }; + + for (auto _ : state) + { + stats.inc (nano::stat::type::ledger, nano::stat::detail::open); + } +} + +BENCHMARK (BM_stats_inc_single); +BENCHMARK (BM_stats_inc_single)->Threads (10); + +static void BM_stats_inc_random (benchmark::State & state) +{ + nano::logger logger; + nano::stats stats{ logger }; + + auto random_subset = [] (auto elements, size_t count) -> std::vector { + std::shuffle (elements.begin (), elements.end (), std::mt19937 (std::random_device () ())); + return { elements.begin (), elements.begin () + std::min (count, elements.size ()) }; + }; + + auto stat_types = random_subset (nano::enum_util::values (), state.range (0)); + auto stat_details = random_subset (nano::enum_util::values (), state.range (1)); + + size_t type_index = 0; + size_t detail_index = 0; + + for (auto _ : state) + { + stats.inc (stat_types[type_index], stat_details[detail_index]); + + type_index = (type_index + 1) % stat_types.size (); + detail_index = (detail_index + 1) % stat_details.size (); + } +} + +BENCHMARK (BM_stats_inc_random)->Args ({ 32, 32 }); +BENCHMARK (BM_stats_inc_random)->Args ({ 32, 32 })->Threads (10); \ No newline at end of file