git / moonbite-core / src/bench/bench.h · raw
// Copyright (c) 2015-2020 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#ifndef BITCOIN_BENCH_BENCH_H#define BITCOIN_BENCH_BENCH_H#include <chrono>#include <functional>#include <map>#include <string>#include <vector>#include <bench/nanobench.h>#include <boost/preprocessor/cat.hpp>#include <boost/preprocessor/stringize.hpp>/* * Usage:static void CODE_TO_TIME(benchmark::Bench& bench){ ... do any setup needed... nanobench::Config().run([&] { ... do stuff you want to time... }); ... do any cleanup needed...}BENCHMARK(CODE_TO_TIME); */namespace benchmark {using ankerl::nanobench::Bench;typedef std::function<void(Bench&)> BenchFunction;struct Args { std::string regex_filter; bool is_list_only; std::vector<double> asymptote; std::string output_csv; std::string output_json;};class BenchRunner{ typedef std::map<std::string, BenchFunction> BenchmarkMap; static BenchmarkMap& benchmarks();public: BenchRunner(std::string name, BenchFunction func); static void RunAll(const Args& args);};}// BENCHMARK(foo) expands to: benchmark::BenchRunner bench_11foo("foo");#define BENCHMARK(n) \ benchmark::BenchRunner BOOST_PP_CAT(bench_, BOOST_PP_CAT(__LINE__, n))(BOOST_PP_STRINGIZE(n), n);#endif // BITCOIN_BENCH_BENCH_H