5 #include <unordered_map> 10 using t_clock = std::chrono::high_resolution_clock;
28 std::cout <<
"Timers results:" <<
'\n';
29 for (
const auto &measurement :
m_timers) {
30 std::cout << measurement.first <<
": " 31 << std::chrono::duration_cast<std::chrono::milliseconds>(measurement.second.time).count() <<
" ms (" 32 << std::chrono::duration_cast<std::chrono::milliseconds>(measurement.second.time).count() /
33 measurement.second.nCalls
34 <<
" per " << measurement.second.nCalls <<
" calls)" <<
'\n';
42 auto &measurement =
m_timers[timerName];
43 measurement.time +=
time;
47 std::unordered_map<std::string, Measurement>
m_timers;
53 ~Stopwatch() { m_bench->UpdateTimer(std::move(m_name), t_clock::duration(t_clock::now() - m_start)); }
65 return std::make_unique<Stopwatch>(std::move(name),
this);
Benchmark * m_bench
Definition: Benchmark.h:58
Definition: Benchmark.h:18
friend class Stopwatch
Definition: Benchmark.h:15
Stopwatch MakeStopwatch(std::string name)
Definition: Benchmark.h:63
void UpdateTimer(std::string &&timerName, t_clock::duration time)
Definition: Benchmark.h:39
Definition: Benchmark.h:14
std::unique_ptr< Stopwatch > MakeStopwatchPtr(std::string name)
Definition: Benchmark.h:64
unsigned int nCalls
Definition: Benchmark.h:20
Definition: Benchmark.h:50
std::chrono::high_resolution_clock t_clock
Definition: Benchmark.h:10
Stopwatch(std::string name, Benchmark *bench)
Definition: Benchmark.h:52
std::unordered_map< std::string, Measurement > m_timers
Definition: Benchmark.h:45
t_clock::duration time
Definition: Benchmark.h:19
std::string m_name
Definition: Benchmark.h:56
~Stopwatch()
Definition: Benchmark.h:53
t_clock::time_point m_start
Definition: Benchmark.h:60
void Print()
Definition: Benchmark.h:27