1//===----------------------------------------------------------------------===//
2//
3// DuckDB
4//
5// benchmark_runner.hpp
6//
7// Author: Mark Raasveldt
8//
9//===----------------------------------------------------------------------===//
10
11#pragma once
12
13#include "benchmark.hpp"
14#include "duckdb/common/constants.hpp"
15#include "duckdb/common/fstream.hpp"
16
17namespace duckdb {
18class DuckDB;
19
20//! The benchmark runner class is responsible for running benchmarks
21class BenchmarkRunner {
22 BenchmarkRunner() {
23 }
24
25public:
26 static constexpr const char *DUCKDB_BENCHMARK_DIRECTORY = "duckdb_benchmark_data";
27
28 static BenchmarkRunner &GetInstance() {
29 static BenchmarkRunner instance;
30 return instance;
31 }
32
33 //! Save the current database state, exporting it to a set of CSVs in the DUCKDB_BENCHMARK_DIRECTORY directory
34 static void SaveDatabase(DuckDB &db, string name);
35 //! Try to initialize the database from the DUCKDB_BENCHMARK_DIRECTORY
36 static bool TryLoadDatabase(DuckDB &db, string name);
37
38 //! Register a benchmark in the Benchmark Runner, this is done automatically
39 //! as long as the proper macro's are used
40 static void RegisterBenchmark(Benchmark *benchmark);
41
42 void Log(string message);
43 void LogLine(string message);
44 void LogResult(string message);
45 void LogOutput(string message);
46
47 void RunBenchmark(Benchmark *benchmark);
48 void RunBenchmarks();
49
50 vector<Benchmark *> benchmarks;
51 ofstream out_file;
52 ofstream log_file;
53};
54
55} // namespace duckdb
56