summaryrefslogtreecommitdiff
path: root/util/benchmark.h
diff options
context:
space:
mode:
Diffstat (limited to 'util/benchmark.h')
-rw-r--r--util/benchmark.h156
1 files changed, 0 insertions, 156 deletions
diff --git a/util/benchmark.h b/util/benchmark.h
deleted file mode 100644
index d97b49e..0000000
--- a/util/benchmark.h
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2009 The RE2 Authors. All Rights Reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#ifndef UTIL_BENCHMARK_H_
-#define UTIL_BENCHMARK_H_
-
-#include <stdint.h>
-#include <functional>
-
-#include "util/logging.h"
-#include "util/util.h"
-
-// Globals for the old benchmark API.
-void StartBenchmarkTiming();
-void StopBenchmarkTiming();
-void SetBenchmarkBytesProcessed(int64_t b);
-void SetBenchmarkItemsProcessed(int64_t i);
-
-namespace benchmark {
-
-// The new benchmark API implemented as a layer over the old benchmark API.
-// (Please refer to https://github.com/google/benchmark for documentation.)
-class State {
- private:
- class Iterator {
- public:
- // Benchmark code looks like this:
- //
- // for (auto _ : state) {
- // // ...
- // }
- //
- // We try to avoid compiler warnings about such variables being unused.
- struct ATTRIBUTE_UNUSED Value {};
-
- explicit Iterator(int64_t iters) : iters_(iters) {}
-
- bool operator!=(const Iterator& that) const {
- if (iters_ != that.iters_) {
- return true;
- } else {
- // We are about to stop the loop, so stop timing.
- StopBenchmarkTiming();
- return false;
- }
- }
-
- Value operator*() const {
- return Value();
- }
-
- Iterator& operator++() {
- --iters_;
- return *this;
- }
-
- private:
- int64_t iters_;
- };
-
- public:
- explicit State(int64_t iters)
- : iters_(iters), arg_(0), has_arg_(false) {}
-
- State(int64_t iters, int64_t arg)
- : iters_(iters), arg_(arg), has_arg_(true) {}
-
- Iterator begin() {
- // We are about to start the loop, so start timing.
- StartBenchmarkTiming();
- return Iterator(iters_);
- }
-
- Iterator end() {
- return Iterator(0);
- }
-
- void SetBytesProcessed(int64_t b) { SetBenchmarkBytesProcessed(b); }
- void SetItemsProcessed(int64_t i) { SetBenchmarkItemsProcessed(i); }
- int64_t iterations() const { return iters_; }
- // Pretend to support multiple arguments.
- int64_t range(int pos) const { CHECK(has_arg_); return arg_; }
-
- private:
- int64_t iters_;
- int64_t arg_;
- bool has_arg_;
-
- State(const State&) = delete;
- State& operator=(const State&) = delete;
-};
-
-} // namespace benchmark
-
-namespace testing {
-
-class Benchmark {
- public:
- Benchmark(const char* name, void (*func)(benchmark::State&))
- : name_(name),
- func_([func](int iters, int arg) {
- benchmark::State state(iters);
- func(state);
- }),
- lo_(0),
- hi_(0),
- has_arg_(false) {
- Register();
- }
-
- Benchmark(const char* name, void (*func)(benchmark::State&), int lo, int hi)
- : name_(name),
- func_([func](int iters, int arg) {
- benchmark::State state(iters, arg);
- func(state);
- }),
- lo_(lo),
- hi_(hi),
- has_arg_(true) {
- Register();
- }
-
- // Pretend to support multiple threads.
- Benchmark* ThreadRange(int lo, int hi) { return this; }
-
- const char* name() const { return name_; }
- const std::function<void(int, int)>& func() const { return func_; }
- int lo() const { return lo_; }
- int hi() const { return hi_; }
- bool has_arg() const { return has_arg_; }
-
- private:
- void Register();
-
- const char* name_;
- std::function<void(int, int)> func_;
- int lo_;
- int hi_;
- bool has_arg_;
-
- Benchmark(const Benchmark&) = delete;
- Benchmark& operator=(const Benchmark&) = delete;
-};
-
-} // namespace testing
-
-#define BENCHMARK(f) \
- ::testing::Benchmark* _benchmark_##f = \
- (new ::testing::Benchmark(#f, f))
-
-#define BENCHMARK_RANGE(f, lo, hi) \
- ::testing::Benchmark* _benchmark_##f = \
- (new ::testing::Benchmark(#f, f, lo, hi))
-
-#endif // UTIL_BENCHMARK_H_