Skip to content

Commit e458d9e

Browse files
committed
benchmarking std::any/std::function
1 parent c1f6fd5 commit e458d9e

File tree

3 files changed

+44
-18
lines changed

3 files changed

+44
-18
lines changed

RTLBenchmarkApp/src/BenchMark.cpp

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ namespace rtl_bench
3434

3535
void BenchMark::autoLambdaCall_noReturn(benchmark::State& state)
3636
{
37-
auto sendMsg = [](const str_type& pMsg) {
37+
static auto sendMsg = [](const str_type& pMsg) {
3838
sendMessage(pMsg);
39-
};
39+
};
4040

4141
for (auto _ : state)
4242
{
@@ -50,7 +50,7 @@ namespace rtl_bench
5050
{
5151
static std::function sendMsg = [](const str_type& pMsg) {
5252
sendMessage(pMsg);
53-
};
53+
};
5454

5555
for (auto _ : state)
5656
{
@@ -91,7 +91,7 @@ namespace rtl_bench
9191
{
9292
static std::function getMsg = [](const str_type& pMsg) {
9393
return getMessage(pMsg);
94-
};
94+
};
9595

9696
for (auto _ : state)
9797
{
@@ -102,6 +102,30 @@ namespace rtl_bench
102102
}
103103

104104

105+
namespace rtl_bench
106+
{
107+
void BenchMark::BM_FunctionCall(benchmark::State& state)
108+
{
109+
static std::function func = [](const str_type& pMsg) {
110+
return getMessage(pMsg);
111+
};
112+
113+
for (auto _ : state) {
114+
benchmark::DoNotOptimize(func(g_longStr));
115+
}
116+
}
117+
118+
void BenchMark::BM_AnyCast(benchmark::State& state)
119+
{
120+
std::any a = getMessage;
121+
for (auto _ : state) {
122+
auto anyfunc = std::any_cast<decltype(&getMessage)>(a);
123+
benchmark::DoNotOptimize(anyfunc(g_longStr));
124+
}
125+
}
126+
}
127+
128+
105129
namespace rtl_bench
106130
{
107131
void BenchMark::reflectedCall_noReturn(benchmark::State& state)

RTLBenchmarkApp/src/BenchMark.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,5 +81,8 @@ namespace rtl_bench
8181
static void reflectedCall_withReturn(benchmark::State& state);
8282

8383
static void reflectedMethodCall_withReturn(benchmark::State& state);
84+
85+
static void BM_FunctionCall(benchmark::State& state);
86+
static void BM_AnyCast(benchmark::State& state);
8487
};
8588
}

RTLBenchmarkApp/src/main.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@
44

55
#include "BenchMark.h"
66

7-
// ------------------------------------------------------------
8-
// Register benchmarks
9-
// ------------------------------------------------------------
7+
BENCHMARK(rtl_bench::BenchMark::BM_FunctionCall);
8+
BENCHMARK(rtl_bench::BenchMark::BM_AnyCast);
109

11-
BENCHMARK(rtl_bench::BenchMark::directCall_noReturn);
12-
BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_noReturn);
13-
BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_noReturn);
14-
BENCHMARK(rtl_bench::BenchMark::reflectedCall_noReturn);
15-
BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_noReturn);
16-
17-
BENCHMARK(rtl_bench::BenchMark::directCall_withReturn);
18-
BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_withReturn);
19-
BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_withReturn);
20-
BENCHMARK(rtl_bench::BenchMark::reflectedCall_withReturn);
21-
BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_withReturn);
10+
//BENCHMARK(rtl_bench::BenchMark::directCall_noReturn);
11+
//BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_noReturn);
12+
//BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_noReturn);
13+
//BENCHMARK(rtl_bench::BenchMark::reflectedCall_noReturn);
14+
//BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_noReturn);
15+
//
16+
//BENCHMARK(rtl_bench::BenchMark::directCall_withReturn);
17+
//BENCHMARK(rtl_bench::BenchMark::autoLambdaCall_withReturn);
18+
//BENCHMARK(rtl_bench::BenchMark::stdFunctionCall_withReturn);
19+
//BENCHMARK(rtl_bench::BenchMark::reflectedCall_withReturn);
20+
//BENCHMARK(rtl_bench::BenchMark::reflectedMethodCall_withReturn);
2221

2322
BENCHMARK_MAIN();

0 commit comments

Comments
 (0)