re2/util/benchmark.h
Go to the documentation of this file.
1 // Copyright 2009 The RE2 Authors. All Rights Reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 
5 #ifndef UTIL_BENCHMARK_H_
6 #define UTIL_BENCHMARK_H_
7 
8 #include <stdint.h>
9 #include <functional>
10 
11 #include "util/logging.h"
12 #include "util/util.h"
13 
14 // Globals for the old benchmark API.
16 void StopBenchmarkTiming();
19 
20 namespace benchmark {
21 
22 // The new benchmark API implemented as a layer over the old benchmark API.
23 // (Please refer to https://github.com/google/benchmark for documentation.)
24 class State {
25  private:
26  class Iterator {
27  public:
28  // Benchmark code looks like this:
29  //
30  // for (auto _ : state) {
31  // // ...
32  // }
33  //
34  // We try to avoid compiler warnings about such variables being unused.
36 
37  explicit Iterator(int64_t iters) : iters_(iters) {}
38 
39  bool operator!=(const Iterator& that) const {
40  if (iters_ != that.iters_) {
41  return true;
42  } else {
43  // We are about to stop the loop, so stop timing.
45  return false;
46  }
47  }
48 
49  Value operator*() const {
50  return Value();
51  }
52 
54  --iters_;
55  return *this;
56  }
57 
58  private:
60  };
61 
62  public:
63  explicit State(int64_t iters)
64  : iters_(iters), arg_(0), has_arg_(false) {}
65 
67  : iters_(iters), arg_(arg), has_arg_(true) {}
68 
70  // We are about to start the loop, so start timing.
72  return Iterator(iters_);
73  }
74 
76  return Iterator(0);
77  }
78 
81  int64_t iterations() const { return iters_; }
82  // Pretend to support multiple arguments.
83  int64_t range(int pos) const { CHECK(has_arg_); return arg_; }
84 
85  private:
88  bool has_arg_;
89 
90  State(const State&) = delete;
91  State& operator=(const State&) = delete;
92 };
93 
94 } // namespace benchmark
95 
96 namespace testing {
97 
98 class Benchmark {
99  public:
100  Benchmark(const char* name, void (*func)(benchmark::State&))
101  : name_(name),
102  func_([func](int iters, int arg) {
103  benchmark::State state(iters);
104  func(state);
105  }),
106  lo_(0),
107  hi_(0),
108  has_arg_(false) {
109  Register();
110  }
111 
112  Benchmark(const char* name, void (*func)(benchmark::State&), int lo, int hi)
113  : name_(name),
114  func_([func](int iters, int arg) {
115  benchmark::State state(iters, arg);
116  func(state);
117  }),
118  lo_(lo),
119  hi_(hi),
120  has_arg_(true) {
121  Register();
122  }
123 
124  // Pretend to support multiple threads.
125  Benchmark* ThreadRange(int lo, int hi) { return this; }
126 
127  const char* name() const { return name_; }
128  const std::function<void(int, int)>& func() const { return func_; }
129  int lo() const { return lo_; }
130  int hi() const { return hi_; }
131  bool has_arg() const { return has_arg_; }
132 
133  private:
134  void Register();
135 
136  const char* name_;
137  std::function<void(int, int)> func_;
138  int lo_;
139  int hi_;
140  bool has_arg_;
141 
142  Benchmark(const Benchmark&) = delete;
143  Benchmark& operator=(const Benchmark&) = delete;
144 };
145 
146 } // namespace testing
147 
148 #define BENCHMARK(f) \
149  ::testing::Benchmark* _benchmark_##f = \
150  (new ::testing::Benchmark(#f, f))
151 
152 #define BENCHMARK_RANGE(f, lo, hi) \
153  ::testing::Benchmark* _benchmark_##f = \
154  (new ::testing::Benchmark(#f, f, lo, hi))
155 
156 #endif // UTIL_BENCHMARK_H_
testing
Definition: aws_request_signer_test.cc:25
benchmark::State::end
Iterator end()
Definition: re2/util/benchmark.h:75
pos
int pos
Definition: libuv/docs/code/tty-gravity/main.c:11
benchmark
Definition: bm_alarm.cc:55
false
#define false
Definition: setup_once.h:323
benchmark::State::Iterator::operator*
Value operator*() const
Definition: re2/util/benchmark.h:49
benchmark::State::arg_
int64_t arg_
Definition: re2/util/benchmark.h:87
benchmark::State::SetBytesProcessed
void SetBytesProcessed(int64_t b)
Definition: re2/util/benchmark.h:79
testing::Benchmark::has_arg_
bool has_arg_
Definition: re2/util/benchmark.h:140
benchmark::State::Iterator::iters_
int64_t iters_
Definition: re2/util/benchmark.h:59
testing::Benchmark::ThreadRange
Benchmark * ThreadRange(int lo, int hi)
Definition: re2/util/benchmark.h:125
testing::Benchmark::hi
int hi
Definition: bloaty/third_party/re2/util/benchmark.h:16
benchmark::State::begin
Iterator begin()
Definition: re2/util/benchmark.h:69
true
#define true
Definition: setup_once.h:324
benchmark::State::has_arg_
bool has_arg_
Definition: re2/util/benchmark.h:88
testing::Benchmark::hi_
int hi_
Definition: re2/util/benchmark.h:139
StartBenchmarkTiming
void StartBenchmarkTiming()
Definition: bloaty/third_party/re2/util/benchmark.cc:57
benchmark::State::iterations
int64_t iterations() const
Definition: re2/util/benchmark.h:81
testing::Benchmark::name
const char * name
Definition: bloaty/third_party/re2/util/benchmark.h:12
benchmark::State::range
int64_t range(int pos) const
Definition: re2/util/benchmark.h:83
testing::Benchmark::name_
const char * name_
Definition: re2/util/benchmark.h:136
testing::Benchmark::Benchmark
Benchmark(const char *name, void(*func)(benchmark::State &))
Definition: re2/util/benchmark.h:100
xds_interop_client.int
int
Definition: xds_interop_client.py:113
testing::Benchmark::operator=
Benchmark & operator=(const Benchmark &)=delete
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
benchmark::State::State
State(int64_t iters, int64_t arg)
Definition: re2/util/benchmark.h:66
benchmark::State::Iterator
Definition: re2/util/benchmark.h:26
CHECK
#define CHECK(x)
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/upb.c:8085
benchmark::State::State
State(int64_t iters)
Definition: re2/util/benchmark.h:63
arg
Definition: cmdline.cc:40
benchmark::State::operator=
State & operator=(const State &)=delete
benchmark::State::iters_
int64_t iters_
Definition: re2/util/benchmark.h:86
SetBenchmarkItemsProcessed
void SetBenchmarkItemsProcessed(int64_t i)
Definition: re2/util/benchmark.cc:56
b
uint64_t b
Definition: abseil-cpp/absl/container/internal/layout_test.cc:53
testing::Benchmark::has_arg
bool has_arg() const
Definition: re2/util/benchmark.h:131
stdint.h
testing::Benchmark::Benchmark
Benchmark(const char *name, void(*f)(int))
Definition: bloaty/third_party/re2/util/benchmark.h:21
benchmark::State::Iterator::operator++
Iterator & operator++()
Definition: re2/util/benchmark.h:53
testing::Benchmark::Benchmark
Benchmark(const char *name, void(*func)(benchmark::State &), int lo, int hi)
Definition: re2/util/benchmark.h:112
testing::Benchmark::Register
void Register()
Definition: bloaty/third_party/re2/util/benchmark.cc:28
testing::Benchmark::lo_
int lo_
Definition: re2/util/benchmark.h:138
ATTRIBUTE_UNUSED
#define ATTRIBUTE_UNUSED
Definition: re2/util/util.h:24
testing::Benchmark
Definition: bloaty/third_party/re2/util/benchmark.h:11
testing::Benchmark::lo
int lo
Definition: bloaty/third_party/re2/util/benchmark.h:15
testing::Benchmark::func
const std::function< void(int, int)> & func() const
Definition: re2/util/benchmark.h:128
StopBenchmarkTiming
void StopBenchmarkTiming()
Definition: bloaty/third_party/re2/util/benchmark.cc:51
benchmark::State
Definition: benchmark/include/benchmark/benchmark.h:503
testing::Benchmark::name
const char * name() const
Definition: re2/util/benchmark.h:127
state
Definition: bloaty/third_party/zlib/contrib/blast/blast.c:41
benchmark::State::SetItemsProcessed
void SetItemsProcessed(int64_t i)
Definition: re2/util/benchmark.h:80
benchmark::State::State
State(IterationCount max_iters, const std::vector< int64_t > &ranges, int thread_i, int n_threads, internal::ThreadTimer *timer, internal::ThreadManager *manager, internal::PerfCountersMeasurement *perf_counters_measurement)
Definition: benchmark/src/benchmark.cc:136
absl::inlined_vector_internal::Iterator
Pointer< A > Iterator
Definition: abseil-cpp/absl/container/internal/inlined_vector.h:64
testing::Benchmark::hi
int hi() const
Definition: re2/util/benchmark.h:130
testing::Benchmark::lo
int lo() const
Definition: re2/util/benchmark.h:129
testing::Benchmark::func_
std::function< void(int, int)> func_
Definition: re2/util/benchmark.h:137
Value
struct Value Value
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/protobuf.h:676
benchmark::State::Iterator::Value
Definition: re2/util/benchmark.h:35
benchmark::State::Iterator::Iterator
Iterator(int64_t iters)
Definition: re2/util/benchmark.h:37
function
std::function< bool(GrpcTool *, int, const char **, const CliCredentials &, GrpcToolOutputCallback)> function
Definition: grpc_tool.cc:250
SetBenchmarkBytesProcessed
void SetBenchmarkBytesProcessed(int64_t b)
Definition: bloaty/third_party/re2/util/benchmark.cc:47
compare.Benchmark
def Benchmark(outbase, bench_cpu=True, runs=12, fasttable=False)
Definition: upb/benchmarks/compare.py:56
benchmark::State::Iterator::operator!=
bool operator!=(const Iterator &that) const
Definition: re2/util/benchmark.h:39
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
state
static struct rpc_state state
Definition: bad_server_response_test.cc:87


grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:46