...

Text file src/github.com/google/flatbuffers/benchmarks/cpp/benchmark_main.cpp

Documentation: github.com/google/flatbuffers/benchmarks/cpp

     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