📄 profiler.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 + -