📄 profile.h
字号:
/***************************************************************************************************
**
** profile.h
**
** Real-Time Hierarchical Profiling for Game Programming Gems 3
**
** by Greg Hjelstrom & Byon Garrabrant
**
***************************************************************************************************/
/*** A node in the Profile Hierarchy Tree*/class CProfileNode {public: CProfileNode( const char * name, CProfileNode * parent ); ~CProfileNode( void ); CProfileNode * Get_Sub_Node( const char * name ); CProfileNode * Get_Parent( void ) { return Parent; } CProfileNode * Get_Sibling( void ) { return Sibling; } CProfileNode * Get_Child( void ) { return Child; } void Reset( void ); void Call( void ); bool Return( void ); const char * Get_Name( void ) { return Name; } int Get_Total_Calls( void ) { return TotalCalls; } float Get_Total_Time( void ) { return TotalTime; }protected: const char * Name; int TotalCalls; float TotalTime; __int64 StartTime; int RecursionCounter; CProfileNode * Parent; CProfileNode * Child; CProfileNode * Sibling;};/*** An iterator to navigate through the tree*/class CProfileIterator{public: // Access all the children of the current parent void First(void); void Next(void); bool Is_Done(void); void Enter_Child( int index ); // Make the given child the new parent void Enter_Largest_Child( void ); // Make the largest child the new parent
bool Enter_Parent( void ); // Make the current parent's parent the new parent
// Returns false if there is no parent // Access the current child const char * Get_Current_Name( void ) { return CurrentChild->Get_Name(); } int Get_Current_Total_Calls( void ) { return CurrentChild->Get_Total_Calls(); } float Get_Current_Total_Time( void ) { return CurrentChild->Get_Total_Time(); } // Access the current parent const char * Get_Current_Parent_Name( void ) { return CurrentParent->Get_Name(); } int Get_Current_Parent_Total_Calls( void ) { return CurrentParent->Get_Total_Calls(); } float Get_Current_Parent_Total_Time( void ) { return CurrentParent->Get_Total_Time(); }
protected:
CProfileNode * CurrentParent; CProfileNode * CurrentChild; CProfileIterator( CProfileNode * start ); friend class CProfileManager;};/*** The Manager for the Profile system*/class CProfileManager {public: static void Start_Profile( const char * name ); static void Stop_Profile( void ); static void Reset( void ); static void Increment_Frame_Counter( void ); static int Get_Frame_Count_Since_Reset( void ) { return FrameCounter; } static float Get_Time_Since_Reset( void ); static CProfileIterator * Get_Iterator( void ) { return new CProfileIterator( &Root ); } static void Release_Iterator( CProfileIterator * iterator ) { delete iterator; } static void Write( void );
static void Search( CProfileIterator iter);
private: static CProfileNode Root; static CProfileNode * CurrentNode; static int FrameCounter; static __int64 ResetTime;};/*** ProfileSampleClass is a simple way to profile a function's scope** Use the PROFILE macro at the start of scope to time*/class CProfileSample {public: CProfileSample( const char * name ) { CProfileManager::Start_Profile( name ); } ~CProfileSample( void ) { CProfileManager::Stop_Profile(); }};
// #ifdef DEBUG
#define PROFILE_ME 1
// #endif // DEBUG
#ifdef PROFILE_ME
#define PROFILE( name ) CProfileSample __profile( name )#else#define PROFILE( name )#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -