AceTime  0.5.1
Date and time classes for Arduino that support timezones from the TZ Database, and a system clock that can synchronize from an NTP server or an RTC chip.
TimingStats.h
1 /*
2  * MIT License
3  * Copyright (c) 2018 Brian T. Park
4  */
5 
6 #ifndef ACE_TIME_TIMING_STATS_H
7 #define ACE_TIME_TIMING_STATS_H
8 
9 #include <stdint.h>
10 
11 class Print;
12 
13 namespace ace_time {
14 namespace common {
15 
19 class TimingStats {
20  public:
22  TimingStats(): mCounter(0) {
23  reset();
24  }
25 
26  void reset() {
27  mExpDecayAvg = 0;
28  mMin = UINT16_MAX;
29  mMax = 0;
30  mSum = 0;
31  mCount = 0;
32  }
33 
34  uint16_t getMax() const { return mMax; }
35 
36  uint16_t getMin() const { return mMin; }
37 
38  uint16_t getAvg() const { return (mCount > 0) ? mSum / mCount : 0; }
39 
41  uint16_t getExpDecayAvg() const { return mExpDecayAvg; }
42 
44  uint16_t getCount() const { return mCount; }
45 
51  uint16_t getCounter() const { return mCounter; }
52 
53  void update(uint16_t duration) {
54  mCount++;
55  mCounter++;
56  mSum += duration;
57  if (duration < mMin) {
58  mMin = duration;
59  }
60  if (duration > mMax) {
61  mMax = duration;
62  }
63  mExpDecayAvg = (mExpDecayAvg + duration) / 2;
64  }
65 
66  private:
67  uint16_t mExpDecayAvg;
68  uint16_t mMin;
69  uint16_t mMax;
70  uint32_t mSum;
71  uint16_t mCount;
72  uint16_t mCounter;
73 };
74 
75 }
76 }
77 
78 #endif
uint16_t getExpDecayAvg() const
An exponential decay average.
Definition: TimingStats.h:41
Helper class to collect timing statistics such as min, max, average.
Definition: TimingStats.h:19
uint16_t getCount() const
Number of times update() was called since last reset.
Definition: TimingStats.h:44
uint16_t getCounter() const
Number of times update() was called from the beginning of time.
Definition: TimingStats.h:51