xref: /aosp_15_r20/external/flatbuffers/benchmarks/cpp/benchmark_main.cpp (revision 890232f25432b36107d06881e0a25aaa6b473652)
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