1 #ifndef PROFILER_H_INCLUDED
\r
2 #define PROFILER_H_INCLUDED
\r
4 #define MAX_PROFILER_SAMPLES 50
\r
6 class IProfilerOutputHandler;
\r
7 class CProfileSample;
\r
12 CProfileSample(std::string sampleName);
\r
15 static void Output();
\r
17 static void ResetSample(std::string sampleName);
\r
18 static void ResetAll();
\r
20 static IProfilerOutputHandler *outputHandler;
\r
22 static bool bProfilerIsRunning;
\r
25 //index into the array of samples
\r
29 inline float GetTime(){ return ((float)GetTickCount())/1000.0f; }
\r
31 static struct profileSample
\r
37 averagePc=minPc=maxPc=-1;
\r
40 bool bIsValid; //whether or not this sample is valid (for use with fixed-size arrays)
\r
41 bool bIsOpen; //is this sample currently being profiled?
\r
42 unsigned int callCount; //number of times this sample has been profiled this frame
\r
43 std::string name; //name of the sample
\r
45 float startTime; //starting time on the clock, in seconds
\r
46 float totalTime; //total time recorded across all profiles of this sample
\r
47 float childTime; //total time taken by children of this sample
\r
49 int parentCount; //number of parents this sample has (useful for indenting)
\r
51 float averagePc; //average percentage of game loop time taken up
\r
52 float minPc; //minimum percentage of game loop time taken up
\r
53 float maxPc; //maximum percentage of game loop time taken up
\r
54 unsigned long dataCount;//number of percentage values that have been stored
\r
55 } samples[MAX_PROFILER_SAMPLES];
\r
56 static int lastOpenedSample;
\r
57 static int openSampleCount;
\r
58 static float rootBegin, rootEnd;
\r
61 class IProfilerOutputHandler
\r
64 virtual void BeginOutput(float tTotal)=0;
\r
65 virtual void Sample(float fMin, float fAvg, float fMax, float tAvg, int callCount, std::string name, int parentCount)=0;
\r
66 virtual void EndOutput()=0;
\r
70 #define PROFILE(name) CProfileSample _profile_sample(name);
\r
72 #define PROFILE(name)
\r