📄 profile.c
字号:
// OutputDebugString(pszBuffer);
_ftprintf(pFile, pszBuffer);
_ftprintf(pFile, TEXT("\n"));
}
/******************************************************************
* Profile processing and printout
*******************************************************************/
IMG_VOID PROFILE_PROCESS()
{
IMG_UINT32 i;
TCHAR sBuffer[MAX_PATH];
TCHAR sNameBuffer[MAX_PATH];
TCHAR sSpaces[MAX_PATH];
D3DM_FUNCTION_PROFILE *psFunc;
LARGE_INTEGER TickFreq;
__int64 i64TotalDriverTime;
/* Open profile file */
pFile = _tfopen(TEXT("release\\Z-D3DMProfile.txt"),TEXT("w+"));
/* Stop driver timer */
sDriverProfile.i64DriverStop = GetTicks();
i64TotalDriverTime = sDriverProfile.i64DriverStop - sDriverProfile.i64DriverStart;
/* Get frequency of timer */
QueryPerformanceFrequency(&TickFreq);
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
OUTPUT_DEBUG_STRING(TEXT("************** D3DM Driver Profile **************"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
/* D3DM DP ops */
OUTPUT_DEBUG_STRING(TEXT("************** DrawPrimitive Operations **************"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
OUTPUT_DEBUG_STRING(TEXT("* Name * Calls * Avg *Percent*"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
for(i=0; i < MAX_DP_OP_COUNT; i++)
{
DP_OP_NAME *psOpName = DPOpNames;
IMG_UINT32 ui32NameLength;
IMG_FLOAT fAvgCall, fPercentofDriverTime;
if(sDriverProfile.sDPOperations[i].ui32Calls == 0) continue;
/* Zero buffers */
ZeroMemory(sBuffer, MAX_PATH);
_tcscpy(sSpaces, TEXT(" "));
psFunc = &sDriverProfile.sDPOperations[i];
/* Get op name and convert*/
while(psOpName->ui32OP != i) psOpName++;
AsTString(psOpName->pszName, sNameBuffer);
/* Sort out space buffer length */
ui32NameLength = strlen(psOpName->pszName);
sSpaces[SPACES_FOR_NAME - ui32NameLength] = 0;
fAvgCall = (((IMG_FLOAT) psFunc->i64TotalCallTime / (IMG_FLOAT) psFunc->ui32Calls) / (IMG_FLOAT) TickFreq.QuadPart);
fPercentofDriverTime = (IMG_FLOAT) psFunc->i64TotalCallTime / ((IMG_FLOAT) i64TotalDriverTime / 100.0f);
_stprintf(sBuffer,
TEXT("*%s%s* %.5d * %.3f *%s%.3f *"),
sNameBuffer,
sSpaces,
psFunc->ui32Calls,
fAvgCall,
(fPercentofDriverTime >= 10.0f) ? TEXT(""): TEXT(" "),
fPercentofDriverTime);
OUTPUT_DEBUG_STRING(sBuffer);
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
}
/* Render States */
OUTPUT_DEBUG_STRING(TEXT("************** Render State Functions **************"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
OUTPUT_DEBUG_STRING(TEXT("* Name * Calls * Avg *Percent*"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
for(i=0; i < MAX_RENDERSTATE_COUNT; i++)
{
IMG_UINT32 ui32NameLength;
IMG_FLOAT fAvgCall, fPercentofDriverTime;
if(sDriverProfile.sRenderStates[i].ui32Calls == 0) continue;
/* Zero buffers */
ZeroMemory(sBuffer, MAX_PATH);
_tcscpy(sSpaces, TEXT(" "));
psFunc = &sDriverProfile.sRenderStates[i];
/* Get op name and convert*/
AsTString(RenderStateNames[i], sNameBuffer);
/* Sort out space buffer length */
ui32NameLength = strlen(RenderStateNames[i]);
sSpaces[SPACES_FOR_NAME - ui32NameLength] = 0;
fAvgCall = (((IMG_FLOAT) psFunc->i64TotalCallTime / (IMG_FLOAT) psFunc->ui32Calls) / (IMG_FLOAT) TickFreq.QuadPart);
fPercentofDriverTime = (IMG_FLOAT) psFunc->i64TotalCallTime / ((IMG_FLOAT) i64TotalDriverTime / 100.0f);
_stprintf(sBuffer,
TEXT("*%s%s* %.5d * %.3f *%s%.3f *"),
sNameBuffer,
sSpaces,
psFunc->ui32Calls,
fAvgCall,
(fPercentofDriverTime >= 10.0f) ? TEXT(""): TEXT(" "),
fPercentofDriverTime);
OUTPUT_DEBUG_STRING(sBuffer);
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
}
/* Texture stage States */
OUTPUT_DEBUG_STRING(TEXT("************** Texture State Functions **************"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
OUTPUT_DEBUG_STRING(TEXT("* Name * Calls * Avg *Percent*"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
for(i=0; i < MAX_TEXTURESTATE_COUNT; i++)
{
IMG_UINT32 ui32NameLength;
IMG_FLOAT fAvgCall, fPercentofDriverTime;
if(sDriverProfile.sTextureStageState[i].ui32Calls == 0) continue;
/* Zero buffers */
ZeroMemory(sBuffer, MAX_PATH);
_tcscpy(sSpaces, TEXT(" "));
psFunc = &sDriverProfile.sTextureStageState[i];
/* Get op name and convert*/
AsTString(TextureStageStateNames[i], sNameBuffer);
/* Sort out space buffer length */
ui32NameLength = strlen(TextureStageStateNames[i]);
sSpaces[SPACES_FOR_NAME - ui32NameLength] = 0;
fAvgCall = (((IMG_FLOAT) psFunc->i64TotalCallTime / (IMG_FLOAT) psFunc->ui32Calls) / (IMG_FLOAT) TickFreq.QuadPart);
fPercentofDriverTime = (IMG_FLOAT) psFunc->i64TotalCallTime / ((IMG_FLOAT) i64TotalDriverTime / 100.0f);
_stprintf(sBuffer,
TEXT("*%s%s* %.5d * %.3f *%s%.3f *"),
sNameBuffer,
sSpaces,
psFunc->ui32Calls,
fAvgCall,
(fPercentofDriverTime >= 10.0f) ? TEXT(""): TEXT(" "),
fPercentofDriverTime);
OUTPUT_DEBUG_STRING(sBuffer);
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
}
/* Primitive Functions */
OUTPUT_DEBUG_STRING(TEXT("************** Primitive Functions **************"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
OUTPUT_DEBUG_STRING(TEXT("* Name * Calls * Avg *Percent*"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
for(i=0; i < MAX_PRIM_FUNC_COUNT; i++)
{
IMG_UINT32 ui32NameLength;
IMG_FLOAT fAvgCall, fPercentofDriverTime;
if(sDriverProfile.sPrimitiveFuncs[i].ui32Calls == 0) continue;
/* Zero buffers */
ZeroMemory(sBuffer, MAX_PATH);
_tcscpy(sSpaces, TEXT(" "));
psFunc = &sDriverProfile.sPrimitiveFuncs[i];
/* Get op name and convert*/
AsTString(PrimitiveFuncNames[i], sNameBuffer);
/* Sort out space buffer length */
ui32NameLength = strlen(PrimitiveFuncNames[i]);
sSpaces[SPACES_FOR_NAME - ui32NameLength] = 0;
fAvgCall = (((IMG_FLOAT) psFunc->i64TotalCallTime / (IMG_FLOAT) psFunc->ui32Calls) / (IMG_FLOAT) TickFreq.QuadPart);
fPercentofDriverTime = (IMG_FLOAT) psFunc->i64TotalCallTime / ((IMG_FLOAT) i64TotalDriverTime / 100.0f);
_stprintf(sBuffer,
TEXT("*%s%s* %.5d * %.3f *%s%.3f *"),
sNameBuffer,
sSpaces,
psFunc->ui32Calls,
fAvgCall,
(fPercentofDriverTime >= 10.0f) ? TEXT(""): TEXT(" "),
fPercentofDriverTime);
OUTPUT_DEBUG_STRING(sBuffer);
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
}
/* Other Functions Functions */
OUTPUT_DEBUG_STRING(TEXT("************** General Functions **************"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
OUTPUT_DEBUG_STRING(TEXT("* Name * Calls * Avg *Percent*"));
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
for(i=0; i < MAX_OTHER_FUNC_COUNT; i++)
{
IMG_UINT32 ui32NameLength;
IMG_FLOAT fAvgCall, fPercentofDriverTime;
if(sDriverProfile.sOtherFuncs[i].ui32Calls == 0) continue;
/* Zero buffers */
ZeroMemory(sBuffer, MAX_PATH);
_tcscpy(sSpaces, TEXT(" "));
psFunc = &sDriverProfile.sOtherFuncs[i];
/* Get op name and convert*/
AsTString(FunctionNames[i], sNameBuffer);
/* Sort out space buffer length */
ui32NameLength = strlen(FunctionNames[i]);
sSpaces[SPACES_FOR_NAME - ui32NameLength] = 0;
fAvgCall = (((IMG_FLOAT) psFunc->i64TotalCallTime / (IMG_FLOAT) psFunc->ui32Calls) / (IMG_FLOAT) TickFreq.QuadPart);
fPercentofDriverTime = (IMG_FLOAT) psFunc->i64TotalCallTime / ((IMG_FLOAT) i64TotalDriverTime / 100.0f);
_stprintf(sBuffer,
TEXT("*%s%s* %.5d * %.3f *%s%.3f *"),
sNameBuffer,
sSpaces,
psFunc->ui32Calls,
fAvgCall,
(fPercentofDriverTime >= 10.0f) ? TEXT(""): TEXT(" "),
fPercentofDriverTime);
OUTPUT_DEBUG_STRING(sBuffer);
OUTPUT_DEBUG_STRING(TEXT("******************************************************************"));
}
/* Close file */
fclose(pFile);
}
#endif /* ! ENABLE_D3DM_PROFILING */
/*****************************************************************************
End of file (profile.c)
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -