1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
4 #include "opentelemetry/baggage/baggage.h"
5 #include "opentelemetry/nostd/string_view.h"
7 #include <benchmark/benchmark.h>
10 using namespace opentelemetry::baggage
;
11 namespace nostd
= opentelemetry::nostd
;
16 const size_t kNumEntries
= 10;
18 std::string
header_with_custom_entries(size_t num_entries
)
21 for (size_t i
= 0; i
< num_entries
; i
++)
23 std::string key
= "ADecentlyLargekey" + std::to_string(i
);
24 std::string value
= "ADecentlyLargeValue" + std::to_string(i
);
25 header
+= key
+ "=" + value
;
26 if (i
!= num_entries
- 1)
34 void BM_CreateBaggageFromTenEntries(benchmark::State
&state
)
36 std::string header
= header_with_custom_entries(kNumEntries
);
37 while (state
.KeepRunning())
39 auto baggage
= Baggage::FromHeader(header
);
42 BENCHMARK(BM_CreateBaggageFromTenEntries
);
44 void BM_ExtractBaggageHavingTenEntries(benchmark::State
&state
)
46 auto baggage
= Baggage::FromHeader(header_with_custom_entries(kNumEntries
));
47 while (state
.KeepRunning())
49 baggage
->GetAllEntries([](nostd::string_view key
, nostd::string_view value
) { return true; });
52 BENCHMARK(BM_ExtractBaggageHavingTenEntries
);
54 void BM_CreateBaggageFrom180Entries(benchmark::State
&state
)
56 std::string header
= header_with_custom_entries(Baggage::kMaxKeyValuePairs
);
57 while (state
.KeepRunning())
59 auto baggage
= Baggage::FromHeader(header
);
62 BENCHMARK(BM_CreateBaggageFrom180Entries
);
64 void BM_ExtractBaggageWith180Entries(benchmark::State
&state
)
66 auto baggage
= Baggage::FromHeader(header_with_custom_entries(Baggage::kMaxKeyValuePairs
));
67 while (state
.KeepRunning())
69 baggage
->GetAllEntries([](nostd::string_view key
, nostd::string_view value
) { return true; });
72 BENCHMARK(BM_ExtractBaggageWith180Entries
);
74 void BM_SetValueBaggageWithTenEntries(benchmark::State
&state
)
76 auto baggage
= Baggage::FromHeader(
77 header_with_custom_entries(kNumEntries
- 1)); // 9 entries, and add one new
78 while (state
.KeepRunning())
80 auto new_baggage
= baggage
->Set("new_key", "new_value");
83 BENCHMARK(BM_SetValueBaggageWithTenEntries
);
85 void BM_SetValueBaggageWith180Entries(benchmark::State
&state
)
87 auto baggage
= Baggage::FromHeader(header_with_custom_entries(
88 Baggage::kMaxKeyValuePairs
- 1)); // keep 179 entries, and add one new
89 while (state
.KeepRunning())
91 auto new_baggage
= baggage
->Set("new_key", "new_value");
94 BENCHMARK(BM_SetValueBaggageWith180Entries
);
96 void BM_BaggageToHeaderTenEntries(benchmark::State
&state
)
98 auto baggage
= Baggage::FromHeader(header_with_custom_entries(kNumEntries
));
99 while (state
.KeepRunning())
101 auto new_baggage
= baggage
->ToHeader();
104 BENCHMARK(BM_BaggageToHeaderTenEntries
);
106 void BM_BaggageToHeader180Entries(benchmark::State
&state
)
108 auto baggage
= Baggage::FromHeader(header_with_custom_entries(Baggage::kMaxKeyValuePairs
));
109 while (state
.KeepRunning())
111 auto new_baggage
= baggage
->ToHeader();
114 BENCHMARK(BM_BaggageToHeader180Entries
);