blob: 192600ec6cc9d9c445734796d3cf309aa2400ff6 [file]
#include <cassert>
#include <string>
#include <vector>
#include "benchmark/benchmark_api.h"
#include "benchmark/managers.h"
#include "benchmark/registration.h"
#include "benchmark/reporter.h"
#include "benchmark/state.h"
#include "benchmark/utils.h"
namespace {
class StateProfilerManager : public benchmark::ProfilerManager {
public:
void AfterSetupStartWithState(const benchmark::State& state) override {
++start_called;
start_name = state.name();
}
void BeforeTeardownStopWithState(const benchmark::State& state) override {
++stop_called;
stop_name = state.name();
}
int start_called = 0;
int stop_called = 0;
std::string start_name;
std::string stop_name;
};
class LegacyProfilerManager : public benchmark::ProfilerManager {
public:
void AfterSetupStart() override { ++start_called; }
void BeforeTeardownStop() override { ++stop_called; }
int start_called = 0;
int stop_called = 0;
};
class NullReporter : public benchmark::BenchmarkReporter {
public:
bool ReportContext(const Context& /*context*/) override { return true; }
void ReportRuns(const std::vector<Run>& /*report*/) override {}
};
void BM_Profiled(benchmark::State& state) {
for (auto _ : state) {
benchmark::DoNotOptimize(state.iterations());
}
}
BENCHMARK(BM_Profiled);
} // namespace
int main(int argc, char* argv[]) {
benchmark::MaybeReenterWithoutASLR(argc, argv);
benchmark::Initialize(&argc, argv);
NullReporter null_reporter;
StateProfilerManager state_profiler;
benchmark::RegisterProfilerManager(&state_profiler);
size_t run_count =
benchmark::RunSpecifiedBenchmarks(&null_reporter, "BM_Profiled$");
benchmark::RegisterProfilerManager(nullptr);
assert(run_count == 1);
assert(state_profiler.start_called == 1);
assert(state_profiler.stop_called == 1);
assert(state_profiler.start_name == "BM_Profiled");
assert(state_profiler.stop_name == "BM_Profiled");
LegacyProfilerManager legacy_profiler;
benchmark::RegisterProfilerManager(&legacy_profiler);
run_count = benchmark::RunSpecifiedBenchmarks(&null_reporter, "BM_Profiled$");
benchmark::RegisterProfilerManager(nullptr);
assert(run_count == 1);
assert(legacy_profiler.start_called == 1);
assert(legacy_profiler.stop_called == 1);
return 0;
}