12 #ifndef hifi_TimeWeightedAvg_h
13 #define hifi_TimeWeightedAvg_h
15 #include "SharedUtil.h"
18 class TimeWeightedAvg {
23 : _firstSampleTime(0),
26 _weightedSampleSumExcludingLastSample(0.0)
32 _weightedSampleSumExcludingLastSample = 0.0;
35 void updateWithSample(T sample) {
36 quint64 now = usecTimestampNow();
38 if (_firstSampleTime == 0) {
39 _firstSampleTime = now;
41 _weightedSampleSumExcludingLastSample = getWeightedSampleSum(now);
45 _lastSampleTime = now;
48 double getAverage()
const {
49 if (_firstSampleTime == 0) {
52 quint64 now = usecTimestampNow();
53 quint64 elapsed = now - _firstSampleTime;
54 return getWeightedSampleSum(now) / (double)elapsed;
57 quint64 getElapsedUsecs()
const {
58 if (_firstSampleTime == 0) {
61 return usecTimestampNow() - _firstSampleTime;
66 double getWeightedSampleSum(quint64 now)
const {
67 quint64 lastSampleLasted = now - _lastSampleTime;
68 return _weightedSampleSumExcludingLastSample + (double)_lastSample * (
double)lastSampleLasted;
72 quint64 _firstSampleTime;
75 quint64 _lastSampleTime;
77 double _weightedSampleSumExcludingLastSample;