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

📄 profiler.h

📁 国内著名网络游戏dragon的客户端登陆用完整源码 配套一起上传的服务端部分可开服 无说明文档
💻 H
字号:
// Profiler.h: interface for the CProfiler class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PROFILER_H__51BF228B_59F8_4DD4_9E18_4038900CD9DA__INCLUDED_)
#define AFX_PROFILER_H__51BF228B_59F8_4DD4_9E18_4038900CD9DA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/*
#pragma pack(push, 1)

typedef struct PROFILER
{
	char		szCounterName[32];
	//__int32		nCounterID:
	//char		*szCounterName;
	LARGE_INTEGER n64CounterStart;
	LARGE_INTEGER n64CounterEnd;
	int			nCounterGroup;
	PROFILER()
	{
		memset( (void*)(&szCounterName), 0, 32);
		n64CounterStart.QuadPart	=0;
		n64CounterEnd.QuadPart		=0;
		nCounterGroup				=-1;
	};

} ProFiler;

#pragma pack(pop,1)
*/
typedef struct PROFILE_TYPE
{
	bool	bParent;
	bool	bCurrent;
	bool	bMax;
	bool	bAvr;
	bool	bMin;
	bool	bRate;
} ProFileShowType;

class CProFile
{
public:
	CProFile();	
	~CProFile();

//function
	void StartCounter();
	void StopCounter();

	DWORD	GetCurrent(){ return m_n64CounterEnd.QuadPart-m_n64CounterStart.QuadPart; };
	DWORD	GetMaximum(){ return m_dwMaximum; };
	DWORD	GetAverage(){ return m_dwAverage; };
	DWORD	GetMinimum(){ return m_dwMinimum; };
	string	GetParentName()	{ return m_szParent; };

	void	SetParentName( string szName ) { m_szParent = szName;};
	void	SetMaxMinTime();		//泅犁 历厘等 蔼 吝俊 弥绊/弥历蔼阑 技泼秦霖促.

//variable
private:
	string	m_szParent;
	bool	m_IsStart;				//墨款磐啊 凯赴 惑怕俊辑 滴锅 凯府瘤 救配废茄促. 
	DWORD	m_dwCounter;			//墨款磐啊 割锅 龋免登菌绰啊? 
	DWORD	m_dwAccumulator;		//穿利 墨款磐

	DWORD	m_dwCurrent;
	DWORD	m_dwAverage;
	DWORD	m_dwMaximum;
	DWORD	m_dwMinimum;


//加档甫 困秦 官肺 蔼阑 持绰吧肺 茄促.
	LARGE_INTEGER m_n64CounterStart;
	LARGE_INTEGER m_n64CounterEnd;		
};

//test侩 涝聪促.

class CProFileMgr  
{
public:
enum FOR_PRO_FILE
{
	DEFAULT_COUNTER_NUM		=	10,
	CLOCK_LOOP				=	10,
	CLOCK_TIME				=	1000,

	SHOW_PROFILE_NAME		=	1<<0,
	GROUP_EFFECT_SHOW		=	1<<1,
};

public:
	
	typedef map< string, CProFile*>		MAP_PROFILE;
	typedef MAP_PROFILE::iterator	PROFILE_ITOR;
	typedef MAP_PROFILE::value_type	PAIR_PROFILE;

	typedef vector< MAP_PROFILE >		VECTOR_PROFILE;
	typedef VECTOR_PROFILE::iterator	VECTOR_PROFILE_ITOR;

public:
	CProFileMgr();
	CProFileMgr(const int nCounterNum);
	virtual ~CProFileMgr();
//implement
	void	Init();

	bool	AddCounter(string szParent, string szName);
	bool	AddCounter(const char* szParent, const char* szName);

	bool	DeleteCounter(string szName);	
	int		GetCounterID(int nCounterGroup, const char* szCounterName);	

	// Start and Stop a counter.
	void	StartCounter(string szName);
	void	StopCounter(string szName);	

	
	const char*	GetShowingBuffer(const char* szName);		//焊咯龙 拳搁滚欺甫 啊廉柯促.
	void	DrawCounter();				//墨款磐甫 拳搁俊 焊咯霖促.
	void	DrawCounter(ProFileShowType sType); 	

private:
	bool	Create(const int nCounterNum);
	void	Destory();

	DWORD	GetCpuClock();	// 乞闭 cpu努钒阑 拌魂窍扁 困秦辑 sleep(	CLOCK_TIME )甫 CLOCK_LOOP锅 倒赴 乞闭阑 拌魂茄促.
	DWORD	m_dwCpuClock;	// GetCpuClock肺 拌魂等 搬苞肺, sleep(CLOCK_TIME)阑 荐青且锭狼 cpu努钒荐

	DWORD	GetSpendTime( DWORD dwTime) {	return dwTime / m_dwCpuClock;};
	int		GetCount(){		return m_mProFile.size();};
	
	//show
	//void (*pGetProfileNamefun)(const char* szName);
	const char*	GetParentName(const char* szName) { return m_mProFile[szName]->GetParentName().c_str();};
	DWORD	GetCurrTime(const char* szName) { return m_mProFile[szName]->GetCurrent()/m_dwCpuClock; };
	DWORD	GetMaxTime(const char* szName) { return m_mProFile[szName]->GetMaximum()/m_dwCpuClock; };
	DWORD	GetAverTime(const char* szName) { return m_mProFile[szName]->GetAverage()/m_dwCpuClock; };
	DWORD	GetMinTime(const char* szName) { return m_mProFile[szName]->GetMinimum()/m_dwCpuClock; };
	float	GetRate(const char* szName) { return (float)m_mProFile[szName]->GetCurrent()/m_mProFile[ m_mProFile[szName]->GetParentName() ]->GetCurrent()*100;}; //弥利拳 鞘夸 string狼 吝汗阑 乔窍磊.

	bool	IsExist(const char* szName) const {	return (m_mProFile.end() != m_mProFile.find(szName));};

	MAP_PROFILE	m_mProFile;	
};

extern ProFileShowType g_ProFileType;
extern CProFileMgr g_ProFileMgr;
extern bool g_IsActiveProFiler;
#endif // !defined(AFX_PROFILER_H__51BF228B_59F8_4DD4_9E18_4038900CD9DA__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -