Files
Sun1602/Client/GameClient/SunProfiler.cpp
T
2022-10-26 12:25:11 +08:00

161 lines
2.8 KiB
C++

// Profiler.cpp: implementation of the CSunProfiler class.
//
//////////////////////////////////////////////////////////////////////
#include "SunClientPrecompiledHeader.h"
#include "SunProfileSample.h"
#include "SunProfiler.h"
LONGLONG g_llFrequency;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSunProfiler::CSunProfiler()
{
Clear();
}
CSunProfiler::~CSunProfiler()
{
}
void CSunProfiler::Clear( void)
{
m_bFirstTime = TRUE;
m_iNumSample = 0;
m_llTotalTimeSum = 0;
m_iCurDepth = 0;
}
void CSunProfiler::Init( void)
{
LARGE_INTEGER Freq;
QueryPerformanceFrequency(&Freq);
g_llFrequency = Freq.QuadPart;
Reset();
}
void CSunProfiler::Reset( void)
{
Clear();
LARGE_INTEGER Tick;
QueryPerformanceCounter(&Tick);
for ( int i = 0; i < MAX_SUN_PROFILE_SAMPLE; ++i)
{
m_Sample[i].Clear();
}
m_llTotalTimeStart = Tick.QuadPart;
}
void CSunProfiler::Begin( TCHAR *lpszName)
{
if (GENERALPARAM->GetSpecialMode() >= eSPECIAL_MODE_STEP2)
{
if ( m_bFirstTime)
{
return;
}
LARGE_INTEGER Tick;
QueryPerformanceCounter(&Tick);
LONGLONG llTick = Tick.QuadPart;
for ( int i = 0; i < m_iNumSample; ++i)
{
if ( m_Sample[i].CheckName( lpszName))
{
m_Sample[i].Begin( llTick ,m_iCurDepth);
m_iCurDepth++;
return;
}
}
// »õ·Î Ãß°¡
if ( m_iNumSample < MAX_SUN_PROFILE_SAMPLE)
{
m_Sample[m_iNumSample].Init( lpszName);
m_Sample[m_iNumSample++].Begin( llTick,m_iCurDepth);
m_iCurDepth++;
}
}
}
void CSunProfiler::End( TCHAR *lpszName)
{
if (GENERALPARAM->GetSpecialMode() >= eSPECIAL_MODE_STEP2)
{
if ( m_bFirstTime)
{
return;
}
LARGE_INTEGER Tick;
QueryPerformanceCounter(&Tick);
for ( int i = 0; i < m_iNumSample; ++i)
{
if ( m_Sample[i].CheckName( lpszName))
{
m_Sample[i].End( Tick.QuadPart);
m_iCurDepth--;
return;
}
}
}
}
void CSunProfiler::GenerateResult( void)
{
LARGE_INTEGER Tick;
QueryPerformanceCounter(&Tick);
m_llTotalTimeEnd = Tick.QuadPart;
LONGLONG llTotalTime = m_llTotalTimeEnd - m_llTotalTimeStart;
if ( !m_bFirstTime)
{
m_llTotalTimeSum += llTotalTime;
for ( int i = 0; i < m_iNumSample; ++i)
{
m_Sample[i].GenerateResult( llTotalTime, m_llTotalTimeSum);
}
}
m_bFirstTime = FALSE;
QueryPerformanceCounter(&Tick);
m_llTotalTimeStart = Tick.QuadPart;
}
void CSunProfiler::GetResultText( int iSample, TCHAR *lpszText)
{
assert( iSample < m_iNumSample);
TCHAR lpszTemp[1024];
m_Sample[iSample].GetResultText( lpszTemp);
_stprintf( lpszText, _T("%s - %s"), m_Sample[iSample].GetName(), lpszTemp);
}
int CSunProfiler::GetDepth( int iSample)
{
assert( iSample < m_iNumSample);
return m_Sample[iSample].GetDepth();
}