59 lines
1.5 KiB
C++
59 lines
1.5 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// 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 <thread>
|
|
|
|
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<Benchmark *> benchmarks;
|
|
ofstream out_file;
|
|
ofstream log_file;
|
|
uint32_t threads = MaxValue<uint32_t>(std::thread::hardware_concurrency(), 1u);
|
|
string memory_limit;
|
|
unordered_map<string, string> custom_arguments;
|
|
};
|
|
|
|
} // namespace duckdb
|