Bullet Collision Detection & Physics Library
btQuickprof.h
Go to the documentation of this file.
1 
2 /***************************************************************************************************
3 **
4 ** Real-Time Hierarchical Profiling for Game Programming Gems 3
5 **
6 ** by Greg Hjelstrom & Byon Garrabrant
7 **
8 ***************************************************************************************************/
9 
10 // Credits: The Clock class was inspired by the Timer classes in
11 // Ogre (www.ogre3d.org).
12 
13 
14 
15 #ifndef BT_QUICK_PROF_H
16 #define BT_QUICK_PROF_H
17 
18 //To disable built-in profiling, please comment out next line
19 //#define BT_NO_PROFILE 1
20 #ifndef BT_NO_PROFILE
21 #include <stdio.h>//@todo remove this, backwards compatibility
22 #include "btScalar.h"
23 #include "btAlignedAllocator.h"
24 #include <new>
25 
26 
27 
28 
29 
30 #define USE_BT_CLOCK 1
31 
32 #ifdef USE_BT_CLOCK
33 
35 class btClock
36 {
37 public:
38  btClock();
39 
40  btClock(const btClock& other);
41  btClock& operator=(const btClock& other);
42 
43  ~btClock();
44 
46  void reset();
47 
50  unsigned long int getTimeMilliseconds();
51 
54  unsigned long int getTimeMicroseconds();
55 
59 
60 private:
62 };
63 
64 #endif //USE_BT_CLOCK
65 
66 
67 
68 
70 class CProfileNode {
71 
72 public:
73  CProfileNode( const char * name, CProfileNode * parent );
74  ~CProfileNode( void );
75 
76  CProfileNode * Get_Sub_Node( const char * name );
77 
78  CProfileNode * Get_Parent( void ) { return Parent; }
79  CProfileNode * Get_Sibling( void ) { return Sibling; }
80  CProfileNode * Get_Child( void ) { return Child; }
81 
82  void CleanupMemory();
83  void Reset( void );
84  void Call( void );
85  bool Return( void );
86 
87  const char * Get_Name( void ) { return Name; }
88  int Get_Total_Calls( void ) { return TotalCalls; }
89  float Get_Total_Time( void ) { return TotalTime; }
90  void* GetUserPointer() const {return m_userPtr;}
91  void SetUserPointer(void* ptr) { m_userPtr = ptr;}
92 protected:
93 
94  const char * Name;
96  float TotalTime;
97  unsigned long int StartTime;
99 
103  void* m_userPtr;
104 };
105 
108 {
109 public:
110  // Access all the children of the current parent
111  void First(void);
112  void Next(void);
113  bool Is_Done(void);
114  bool Is_Root(void) { return (CurrentParent->Get_Parent() == 0); }
115 
116  void Enter_Child( int index ); // Make the given child the new parent
117  void Enter_Largest_Child( void ); // Make the largest child the new parent
118  void Enter_Parent( void ); // Make the current parent's parent the new parent
119 
120  // Access the current child
121  const char * Get_Current_Name( void ) { return CurrentChild->Get_Name(); }
122  int Get_Current_Total_Calls( void ) { return CurrentChild->Get_Total_Calls(); }
123  float Get_Current_Total_Time( void ) { return CurrentChild->Get_Total_Time(); }
124 
125  void* Get_Current_UserPointer( void ) { return CurrentChild->GetUserPointer(); }
126  void Set_Current_UserPointer(void* ptr) {CurrentChild->SetUserPointer(ptr);}
127  // Access the current parent
128  const char * Get_Current_Parent_Name( void ) { return CurrentParent->Get_Name(); }
129  int Get_Current_Parent_Total_Calls( void ) { return CurrentParent->Get_Total_Calls(); }
130  float Get_Current_Parent_Total_Time( void ) { return CurrentParent->Get_Total_Time(); }
131 
132 
133 
134 protected:
135 
138 
139 
140  CProfileIterator( CProfileNode * start );
141  friend class CProfileManager;
142 };
143 
144 
147 public:
148  static void Start_Profile( const char * name );
149  static void Stop_Profile( void );
150 
151  static void CleanupMemory(void)
152  {
153  Root.CleanupMemory();
154  }
155 
156  static void Reset( void );
157  static void Increment_Frame_Counter( void );
158  static int Get_Frame_Count_Since_Reset( void ) { return FrameCounter; }
159  static float Get_Time_Since_Reset( void );
160 
161  static CProfileIterator * Get_Iterator( void )
162  {
163 
164  return new CProfileIterator( &Root );
165  }
166  static void Release_Iterator( CProfileIterator * iterator ) { delete ( iterator); }
167 
168  static void dumpRecursive(CProfileIterator* profileIterator, int spacing);
169 
170  static void dumpAll();
171 
172 private:
175  static int FrameCounter;
176  static unsigned long int ResetTime;
177 };
178 
179 
183 public:
184  CProfileSample( const char * name )
185  {
187  }
188 
190  {
192  }
193 };
194 
195 
196 #define BT_PROFILE( name ) CProfileSample __profile( name )
197 
198 #else
199 
200 #define BT_PROFILE( name )
201 
202 #endif //#ifndef BT_NO_PROFILE
203 
204 
205 
206 #endif //BT_QUICK_PROF_H
207 
208 
static CProfileNode * CurrentNode
Definition: btQuickprof.h:174
void * GetUserPointer() const
Definition: btQuickprof.h:90
CProfileSample(const char *name)
Definition: btQuickprof.h:184
CProfileNode * Get_Child(void)
Definition: btQuickprof.h:80
void Set_Current_UserPointer(void *ptr)
Definition: btQuickprof.h:126
static void Start_Profile(const char *name)
int Get_Total_Calls(void)
Definition: btQuickprof.h:88
int RecursionCounter
Definition: btQuickprof.h:98
CProfileNode * CurrentParent
Definition: btQuickprof.h:136
btScalar getTimeSeconds()
Returns the time in s since the last call to reset or since the Clock was created.
int Get_Current_Parent_Total_Calls(void)
Definition: btQuickprof.h:129
const char * Get_Current_Name(void)
Definition: btQuickprof.h:121
float Get_Current_Parent_Total_Time(void)
Definition: btQuickprof.h:130
unsigned long int getTimeMicroseconds()
Returns the time in us since the last call to reset or since the Clock was created.
The btClock is a portable basic clock that measures accurate time in seconds, use for profiling...
Definition: btQuickprof.h:35
float Get_Current_Total_Time(void)
Definition: btQuickprof.h:123
void reset()
Resets the initial reference time.
An iterator to navigate through the tree.
Definition: btQuickprof.h:107
float TotalTime
Definition: btQuickprof.h:96
static void Stop_Profile(void)
CProfileNode * Child
Definition: btQuickprof.h:101
unsigned long int getTimeMilliseconds()
Returns the time in ms since the last call to reset or since the btClock was created.
static unsigned long int ResetTime
Definition: btQuickprof.h:176
static void CleanupMemory(void)
Definition: btQuickprof.h:151
ProfileSampleClass is a simple way to profile a function&#39;s scope Use the BT_PROFILE macro at the star...
Definition: btQuickprof.h:182
btClock()
The btClock is a portable basic clock that measures accurate time in seconds, use for profiling...
Definition: btQuickprof.cpp:81
void * m_userPtr
Definition: btQuickprof.h:103
CProfileNode * Get_Sibling(void)
Definition: btQuickprof.h:79
struct btClockData * m_data
Definition: btQuickprof.h:61
CProfileNode * Parent
Definition: btQuickprof.h:100
void SetUserPointer(void *ptr)
Definition: btQuickprof.h:91
static void Release_Iterator(CProfileIterator *iterator)
Definition: btQuickprof.h:166
btClock & operator=(const btClock &other)
void * Get_Current_UserPointer(void)
Definition: btQuickprof.h:125
The Manager for the Profile system.
Definition: btQuickprof.h:146
A node in the Profile Hierarchy Tree.
Definition: btQuickprof.h:70
const char * Name
Definition: btQuickprof.h:94
CProfileNode * Get_Parent(void)
Definition: btQuickprof.h:78
int Get_Current_Total_Calls(void)
Definition: btQuickprof.h:122
const char * Get_Name(void)
Definition: btQuickprof.h:87
CProfileNode * CurrentChild
Definition: btQuickprof.h:137
unsigned long int StartTime
Definition: btQuickprof.h:97
~CProfileSample(void)
Definition: btQuickprof.h:189
static CProfileNode Root
Definition: btQuickprof.h:173
static CProfileIterator * Get_Iterator(void)
Definition: btQuickprof.h:161
static int Get_Frame_Count_Since_Reset(void)
Definition: btQuickprof.h:158
float Get_Total_Time(void)
Definition: btQuickprof.h:89
const char * Get_Current_Parent_Name(void)
Definition: btQuickprof.h:128
bool Is_Root(void)
Definition: btQuickprof.h:114
static int FrameCounter
Definition: btQuickprof.h:175
CProfileNode * Sibling
Definition: btQuickprof.h:102
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:278