Skip to content

Instantly share code, notes, and snippets.

@cyb70289
Created August 27, 2024 03:52
Show Gist options
  • Select an option

  • Save cyb70289/d947c64cf0f116607140e06b535b95aa to your computer and use it in GitHub Desktop.

Select an option

Save cyb70289/d947c64cf0f116607140e06b535b95aa to your computer and use it in GitHub Desktop.
0001-add-string-list-and-map-benchmarks.patch
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