#pragma once
|
|
|
|
#include <chrono>
|
|
|
|
namespace vlc
|
|
{
|
|
struct Timer
|
|
{
|
|
using time_point = std::chrono::high_resolution_clock::time_point;
|
|
|
|
time_point start_time;
|
|
double duration = 0; // Duration between last call of end and start_time
|
|
double total_duration = 0;
|
|
|
|
static inline time_point now()
|
|
{
|
|
return std::chrono::high_resolution_clock::now();
|
|
}
|
|
|
|
static inline double ms_duration_between(const time_point start_time, const time_point end_time)
|
|
{
|
|
std::chrono::duration<double, std::milli> fp_ms = end_time - start_time;
|
|
return fp_ms.count();
|
|
}
|
|
|
|
void reset()
|
|
{
|
|
duration = total_duration = 0;
|
|
}
|
|
|
|
void start()
|
|
{
|
|
start_time = now();
|
|
}
|
|
|
|
double stop()
|
|
{
|
|
auto end_time = now();
|
|
duration = ms_duration_between(start_time, end_time);
|
|
|
|
total_duration += duration;
|
|
|
|
return duration;
|
|
}
|
|
};
|
|
}
|