All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
FrameTimer.h
1 // Copyright eeGeo Ltd (2012-2014), All Rights Reserved
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include <deque>
7 
8 namespace Eegeo
9 {
10  namespace Debug
11  {
13  {
14  public:
15  virtual void StartFrame() = 0;
16  virtual void EndFrame() = 0;
17  virtual void ResetCounters() = 0;
18  virtual float LastFrameTimeMS() const = 0;
19  virtual float MaxFrameTimeMS() const = 0;
20  virtual float FramesPerSecond() const = 0;
21  virtual float SmoothedFrameDurationMS() const = 0;
22  virtual float AverageFramesPerSecond() const = 0;
23  };
24 
25  struct FrameTime
26  {
27  float updateTime;
28  float drawTime;
29  float frameTime;
30  };
31 
33  {
34  public:
35  FrameTimer();
36  virtual ~FrameTimer() { };
37  virtual void StartFrame();
38  virtual void EndFrame();
39  virtual void StartUpdate();
40  virtual void EndUpdate();
41  virtual void StartDraw();
42  virtual void EndDraw();
43  virtual void ResetCounters();
44  virtual float LastFrameTimeMS() const;
45  virtual float MaxFrameTimeMS() const;
46  virtual float FramesPerSecond() const;
47  virtual float SmoothedFrameDurationMS() const;
48  virtual float AverageFramesPerSecond() const;
49 
50  virtual int GetNumberOfSamples() const;
51  const FrameTime& GetFrameSample(int index) const;
52  private:
53  double m_previousTimestamp;
54  double m_frameStarted;
55  double m_updateStarted;
56  double m_drawStarted;
57  double m_lastFrameDuration;
58  double m_smoothedDuration;
59  double m_averageFPSStartTime;
60  double m_maxFrameDuration;
61  int m_frameCount;
62  std::deque<FrameTime> m_statsPerFrame;
63  FrameTime m_currentStat;
64  };
65  }
66 }