Skip to content

Commit bc287a4

Browse files
committed
chore(google_benchmark): rework benches
1 parent 151e9e1 commit bc287a4

File tree

3 files changed

+66
-49
lines changed

3 files changed

+66
-49
lines changed

examples/google_benchmark/main.cpp

Lines changed: 4 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,15 @@
1+
#include "template_bench.hpp"
12
#include <benchmark/benchmark.h>
23
#include <cstring>
34

4-
// Passing Arbitrary Arguments to a Benchmark
5-
// See:
6-
// https://github.com/google/benchmark/blob/main/docs/user_guide.md#passing-arbitrary-arguments-to-a-benchmark
75
template <class... Args>
8-
void BM_takes_args(benchmark::State &state, Args &&...args) {
6+
void BM_Capture(benchmark::State &state, Args &&...args) {
97
auto args_tuple = std::make_tuple(std::move(args)...);
108
for (auto _ : state) {
119
}
1210
}
13-
BENCHMARK_CAPTURE(BM_takes_args, int_string_test, 42, std::string("abc"));
14-
BENCHMARK_CAPTURE(BM_takes_args, int_test, 42, 43);
15-
16-
// Benchmark template
17-
//
18-
template <class T> void BM_VectorPushBack(benchmark::State &state) {
19-
std::vector<T> v;
20-
for (auto _ : state) {
21-
v.push_back(T());
22-
}
23-
}
24-
BENCHMARK_TEMPLATE(BM_VectorPushBack, int);
25-
BENCHMARK_TEMPLATE(BM_VectorPushBack, std::string);
26-
27-
template <typename T> void BM_Template1(benchmark::State &state) {
28-
T val = T();
29-
for (auto _ : state) {
30-
benchmark::DoNotOptimize(val++);
31-
}
32-
}
33-
BENCHMARK_TEMPLATE1(BM_Template1, int);
34-
35-
template <typename T, typename U> void BM_Template2(benchmark::State &state) {
36-
T t = T();
37-
U u = U();
38-
for (auto _ : state) {
39-
benchmark::DoNotOptimize(t + u);
40-
}
41-
}
42-
BENCHMARK_TEMPLATE2(BM_Template2, int, double);
43-
44-
// Benchmark template capture
45-
//
46-
template <typename T, class... ExtraArgs>
47-
void BM_takes_args(benchmark::State &state, ExtraArgs &&...extra_args) {
48-
auto args_tuple = std::make_tuple(std::move(extra_args)...);
49-
for (auto _ : state) {
50-
}
51-
}
52-
BENCHMARK_TEMPLATE1_CAPTURE(BM_takes_args, void, int_string_test, 42,
53-
std::string("abc"));
54-
55-
BENCHMARK_TEMPLATE2_CAPTURE(BM_takes_args, int, double, two_type_test, 42,
56-
std::string("abc"));
11+
BENCHMARK_CAPTURE(BM_Capture, int_string_test, 42, std::string("abc"));
12+
BENCHMARK_CAPTURE(BM_Capture, int_test, 42, 43);
5713

5814
// Function to benchmark
5915
static void BM_rand_vector(benchmark::State &state) {
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#pragma once
2+
3+
#include <benchmark/benchmark.h>
4+
#include <cstring>
5+
#include <string>
6+
7+
template <class T> void BM_Template(benchmark::State &state) {
8+
std::vector<T> v;
9+
for (auto _ : state) {
10+
v.push_back(T());
11+
}
12+
}
13+
BENCHMARK_TEMPLATE(BM_Template, int);
14+
BENCHMARK_TEMPLATE(BM_Template, std::string);
15+
16+
//
17+
//
18+
19+
template <typename T> void BM_Template1(benchmark::State &state) {
20+
T val = T();
21+
for (auto _ : state) {
22+
benchmark::DoNotOptimize(val++);
23+
}
24+
}
25+
BENCHMARK_TEMPLATE1(BM_Template1, int);
26+
27+
//
28+
//
29+
30+
template <typename T, typename U> void BM_Template2(benchmark::State &state) {
31+
T t = T();
32+
U u = U();
33+
for (auto _ : state) {
34+
benchmark::DoNotOptimize(t + u);
35+
}
36+
}
37+
BENCHMARK_TEMPLATE2(BM_Template2, int, double);
38+
39+
//
40+
//
41+
42+
template <typename T, class... ExtraArgs>
43+
void BM_Template1_Capture(benchmark::State &state, ExtraArgs &&...extra_args) {
44+
auto args_tuple = std::make_tuple(std::move(extra_args)...);
45+
for (auto _ : state) {
46+
}
47+
}
48+
BENCHMARK_TEMPLATE1_CAPTURE(BM_Template1_Capture, void, int_string_test, 42,
49+
std::string("abc"));
50+
BENCHMARK_TEMPLATE2_CAPTURE(BM_Template1_Capture, int, double, two_type_test,
51+
42, std::string("abc"));

google_benchmark/include/benchmark/benchmark.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1537,8 +1537,18 @@ class Fixture : public internal::Benchmark {
15371537
// BENCHMARK_TEMPLATE1_CAPTURE(BM_takes_args, void, int_string_test, 42,
15381538
// std::string("abc"));
15391539
#ifdef CODSPEED_ENABLED
1540+
1541+
// BM_Template1_Capture<void>[int_string_test] will be turned into
1542+
// BM_Template1_Capture[int_string_test]
1543+
#define BENCHMARK_CAPTURE_WITH_NAME(func, func_name, test_case_name, ...) \
1544+
BENCHMARK_PRIVATE_DECLARE(_benchmark_) = \
1545+
(::benchmark::internal::RegisterBenchmarkInternal( \
1546+
std::make_unique<::benchmark::internal::FunctionBenchmark>( \
1547+
CUR_FILE + #func_name NAME_START #test_case_name NAME_END, \
1548+
[](::benchmark::State& st) { func(st, __VA_ARGS__); })))
1549+
15401550
#define BENCHMARK_TEMPLATE1_CAPTURE(func, a, test_case_name, ...) \
1541-
BENCHMARK_CAPTURE(func, test_case_name, __VA_ARGS__)
1551+
BENCHMARK_CAPTURE_WITH_NAME(func<a>, func, test_case_name, __VA_ARGS__)
15421552
#else
15431553
#define BENCHMARK_TEMPLATE1_CAPTURE(func, a, test_case_name, ...) \
15441554
BENCHMARK_CAPTURE(func<a>, test_case_name, __VA_ARGS__)

0 commit comments

Comments
 (0)