baggage_benchmark.cc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <benchmark/benchmark.h>
  4. #include <stddef.h>
  5. #include <string>
  6. #include "opentelemetry/baggage/baggage.h"
  7. #include "opentelemetry/nostd/function_ref.h"
  8. #include "opentelemetry/nostd/shared_ptr.h"
  9. #include "opentelemetry/nostd/string_view.h"
  10. using namespace opentelemetry::baggage;
  11. namespace nostd = opentelemetry::nostd;
  12. namespace
  13. {
  14. const size_t kNumEntries = 10;
  15. std::string header_with_custom_entries(size_t num_entries)
  16. {
  17. std::string header;
  18. for (size_t i = 0; i < num_entries; i++)
  19. {
  20. std::string key = "ADecentlyLargekey" + std::to_string(i);
  21. std::string value = "ADecentlyLargeValue" + std::to_string(i);
  22. header.append(key).append("=").append(value);
  23. if (i != num_entries - 1)
  24. {
  25. header += ",";
  26. }
  27. }
  28. return header;
  29. }
  30. void BM_CreateBaggageFromTenEntries(benchmark::State &state)
  31. {
  32. std::string header = header_with_custom_entries(kNumEntries);
  33. while (state.KeepRunning())
  34. {
  35. auto baggage = Baggage::FromHeader(header);
  36. }
  37. }
  38. BENCHMARK(BM_CreateBaggageFromTenEntries);
  39. void BM_ExtractBaggageHavingTenEntries(benchmark::State &state)
  40. {
  41. auto baggage = Baggage::FromHeader(header_with_custom_entries(kNumEntries));
  42. while (state.KeepRunning())
  43. {
  44. baggage->GetAllEntries(
  45. [](nostd::string_view /* key */, nostd::string_view /* value */) { return true; });
  46. }
  47. }
  48. BENCHMARK(BM_ExtractBaggageHavingTenEntries);
  49. void BM_CreateBaggageFrom180Entries(benchmark::State &state)
  50. {
  51. std::string header = header_with_custom_entries(Baggage::kMaxKeyValuePairs);
  52. while (state.KeepRunning())
  53. {
  54. auto baggage = Baggage::FromHeader(header);
  55. }
  56. }
  57. BENCHMARK(BM_CreateBaggageFrom180Entries);
  58. void BM_ExtractBaggageWith180Entries(benchmark::State &state)
  59. {
  60. auto baggage = Baggage::FromHeader(header_with_custom_entries(Baggage::kMaxKeyValuePairs));
  61. while (state.KeepRunning())
  62. {
  63. baggage->GetAllEntries(
  64. [](nostd::string_view /* key */, nostd::string_view /* value */) { return true; });
  65. }
  66. }
  67. BENCHMARK(BM_ExtractBaggageWith180Entries);
  68. void BM_SetValueBaggageWithTenEntries(benchmark::State &state)
  69. {
  70. auto baggage = Baggage::FromHeader(
  71. header_with_custom_entries(kNumEntries - 1)); // 9 entries, and add one new
  72. while (state.KeepRunning())
  73. {
  74. auto new_baggage = baggage->Set("new_key", "new_value");
  75. }
  76. }
  77. BENCHMARK(BM_SetValueBaggageWithTenEntries);
  78. void BM_SetValueBaggageWith180Entries(benchmark::State &state)
  79. {
  80. auto baggage = Baggage::FromHeader(header_with_custom_entries(
  81. Baggage::kMaxKeyValuePairs - 1)); // keep 179 entries, and add one new
  82. while (state.KeepRunning())
  83. {
  84. auto new_baggage = baggage->Set("new_key", "new_value");
  85. }
  86. }
  87. BENCHMARK(BM_SetValueBaggageWith180Entries);
  88. void BM_BaggageToHeaderTenEntries(benchmark::State &state)
  89. {
  90. auto baggage = Baggage::FromHeader(header_with_custom_entries(kNumEntries));
  91. while (state.KeepRunning())
  92. {
  93. auto new_baggage = baggage->ToHeader();
  94. }
  95. }
  96. BENCHMARK(BM_BaggageToHeaderTenEntries);
  97. void BM_BaggageToHeader180Entries(benchmark::State &state)
  98. {
  99. auto baggage = Baggage::FromHeader(header_with_custom_entries(Baggage::kMaxKeyValuePairs));
  100. while (state.KeepRunning())
  101. {
  102. auto new_baggage = baggage->ToHeader();
  103. }
  104. }
  105. BENCHMARK(BM_BaggageToHeader180Entries);
  106. } // namespace
  107. BENCHMARK_MAIN();