1 #include <benchmark/benchmark.h>
2 #include <gtest/gtest.h>
3
4 #include "benchmarks/cpp/bench.h"
5 #include "benchmarks/cpp/flatbuffers/fb_bench.h"
6 #include "benchmarks/cpp/raw/raw_bench.h"
7
Encode(benchmark::State & state,std::unique_ptr<Bench> & bench,uint8_t * buffer)8 static inline void Encode(benchmark::State &state,
9 std::unique_ptr<Bench> &bench, uint8_t *buffer) {
10 int64_t length;
11 for (auto _ : state) {
12 bench->Encode(buffer, length);
13 benchmark::DoNotOptimize(length);
14 }
15 }
16
Decode(benchmark::State & state,std::unique_ptr<Bench> & bench,uint8_t * buffer)17 static inline void Decode(benchmark::State &state,
18 std::unique_ptr<Bench> &bench, uint8_t *buffer) {
19 int64_t length;
20 uint8_t *encoded = bench->Encode(buffer, length);
21
22 for (auto _ : state) {
23 void *decoded = bench->Decode(encoded, length);
24 benchmark::DoNotOptimize(decoded);
25 }
26 }
27
Use(benchmark::State & state,std::unique_ptr<Bench> & bench,uint8_t * buffer,int64_t check_sum)28 static inline void Use(benchmark::State &state, std::unique_ptr<Bench> &bench,
29 uint8_t *buffer, int64_t check_sum) {
30 int64_t length;
31 uint8_t *encoded = bench->Encode(buffer, length);
32 void *decoded = bench->Decode(encoded, length);
33
34 int64_t sum = 0;
35
36 for (auto _ : state) { sum = bench->Use(decoded); }
37
38 EXPECT_EQ(sum, check_sum);
39 }
40
BM_Flatbuffers_Encode(benchmark::State & state)41 static void BM_Flatbuffers_Encode(benchmark::State &state) {
42 const int64_t kBufferLength = 1024;
43 uint8_t buffer[kBufferLength];
44
45 StaticAllocator allocator(&buffer[0]);
46 std::unique_ptr<Bench> bench = NewFlatBuffersBench(kBufferLength, &allocator);
47 Encode(state, bench, buffer);
48 }
49 BENCHMARK(BM_Flatbuffers_Encode);
50
BM_Flatbuffers_Decode(benchmark::State & state)51 static void BM_Flatbuffers_Decode(benchmark::State &state) {
52 const int64_t kBufferLength = 1024;
53 uint8_t buffer[kBufferLength];
54
55 StaticAllocator allocator(&buffer[0]);
56 std::unique_ptr<Bench> bench = NewFlatBuffersBench(kBufferLength, &allocator);
57 Decode(state, bench, buffer);
58 }
59 BENCHMARK(BM_Flatbuffers_Decode);
60
BM_Flatbuffers_Use(benchmark::State & state)61 static void BM_Flatbuffers_Use(benchmark::State &state) {
62 const int64_t kBufferLength = 1024;
63 uint8_t buffer[kBufferLength];
64
65 StaticAllocator allocator(&buffer[0]);
66 std::unique_ptr<Bench> bench = NewFlatBuffersBench(kBufferLength, &allocator);
67 Use(state, bench, buffer, 218812692406581874);
68 }
69 BENCHMARK(BM_Flatbuffers_Use);
70
BM_Raw_Encode(benchmark::State & state)71 static void BM_Raw_Encode(benchmark::State &state) {
72 const int64_t kBufferLength = 1024;
73 uint8_t buffer[kBufferLength];
74
75 std::unique_ptr<Bench> bench = NewRawBench();
76 Encode(state, bench, buffer);
77 }
78 BENCHMARK(BM_Raw_Encode);
79
BM_Raw_Decode(benchmark::State & state)80 static void BM_Raw_Decode(benchmark::State &state) {
81 const int64_t kBufferLength = 1024;
82 uint8_t buffer[kBufferLength];
83
84 std::unique_ptr<Bench> bench = NewRawBench();
85 Decode(state, bench, buffer);
86 }
87 BENCHMARK(BM_Raw_Decode);
88
BM_Raw_Use(benchmark::State & state)89 static void BM_Raw_Use(benchmark::State &state) {
90 const int64_t kBufferLength = 1024;
91 uint8_t buffer[kBufferLength];
92
93 std::unique_ptr<Bench> bench = NewRawBench();
94 Use(state, bench, buffer, 218812692406581874);
95 }
96 BENCHMARK(BM_Raw_Use);
97