ProtoTank/Engine/Utils/Timers.hpp

48 lines
1.4 KiB
C++

#pragma once
#include <chrono>
class SysTimer final {
public:
SysTimer() noexcept {
auto curr_time = std::chrono::high_resolution_clock::now();
t_start = curr_time;
t_previousDelta = curr_time;
}
~SysTimer() {}
void Reset() { this->t_previousDelta = std::chrono::high_resolution_clock::now(); }
const double GetElapsedTime() const {
return (double)(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - t_start).count());
}
const double GetElapsedTimeS() const {
return GetElapsedTime() / 1000000;
}
const double GetDeltaTime() {
return GetDeltaTime(false, true);
}
const double GetDeltaTimeUs() {
return GetDeltaTime(false, false);
}
const double GetDeltaTime(bool reset, bool msMode) {
auto curr_time = std::chrono::high_resolution_clock::now();
double ret = 0;
if (msMode)
ret = std::chrono::duration_cast<std::chrono::milliseconds>(curr_time - t_previousDelta).count();
else
ret = std::chrono::duration_cast<std::chrono::microseconds>(curr_time - t_previousDelta).count();
if (reset)
this->t_previousDelta = curr_time;
return ret;
}
private:
std::chrono::time_point<std::chrono::high_resolution_clock> t_start;
std::chrono::time_point<std::chrono::high_resolution_clock> t_previousDelta;
};