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

📄 profile.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//	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 + -