Created
August 27, 2024 03:52
-
-
Save cyb70289/d947c64cf0f116607140e06b535b95aa to your computer and use it in GitHub Desktop.
0001-add-string-list-and-map-benchmarks.patch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| From a5239aaf894334f4b4c331f1d40245f5f64a2cd4 Mon Sep 17 00:00:00 2001 | |
| From: Yibo Cai <[email protected]> | |
| Date: Wed, 21 Aug 2024 06:40:29 -0400 | |
| Subject: [PATCH 1/2] add string list and map benchmarks | |
| --- | |
| benchmarks/benchmark.cc | 65 +++++++++++++++++++++++++++++++++++++ | |
| benchmarks/descriptor.proto | 8 +++++ | |
| 2 files changed, 73 insertions(+) | |
| diff --git a/benchmarks/benchmark.cc b/benchmarks/benchmark.cc | |
| index e499b29ea..1b75cb961 100644 | |
| --- a/benchmarks/benchmark.cc | |
| +++ b/benchmarks/benchmark.cc | |
| @@ -11,6 +11,7 @@ | |
| #include <stdint.h> | |
| #include <string.h> | |
| +#include <map> | |
| #include <string> | |
| #include <vector> | |
| @@ -469,3 +470,67 @@ static void BM_JsonSerialize_Proto2(benchmark::State& state) { | |
| state.SetBytesProcessed(state.iterations() * json.size()); | |
| } | |
| BENCHMARK(BM_JsonSerialize_Proto2); | |
| + | |
| +static upb_benchmark::StringList GetStringListMessage() { | |
| + std::vector<std::string> strings(64, "test string"); | |
| + upb_benchmark::StringList message; | |
| + for (const auto& str : strings) { | |
| + message.add_items(str); | |
| + } | |
| + return message; | |
| +} | |
| + | |
| +static void BM_SerializeStringList(benchmark::State& state) { | |
| + const upb_benchmark::StringList message = GetStringListMessage(); | |
| + for (auto _ : state) { | |
| + benchmark::DoNotOptimize(message.SerializeAsString()); | |
| + } | |
| + const size_t message_size = message.SerializeAsString().size(); | |
| + state.SetBytesProcessed(state.iterations() * message_size); | |
| +} | |
| +BENCHMARK(BM_SerializeStringList); | |
| + | |
| +static void BM_DeserializeStringList(benchmark::State& state) { | |
| + const std::string serialized = GetStringListMessage().SerializeAsString(); | |
| + upb_benchmark::StringList message; | |
| + for (auto _ : state) { | |
| + benchmark::DoNotOptimize(message.ParseFromString(serialized)); | |
| + } | |
| + const size_t message_size = serialized.size(); | |
| + state.SetBytesProcessed(state.iterations() * message_size); | |
| +} | |
| +BENCHMARK(BM_DeserializeStringList); | |
| + | |
| +static upb_benchmark::IntStringMap GetIntStringMapMessage() { | |
| + std::map<int, std::string> map_data; | |
| + for (int i = 0; i < 64; ++i) { | |
| + map_data[i] = "test string"; | |
| + } | |
| + upb_benchmark::IntStringMap message; | |
| + auto* mutable_map = message.mutable_items(); | |
| + for (const auto& pair : map_data) { | |
| + (*mutable_map)[pair.first] = pair.second; | |
| + } | |
| + return message; | |
| +} | |
| + | |
| +static void BM_SerializeIntStringMap(benchmark::State& state) { | |
| + const upb_benchmark::IntStringMap message = GetIntStringMapMessage(); | |
| + for (auto _ : state) { | |
| + benchmark::DoNotOptimize(message.SerializeAsString()); | |
| + } | |
| + const size_t message_size = message.SerializeAsString().size(); | |
| + state.SetBytesProcessed(state.iterations() * message_size); | |
| +} | |
| +BENCHMARK(BM_SerializeIntStringMap); | |
| + | |
| +static void BM_DeserializeIntStringMap(benchmark::State& state) { | |
| + const std::string serialized = GetIntStringMapMessage().SerializeAsString(); | |
| + upb_benchmark::IntStringMap message; | |
| + for (auto _ : state) { | |
| + benchmark::DoNotOptimize(message.ParseFromString(serialized)); | |
| + } | |
| + const size_t message_size = serialized.size(); | |
| + state.SetBytesProcessed(state.iterations() * message_size); | |
| +} | |
| +BENCHMARK(BM_DeserializeIntStringMap); | |
| diff --git a/benchmarks/descriptor.proto b/benchmarks/descriptor.proto | |
| index 7056b36bd..9b22f8ec3 100644 | |
| --- a/benchmarks/descriptor.proto | |
| +++ b/benchmarks/descriptor.proto | |
| @@ -863,3 +863,11 @@ message GeneratedCodeInfo { | |
| optional int32 end = 4; | |
| } | |
| } | |
| + | |
| +message StringList { | |
| + repeated string items = 1; | |
| +} | |
| + | |
| +message IntStringMap { | |
| + map<int32, string> items = 1; | |
| +} | |
| -- | |
| 2.39.2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment