11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
18PROMEKI_NAMESPACE_BEGIN
61 static constexpr int64_t kDefaultWindowMs = 5000;
67 explicit RateTracker(int64_t windowMs = kDefaultWindowMs);
69 RateTracker(
const RateTracker &) =
delete;
70 RateTracker &operator=(
const RateTracker &) =
delete;
71 RateTracker(RateTracker &&) =
delete;
72 RateTracker &operator=(RateTracker &&) =
delete;
83 void record(int64_t bytes);
94 double bytesPerSecond()
const;
104 double framesPerSecond()
const;
115 int64_t windowMs()
const {
return _windowMs; }
127 void rotateIfStale(int64_t nowNs)
const;
130 mutable Atomic<int64_t> _bytes;
131 mutable Atomic<int64_t> _frames;
132 mutable Mutex _mutex;
133 mutable int64_t _windowStartNs = 0;
134 mutable int64_t _lastWindowBytes = 0;
135 mutable int64_t _lastWindowFrames = 0;
136 mutable int64_t _lastWindowElapsedNs = 0;
137 mutable bool _haveLastWindow =
false;