Program Listing for File Chrono.hpp¶
↰ Return to documentation for file (src/include/Chrono.hpp)
#ifndef SRC_INCLUDE_CHRONO_HPP_
#define SRC_INCLUDE_CHRONO_HPP_
#include <chrono>
#include <ctime>
namespace Nextsim {
class Chrono {
public:
typedef std::chrono::high_resolution_clock::time_point WallTimePoint;
typedef std::chrono::high_resolution_clock::duration WallTimeDuration;
typedef std::clock_t CpuTimePoint;
typedef double CpuTimeDuration;
Chrono()
: m_wallTime(WallTimeDuration::zero())
, m_cpuTime(0)
, m_ticks(0)
, m_running(false) {};
~Chrono() = default;
inline WallTimePoint wallHack() const { return m_wallHack; };
inline WallTimeDuration wallTime() const
{
return m_wallTime + (m_running ? wallTimeSinceHack() : WallTimeDuration::zero());
};
inline void reset()
{
m_wallTime = WallTimeDuration::zero();
m_cpuTime = 0;
m_ticks = 0;
m_running = false;
}
inline CpuTimePoint cpuHack() const { return m_cpuHack; };
inline CpuTimeDuration cpuTime() const
{
return m_cpuTime + (m_running ? cpuTimeSinceHack() : 0);
};
inline int ticks() const { return m_ticks; };
inline bool running() const { return m_running; };
inline void start()
{
m_wallHack = std::chrono::high_resolution_clock::now();
m_cpuHack = std::clock();
++m_ticks;
m_running = true;
};
void stop()
{
m_wallTime += wallTimeSinceHack();
m_cpuTime += cpuTimeSinceHack();
m_running = false;
};
inline void extraCpuTime(const CpuTimeDuration& extraTime) { m_cpuTime += extraTime; };
inline void extraWallTime(const WallTimeDuration& extraTime) { m_wallTime += extraTime; };
inline void extraTicks(int extraTicks) { m_ticks += extraTicks; };
private:
WallTimePoint m_wallHack;
WallTimeDuration m_wallTime;
CpuTimePoint m_cpuHack;
CpuTimeDuration m_cpuTime;
int m_ticks;
bool m_running;
CpuTimeDuration cpuTimeSinceHack() const
{
return static_cast<CpuTimeDuration>(std::clock() - m_cpuHack) / CLOCKS_PER_SEC;
}
WallTimeDuration wallTimeSinceHack() const
{
return std::chrono::duration_cast<WallTimeDuration>(
std::chrono::high_resolution_clock::now() - m_wallHack);
}
};
} /* namespace Nextsim */
#endif /* SRC_INCLUDE_CHRONO_HPP_ */