// Timespan.h // Libunistd Copyright 2016 Robin.Rowe@CinePaint.org // License open source MIT #ifndef Timespan_h #define Timespan_h #include #include namespace portable { class Timespan { double longestDuration; double shortestDuration; unsigned tickCount; std::chrono::steady_clock::time_point start; public: Timespan() { Reset(); } void Reset(const char* msg = nullptr) { tickCount = 0; longestDuration = 0.; shortestDuration = -1.; start = std::chrono::steady_clock::now(); if(msg) { printf("%s: resetting from %fs at tick %u\n",msg,longestDuration/1000,tickCount); } } void Snap(const char* msg = nullptr) { tickCount++; auto end = std::chrono::steady_clock::now(); std::chrono::duration interval = end - start; if(interval.count()>longestDuration) { if(msg) { printf("%s: increasing from %fs to %fs at tick %u\n",msg,longestDuration/1000,interval.count()/1000,tickCount); } longestDuration = interval.count(); } if(-1. == shortestDuration || interval.count()