⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 profile.h

📁 A tutorial and open source code for finding edges and corners based on the filters used in primary v
💻 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 + -