aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2023-09-19 09:07:16 -0700
committerCopybara-Service <copybara-worker@google.com>2023-09-19 09:08:13 -0700
commitbd467aada0817a4f95d1629afdbb881b1e2c9fec (patch)
tree0159c2cc4c32868e2d908f67b26525adfdc28500
parentcffc9ef2b1174dea2b78cbf5efeeaea1606ad25b (diff)
downloadabseil-bd467aada0817a4f95d1629afdbb881b1e2c9fec.tar.gz
abseil-bd467aada0817a4f95d1629afdbb881b1e2c9fec.tar.bz2
abseil-bd467aada0817a4f95d1629afdbb881b1e2c9fec.zip
Additional StrCat microbenchmarks.
PiperOrigin-RevId: 566650311 Change-Id: Ibfabee88ea9999d08ade05ece362f5a075d19695
-rw-r--r--absl/strings/str_cat_benchmark.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/absl/strings/str_cat_benchmark.cc b/absl/strings/str_cat_benchmark.cc
index e54a9230..b0a86171 100644
--- a/absl/strings/str_cat_benchmark.cc
+++ b/absl/strings/str_cat_benchmark.cc
@@ -188,6 +188,35 @@ void StrAppendConfig(B* benchmark) {
BENCHMARK(BM_StrAppend)->Apply(StrAppendConfig);
+template <typename... Chunks>
+void BM_StrCatImpl(benchmark::State& state,
+ Chunks... chunks) {
+ for (auto s : state) {
+ std::string result = absl::StrCat(chunks...);
+ benchmark::DoNotOptimize(result);
+ }
+}
+
+void BM_StrCat(benchmark::State& state) {
+ const int chunks_at_a_time = state.range(0);
+ const absl::string_view kChunk = "0123456789";
+
+ switch (chunks_at_a_time) {
+ case 1:
+ return BM_StrCatImpl(state, kChunk);
+ case 2:
+ return BM_StrCatImpl(state, kChunk, kChunk);
+ case 3:
+ return BM_StrCatImpl(state, kChunk, kChunk, kChunk);
+ case 4:
+ return BM_StrCatImpl(state, kChunk, kChunk, kChunk, kChunk);
+ default:
+ std::abort();
+ }
+}
+
+BENCHMARK(BM_StrCat)->Arg(1)->Arg(2)->Arg(3)->Arg(4);
+
void BM_StrCat_int(benchmark::State& state) {
int i = 0;
for (auto s : state) {