Skip to content

Commit 8563501

Browse files
authored
add micro-benchmarks for TraceID hex formatting and parsing (#311)
1 parent 90d9267 commit 8563501

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

benchmark/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
add_executable(dd_trace_cpp-benchmark
77
benchmark.cpp
88
hasher.cpp
9+
trace_id_bench.cpp
910
)
1011

1112
# Google Benchmark is included as a git submodule.

benchmark/trace_id_bench.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#include <benchmark/benchmark.h>
2+
#include <datadog/trace_id.h>
3+
4+
#include "datadog/hex.h"
5+
6+
namespace {
7+
namespace dd = datadog::tracing;
8+
9+
void BM_TraceID_HexPadded(benchmark::State& state, dd::TraceID id) {
10+
for (auto _ : state) {
11+
auto result = id.hex_padded();
12+
benchmark::DoNotOptimize(result);
13+
}
14+
}
15+
BENCHMARK_CAPTURE(BM_TraceID_HexPadded, NoPadding,
16+
dd::TraceID{0xDEADBEEFCAFEBABEULL, 0x0102030405060708ULL});
17+
BENCHMARK_CAPTURE(BM_TraceID_HexPadded, WithPadding, dd::TraceID{1, 0});
18+
19+
void BM_TraceID_ParseHex(benchmark::State& state, std::string input) {
20+
for (auto _ : state) {
21+
auto result = dd::TraceID::parse_hex(input);
22+
benchmark::DoNotOptimize(result);
23+
}
24+
}
25+
BENCHMARK_CAPTURE(BM_TraceID_ParseHex, 64bit, std::string{"deadbeefcafebabe"});
26+
BENCHMARK_CAPTURE(BM_TraceID_ParseHex, 128bit,
27+
std::string{"0102030405060708deadbeefcafebabe"});
28+
29+
void BM_HexPadded_uint64(benchmark::State& state, std::uint64_t value) {
30+
for (auto _ : state) {
31+
auto result = dd::hex_padded(value);
32+
benchmark::DoNotOptimize(result);
33+
}
34+
}
35+
BENCHMARK_CAPTURE(BM_HexPadded_uint64, NoPadding, 0xDEADBEEFCAFEBABEULL);
36+
BENCHMARK_CAPTURE(BM_HexPadded_uint64, WorstCasePadding, 0x1ULL);
37+
38+
void BM_Hex_uint64(benchmark::State& state) {
39+
const std::uint64_t value = 0xDEADBEEFCAFEBABEULL;
40+
for (auto _ : state) {
41+
auto result = dd::hex(value);
42+
benchmark::DoNotOptimize(result);
43+
}
44+
}
45+
BENCHMARK(BM_Hex_uint64);
46+
47+
} // namespace

0 commit comments

Comments
 (0)