All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Profiler.h
1 // Copyright (c) 2014 eeGeo. All rights reserved.
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "FrameProfileFactory.h"
7 #include "ProfileRecordFactory.h"
8 
9 #include "Pool.h"
10 
11 #include <deque>
12 #include <stack>
13 #include <string>
14 
15 #if !defined(NDEBUG) || defined(EMSCRIPTEN)
16  #define PROFILER_ENABLED 1
17 #else
18  #define PROFILER_ENABLED 0
19 #endif
20 
21 namespace Eegeo
22 {
23  namespace Debug
24  {
25  namespace Profile
26  {
28  {
29  std::string name;
30  double min;
31  double max;
32  double avg;
33  double last;
34  };
35 
36 #if PROFILER_ENABLED
37  class Profiler : protected Eegeo::NonCopyable
38  {
39  public:
40  Profiler();
41 
42  void BeginFrame();
43  void Begin(const std::string& name);
44  void End(const std::string& end);
45  void EndFrame();
46 
47  const int GetNumberOfSamples() const { return static_cast<int>(m_profilesPerFrame.size()); }
48  const FrameProfile& GetFrameProfile(int index) const;
49 
50  ProfileResults GetProfileResults(const std::string& name) const;
51 
52  void SetEnabled(bool enabled) { m_enabled = enabled; }
53  bool IsEnabled() const { return m_enabled; }
54 
55  private:
56  bool m_enabled;
57  std::deque<FrameProfile*> m_profilesPerFrame;
58  std::stack<ProfileRecord*> m_currentProfileRecord;
59 
60  FrameProfile* m_pCurrentFrameProfile;
61 
62  FrameProfileFactory m_frameProfileFactory;
63  ProfileRecordFactory m_profileRecordFactory;
64 
65  DataStructures::Pool<FrameProfile*> m_frameProfilePool;
66  DataStructures::Pool<ProfileRecord*> m_profileRecordPool;
67 
68  int m_recordsThisFrame;
69  };
70 
71 #else
72  class Profiler : protected Eegeo::NonCopyable
73  {
74  public:
75  void BeginFrame() {;}
76  void Begin(const std::string& name) {;}
77  void End(const std::string& end) {;}
78  void EndFrame() {;}
79 
80  const size_t GetNumberOfSamples() const { return 0; }
81  const FrameProfile& GetFrameProfile(int index) const { Eegeo_ASSERT(false); return m_emptyFrameProfile; }
82 
83  ProfileResults GetProfileResults(const std::string& name) const { return m_emptyProfileResults; }
84 
85  void SetEnabled(bool enabled) { ; }
86  bool IsEnabled() const { return false; }
87 
88  private:
89  FrameProfile m_emptyFrameProfile;
90  ProfileResults m_emptyProfileResults;
91  };
92 #endif
93  }
94  }
95 }