...
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
8static 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
17static 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
28static 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
41static 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}
49BENCHMARK(BM_Flatbuffers_Encode);
50
51static 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}
59BENCHMARK(BM_Flatbuffers_Decode);
60
61static 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}
69BENCHMARK(BM_Flatbuffers_Use);
70
71static 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}
78BENCHMARK(BM_Raw_Encode);
79
80static 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}
87BENCHMARK(BM_Raw_Decode);
88
89static 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}
96BENCHMARK(BM_Raw_Use);
View as plain text