mirror of
https://github.com/google/benchmark.git
synced 2024-12-28 05:20:14 +08:00
4c2e32f1d0
It may be useful for those wishing to further post-process JSON results, but it is mainly geared towards better support for run interleaving, where results from the same family may not be close-by in the JSON. While we won't be able to do much about that for outputs, the tools can and perhaps should reorder the results to that at least in their output they are in proper order, not run order. Note that this only counts the families that were filtered-in, so if e.g. there were three families, and we filtered-out the second one, the two families (which were first and third) will have family indexes 0 and 1.
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
#include <memory>
|
|
|
|
#include "../src/check.h"
|
|
#include "benchmark/benchmark.h"
|
|
#include "output_test.h"
|
|
|
|
class TestMemoryManager : public benchmark::MemoryManager {
|
|
void Start() BENCHMARK_OVERRIDE {}
|
|
void Stop(Result* result) BENCHMARK_OVERRIDE {
|
|
result->num_allocs = 42;
|
|
result->max_bytes_used = 42000;
|
|
}
|
|
};
|
|
|
|
void BM_empty(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
benchmark::DoNotOptimize(state.iterations());
|
|
}
|
|
}
|
|
BENCHMARK(BM_empty);
|
|
|
|
ADD_CASES(TC_ConsoleOut, {{"^BM_empty %console_report$"}});
|
|
ADD_CASES(TC_JSONOut, {{"\"name\": \"BM_empty\",$"},
|
|
{"\"family_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},
|
|
{"\"allocs_per_iter\": %float,$", MR_Next},
|
|
{"\"max_bytes_used\": 42000$", MR_Next},
|
|
{"}", MR_Next}});
|
|
ADD_CASES(TC_CSVOut, {{"^\"BM_empty\",%csv_report$"}});
|
|
|
|
int main(int argc, char* argv[]) {
|
|
std::unique_ptr<benchmark::MemoryManager> mm(new TestMemoryManager());
|
|
|
|
benchmark::RegisterMemoryManager(mm.get());
|
|
RunOutputTests(argc, argv);
|
|
benchmark::RegisterMemoryManager(nullptr);
|
|
}
|