Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding Baggage api benchmark tests #861

Merged
merged 2 commits into from
Jun 18, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions api/test/baggage/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@ cc_test(
"@com_google_googletest//:gtest_main",
],
)

otel_cc_benchmark(
name = "baggage_benchmark",
srcs = ["baggage_benchmark.cc"],
deps = ["//api"],
)
3 changes: 3 additions & 0 deletions api/test/baggage/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ foreach(testname baggage_test)
TEST_PREFIX baggage.
TEST_LIST ${testname})
endforeach()
add_executable(baggage_benchmark baggage_benchmark.cc)
target_link_libraries(baggage_benchmark benchmark::benchmark
${CMAKE_THREAD_LIBS_INIT} opentelemetry_api)
add_subdirectory(propagation)
117 changes: 117 additions & 0 deletions api/test/baggage/baggage_benchmark.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

#include "opentelemetry/baggage/baggage.h"
#include "opentelemetry/nostd/string_view.h"

#include <benchmark/benchmark.h>
#include <cstdint>

using namespace opentelemetry::baggage;
namespace nostd = opentelemetry::nostd;

namespace
{

const size_t kNumEntries = 10;

std::string header_with_custom_entries(size_t num_entries)
{
std::string header;
for (size_t i = 0; i < num_entries; i++)
{
std::string key = "ADecentlyLargekey" + std::to_string(i);
std::string value = "ADecentlyLargeValue" + std::to_string(i);
header += key + "=" + value;
if (i != num_entries - 1)
{
header += ",";
}
}
return header;
}

void BM_CreateBaggageFromTenEntries(benchmark::State &state)
{
std::string header = header_with_custom_entries(kNumEntries);
while (state.KeepRunning())
{
auto baggage = Baggage::FromHeader(header);
}
}
BENCHMARK(BM_CreateBaggageFromTenEntries);

void BM_ExtractBaggageHavingTenEntries(benchmark::State &state)
{
auto baggage = Baggage::FromHeader(header_with_custom_entries(kNumEntries));
while (state.KeepRunning())
{
baggage->GetAllEntries([](nostd::string_view key, nostd::string_view value) { return true; });
}
}
BENCHMARK(BM_ExtractBaggageHavingTenEntries);

void BM_CreateBaggageFrom180Entries(benchmark::State &state)
{
std::string header = header_with_custom_entries(Baggage::kMaxKeyValuePairs);
while (state.KeepRunning())
{
auto baggage = Baggage::FromHeader(header);
}
}
BENCHMARK(BM_CreateBaggageFrom180Entries);

void BM_ExtractBaggageWith180Entries(benchmark::State &state)
{
auto baggage = Baggage::FromHeader(header_with_custom_entries(Baggage::kMaxKeyValuePairs));
while (state.KeepRunning())
{
baggage->GetAllEntries([](nostd::string_view key, nostd::string_view value) { return true; });
}
}
BENCHMARK(BM_ExtractBaggageWith180Entries);

void BM_SetValueBaggageWithTenEntries(benchmark::State &state)
{
auto baggage = Baggage::FromHeader(
header_with_custom_entries(kNumEntries - 1)); // 9 entries, and add one new
while (state.KeepRunning())
{
auto new_baggage = baggage->Set("new_key", "new_value");
}
}
BENCHMARK(BM_SetValueBaggageWithTenEntries);

void BM_SetValueBaggageWith180Entries(benchmark::State &state)
{
auto baggage = Baggage::FromHeader(header_with_custom_entries(
Baggage::kMaxKeyValuePairs - 1)); // keep 179 entries, and add one new
while (state.KeepRunning())
{
auto new_baggage = baggage->Set("new_key", "new_value");
}
}
BENCHMARK(BM_SetValueBaggageWith180Entries);

void BM_BaggageToHeaderTenEntries(benchmark::State &state)
{
auto baggage = Baggage::FromHeader(header_with_custom_entries(kNumEntries));
while (state.KeepRunning())
{
auto new_baggage = baggage->ToHeader();
}
}
BENCHMARK(BM_BaggageToHeaderTenEntries);

void BM_BaggageToHeader180Entries(benchmark::State &state)
{
auto baggage = Baggage::FromHeader(header_with_custom_entries(Baggage::kMaxKeyValuePairs));
while (state.KeepRunning())
{
auto new_baggage = baggage->ToHeader();
}
}
BENCHMARK(BM_BaggageToHeader180Entries);
} // namespace

BENCHMARK_MAIN();