mirror of
https://github.com/google/benchmark.git
synced 2024-12-26 20:40:21 +08:00
7c8ed6b082
This API is akin to the MemoryManager API and lets tools provide their own profiler which is wrapped in the same way MemoryManager is wrapped. Namely, the profiler provides Start/Stop methods that are called at the start/end of running the benchmark in a separate pass. Co-authored-by: dominic <510002+dmah42@users.noreply.github.com>
44 lines
1.5 KiB
C++
44 lines
1.5 KiB
C++
// FIXME: WIP
|
|
|
|
#include <memory>
|
|
|
|
#include "benchmark/benchmark.h"
|
|
#include "output_test.h"
|
|
|
|
class TestProfilerManager : public benchmark::ProfilerManager {
|
|
void AfterSetupStart() override {}
|
|
void BeforeTeardownStop() override {}
|
|
};
|
|
|
|
void BM_empty(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
auto iterations = state.iterations();
|
|
benchmark::DoNotOptimize(iterations);
|
|
}
|
|
}
|
|
BENCHMARK(BM_empty);
|
|
|
|
ADD_CASES(TC_ConsoleOut, {{"^BM_empty %console_report$"}});
|
|
ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_empty\",$"},
|
|
{"\"family_index\": 0,$", MR_Next},
|
|
{"\"per_family_instance_index\": 0,$", MR_Next},
|
|
{"\"run_name\": \"BM_empty\",$", MR_Next},
|
|
{"\"run_type\": \"iteration\",$", MR_Next},
|
|
{"\"repetitions\": 1,$", MR_Next},
|
|
{"\"repetition_index\": 0,$", MR_Next},
|
|
{"\"threads\": 1,$", MR_Next},
|
|
{"\"iterations\": %int,$", MR_Next},
|
|
{"\"real_time\": %float,$", MR_Next},
|
|
{"\"cpu_time\": %float,$", MR_Next},
|
|
{"\"time_unit\": \"ns\"$", MR_Next},
|
|
{"}", MR_Next}});
|
|
ADD_CASES(TC_CSVOut, {{"^\"BM_empty\",%csv_report$"}});
|
|
|
|
int main(int argc, char* argv[]) {
|
|
std::unique_ptr<benchmark::ProfilerManager> pm(new TestProfilerManager());
|
|
|
|
benchmark::RegisterProfilerManager(pm.get());
|
|
RunOutputTests(argc, argv);
|
|
benchmark::RegisterProfilerManager(nullptr);
|
|
}
|