Drake Designer
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros Pages
ddFPSCounter.h
Go to the documentation of this file.
1 #ifndef __ddFPSCounter_h
2 #define __ddFPSCounter_h
3 
4 #include <QTime>
5 #include "ddAppConfigure.h"
6 
7 
8 // A class for keeping a exponential moving average of frames per second.
9 
11 {
12 public:
13 
14 
16  {
17  mAlpha = 0.9;
18  mTimeWindow = 1.0;
19  mAverageFPS = 0.0;
20  mFramesThisWindow = 0;
21  mTime.restart();
22  }
23 
25  {
26  }
27 
28  double alpha() const
29  {
30  return mAlpha;
31  }
32 
33  void setAlpha(double alpha)
34  {
35  mAlpha = alpha;
36  }
37 
38  double timeWindow() const
39  {
40  return mTimeWindow;
41  }
42 
43  void setTimeWindow(double seconds)
44  {
45  mTimeWindow = seconds;
46  }
47 
48  void update()
49  {
50  ++mFramesThisWindow;
51  updateAverage();
52  }
53 
54  double averageFPS()
55  {
56  updateAverage();
57  return mAverageFPS;
58  }
59 
60 private:
61 
62  void updateAverage()
63  {
64  // check if a time window has elapsed
65  double elapsedTime = mTime.elapsed() / 1000.0;
66 
67  if (elapsedTime > mTimeWindow)
68  {
69  // compute FPS for this time window
70  double averageFPSThisWindow = mFramesThisWindow / elapsedTime;
71 
72  // update moving average
73  mAverageFPS = mAlpha * averageFPSThisWindow + (1.0 - mAlpha) * mAverageFPS;
74 
75  // reset counters
76  mTime.restart();
77  mFramesThisWindow = 0;
78  }
79  }
80 
81  ddFPSCounter(const ddFPSCounter&); // Not implemented
82  void operator=(const ddFPSCounter&); // Not implemented
83 
84  double mAlpha;
85  double mAverageFPS;
86  double mTimeWindow;
87 
88  size_t mFramesThisWindow;
89 
90  QTime mTime;
91 };
92 
93 #endif
void setAlpha(double alpha)
Definition: ddFPSCounter.h:33
double alpha() const
Definition: ddFPSCounter.h:28
double timeWindow() const
Definition: ddFPSCounter.h:38
double averageFPS()
Definition: ddFPSCounter.h:54
void setTimeWindow(double seconds)
Definition: ddFPSCounter.h:43
void update()
Definition: ddFPSCounter.h:48
#define DD_APP_EXPORT