//===----------------------------------------------------------------------===// // // DuckDB // // benchmark_runner.hpp // // Author: Mark Raasveldt // //===----------------------------------------------------------------------===// #pragma once #include "benchmark_configuration.hpp" #include "benchmark.hpp" #include "duckdb/common/constants.hpp" #include "duckdb/common/fstream.hpp" #include namespace duckdb { class DuckDB; //! The benchmark runner class is responsible for running benchmarks class BenchmarkRunner { BenchmarkRunner(); public: static constexpr const char *DUCKDB_BENCHMARK_DIRECTORY = "duckdb_benchmark_data"; BenchmarkConfiguration configuration; static BenchmarkRunner &GetInstance() { static BenchmarkRunner instance; return instance; } static void InitializeBenchmarkDirectory(); //! Register a benchmark in the Benchmark Runner, this is done automatically //! as long as the proper macro's are used static void RegisterBenchmark(Benchmark *benchmark); void Log(string message); void LogLine(string message); void LogResult(string message); void LogOutput(string message); void LogSummary(string benchmark, string message, size_t i); void RunBenchmark(Benchmark *benchmark); void RunBenchmarks(); vector benchmarks; ofstream out_file; ofstream log_file; uint32_t threads = MaxValue(std::thread::hardware_concurrency(), 1u); string memory_limit; unordered_map custom_arguments; }; } // namespace duckdb