From 9d471de554af61804e025f660bddb1a494f5e1cd Mon Sep 17 00:00:00 2001 From: AneesPatel Date: Wed, 22 Apr 2026 19:53:06 -0400 Subject: [PATCH] benchmark: add micro-benchmarks for TraceID formatting and utilities --- benchmark/CMakeLists.txt | 1 + benchmark/trace_id_bench.cpp | 54 ++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 benchmark/trace_id_bench.cpp diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 59ea4d9e..9fad664f 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -6,6 +6,7 @@ add_executable(dd_trace_cpp-benchmark benchmark.cpp hasher.cpp + trace_id_bench.cpp ) # Google Benchmark is included as a git submodule. diff --git a/benchmark/trace_id_bench.cpp b/benchmark/trace_id_bench.cpp new file mode 100644 index 00000000..92450af9 --- /dev/null +++ b/benchmark/trace_id_bench.cpp @@ -0,0 +1,54 @@ +#include +#include + +#include "datadog/hex.h" + +namespace { +namespace dd = datadog::tracing; + +void BM_TraceID_HexPadded(benchmark::State& state) { + const dd::TraceID id{0xDEADBEEFCAFEBABEULL, 0x0102030405060708ULL}; + for (auto _ : state) { + auto result = id.hex_padded(); + benchmark::DoNotOptimize(result); + } +} +BENCHMARK(BM_TraceID_HexPadded); + +void BM_TraceID_ParseHex_128bit(benchmark::State& state) { + const std::string input{"0102030405060708deadbeefcafebabe"}; + for (auto _ : state) { + auto result = dd::TraceID::parse_hex(input); + benchmark::DoNotOptimize(result); + } +} +BENCHMARK(BM_TraceID_ParseHex_128bit); + +void BM_TraceID_ParseHex_64bit(benchmark::State& state) { + const std::string input{"deadbeefcafebabe"}; + for (auto _ : state) { + auto result = dd::TraceID::parse_hex(input); + benchmark::DoNotOptimize(result); + } +} +BENCHMARK(BM_TraceID_ParseHex_64bit); + +void BM_HexPadded_uint64(benchmark::State& state) { + const std::uint64_t value = 0xDEADBEEFCAFEBABEULL; + for (auto _ : state) { + auto result = dd::hex_padded(value); + benchmark::DoNotOptimize(result); + } +} +BENCHMARK(BM_HexPadded_uint64); + +void BM_Hex_uint64(benchmark::State& state) { + const std::uint64_t value = 0xDEADBEEFCAFEBABEULL; + for (auto _ : state) { + auto result = dd::hex(value); + benchmark::DoNotOptimize(result); + } +} +BENCHMARK(BM_Hex_uint64); + +} // namespace