?? 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 + -