Bullet Collision Detection & Physics Library
Main Page
Namespaces
Classes
Files
File List
File Members
src
LinearMath
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
private
:
56
struct
btClockData
*
m_data
;
57
};
58
59
#endif //USE_BT_CLOCK
60
61
62
63
65
class
CProfileNode
{
66
67
public
:
68
CProfileNode
(
const
char
* name,
CProfileNode
* parent );
69
~CProfileNode
(
void
);
70
71
CProfileNode
*
Get_Sub_Node
(
const
char
* name );
72
73
CProfileNode
*
Get_Parent
(
void
) {
return
Parent
; }
74
CProfileNode
*
Get_Sibling
(
void
) {
return
Sibling
; }
75
CProfileNode
*
Get_Child
(
void
) {
return
Child
; }
76
77
void
CleanupMemory
();
78
void
Reset
(
void
);
79
void
Call
(
void
);
80
bool
Return
(
void
);
81
82
const
char
*
Get_Name
(
void
) {
return
Name
; }
83
int
Get_Total_Calls
(
void
) {
return
TotalCalls
; }
84
float
Get_Total_Time
(
void
) {
return
TotalTime
; }
85
void
*
GetUserPointer
()
const
{
return
m_userPtr
;}
86
void
SetUserPointer
(
void
* ptr) {
m_userPtr
= ptr;}
87
protected
:
88
89
const
char
*
Name
;
90
int
TotalCalls
;
91
float
TotalTime
;
92
unsigned
long
int
StartTime
;
93
int
RecursionCounter
;
94
95
CProfileNode
*
Parent
;
96
CProfileNode
*
Child
;
97
CProfileNode
*
Sibling
;
98
void
*
m_userPtr
;
99
};
100
102
class
CProfileIterator
103
{
104
public
:
105
// Access all the children of the current parent
106
void
First
(
void
);
107
void
Next
(
void
);
108
bool
Is_Done
(
void
);
109
bool
Is_Root
(
void
) {
return
(
CurrentParent
->
Get_Parent
() == 0); }
110
111
void
Enter_Child
(
int
index );
// Make the given child the new parent
112
void
Enter_Largest_Child
(
void
);
// Make the largest child the new parent
113
void
Enter_Parent
(
void
);
// Make the current parent's parent the new parent
114
115
// Access the current child
116
const
char
*
Get_Current_Name
(
void
) {
return
CurrentChild
->
Get_Name
(); }
117
int
Get_Current_Total_Calls
(
void
) {
return
CurrentChild
->
Get_Total_Calls
(); }
118
float
Get_Current_Total_Time
(
void
) {
return
CurrentChild
->
Get_Total_Time
(); }
119
120
void
*
Get_Current_UserPointer
(
void
) {
return
CurrentChild
->
GetUserPointer
(); }
121
void
Set_Current_UserPointer
(
void
* ptr) {
CurrentChild
->
SetUserPointer
(ptr);}
122
// Access the current parent
123
const
char
*
Get_Current_Parent_Name
(
void
) {
return
CurrentParent
->
Get_Name
(); }
124
int
Get_Current_Parent_Total_Calls
(
void
) {
return
CurrentParent
->
Get_Total_Calls
(); }
125
float
Get_Current_Parent_Total_Time
(
void
) {
return
CurrentParent
->
Get_Total_Time
(); }
126
127
128
129
protected
:
130
131
CProfileNode
*
CurrentParent
;
132
CProfileNode
*
CurrentChild
;
133
134
135
CProfileIterator
(
CProfileNode
* start );
136
friend
class
CProfileManager
;
137
};
138
139
141
class
CProfileManager
{
142
public
:
143
static
void
Start_Profile
(
const
char
* name );
144
static
void
Stop_Profile
(
void
);
145
146
static
void
CleanupMemory
(
void
)
147
{
148
Root
.
CleanupMemory
();
149
}
150
151
static
void
Reset
(
void
);
152
static
void
Increment_Frame_Counter
(
void
);
153
static
int
Get_Frame_Count_Since_Reset
(
void
) {
return
FrameCounter
; }
154
static
float
Get_Time_Since_Reset
(
void
);
155
156
static
CProfileIterator
*
Get_Iterator
(
void
)
157
{
158
159
return
new
CProfileIterator
( &
Root
);
160
}
161
static
void
Release_Iterator
(
CProfileIterator
* iterator ) {
delete
( iterator); }
162
163
static
void
dumpRecursive
(
CProfileIterator
* profileIterator,
int
spacing);
164
165
static
void
dumpAll
();
166
167
private
:
168
static
CProfileNode
Root
;
169
static
CProfileNode
*
CurrentNode
;
170
static
int
FrameCounter
;
171
static
unsigned
long
int
ResetTime
;
172
};
173
174
177
class
CProfileSample
{
178
public
:
179
CProfileSample
(
const
char
* name )
180
{
181
CProfileManager::Start_Profile
( name );
182
}
183
184
~CProfileSample
(
void
)
185
{
186
CProfileManager::Stop_Profile
();
187
}
188
};
189
190
191
#define BT_PROFILE( name ) CProfileSample __profile( name )
192
193
#else
194
195
#define BT_PROFILE( name )
196
197
#endif //#ifndef BT_NO_PROFILE
198
199
200
201
#endif //BT_QUICK_PROF_H
202
203
Generated on Thu Oct 3 2013 18:25:06 for Bullet Collision Detection & Physics Library by
1.8.4