10 #ifndef hifi_Shared_RateCounter_h
11 #define hifi_Shared_RateCounter_h
16 #include <QtCore/QElapsedTimer>
18 #include "../SharedUtil.h"
19 #include "../NumericalConstants.h"
21 template <u
int32_t INTERVAL = MSECS_PER_SECOND, u
int8_t PRECISION = 2>
24 RateCounter() { _rate = 0; }
26 void increment(
size_t count = 1) {
31 float rate()
const { checkRate();
return _rate; }
33 uint8_t precision()
const {
return PRECISION; }
35 uint32_t interval()
const {
return INTERVAL; }
38 mutable uint64_t _expiry { usecTimestampNow() + INTERVAL * USECS_PER_MSEC};
39 mutable size_t _count { 0 };
40 const float _scale { powf(10, PRECISION) };
41 mutable std::atomic<float> _rate;
43 void checkRate()
const {
44 auto now = usecTimestampNow();
46 float MSECS_PER_USEC = 0.001f;
47 float SECS_PER_MSEC = 0.001f;
48 float intervalSeconds = ((float)INTERVAL + (
float)(now - _expiry) * MSECS_PER_USEC) * SECS_PER_MSEC;
49 _rate = roundf((
float)_count / intervalSeconds * _scale) / _scale;
50 _expiry = now + INTERVAL * USECS_PER_MSEC;