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

📄 metrics.h

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 H
字号:
/**************************************************************************
* Name         : metrics.h
* Author       : BCB
* Created      : 10/07/2003
*
* Copyright    : 2003 by Imagination Technologies Limited. All rights reserved.
*              : No part of this software, either material or conceptual 
*              : may be copied or distributed, transmitted, transcribed,
*              : stored in a retrieval system or translated into any 
*              : human or computer language in any form by any means,
*              : electronic, mechanical, manual or other-wise, or 
*              : disclosed to third parties without the express written
*              : permission of Imagination Technologies Limited, Unit 8, HomePark
*              : Industrial Estate, King's Langley, Hertfordshire,
*              : WD4 8LZ, U.K.
*
* Platform     : ANSI
*
* $Date: 2004/10/11 13:10:03 $ $Revision: 1.13.1.10 $
 * $Log: metrics.h $
**************************************************************************/
#ifndef _METRICS_
#define _METRICS_

#if defined (__cplusplus)
extern "C" {
#endif

IMG_UINT32 GLESTimeNow(GLESContext *gc);

#if defined(__SH4__)

/* timer control registers */
#define TST_REG   (*(volatile IMG_UINT8 *)(gc->pui32TimerRegister)) 					// timer start register

#define TCOR_0    (*(volatile IMG_UINT32 *)((IMG_UINT8 *)gc->pui32TimerRegister+4))	 	// timer constant register_0
#define TCNT_0    (*(volatile IMG_UINT32 *)((IMG_UINT8 *)gc->pui32TimerRegister+8))	 	// timer counter register_0
#define TCR_0     (*(volatile IMG_UINT16 *)((IMG_UINT8 *)gc->pui32TimerRegister+12))	// timer control register_0

#define TCOR_1    (*(volatile IMG_UINT32 *)((IMG_UINT8 *)gc->pui32TimerRegister+16))	// timer constant register_1
#define TCNT_1    (*(volatile IMG_UINT32 *)((IMG_UINT8 *)gc->pui32TimerRegister+20))	// timer counter register_1
#define TCR_1     (*(volatile IMG_UINT16 *)((IMG_UINT8 *)gc->pui32TimerRegister+24))	// timer control register_1

#define TCOR_2    (*(volatile IMG_UINT32 *)((IMG_UINT8 *)gc->pui32TimerRegister+28))	// timer constant register_2
#define TCNT_2    (*(volatile IMG_UINT32 *)((IMG_UINT8 *)gc->pui32TimerRegister+32))	// timer counter register_2
#define TCR_2     (*(volatile IMG_UINT16 *)((IMG_UINT8 *)gc->pui32TimerRegister+36))	// timer control register_2

#define TIMER_DIVISOR  4

#endif

#if defined (TIMING) || defined (DEBUG)

typedef struct 
{
	IMG_UINT32 ui32Start, ui32Stop, ui32Count, ui32Total, ui32Sum;
	IMG_FLOAT fStack;	   
} Temporal_Data;

#define GLES_TIMER_DUMMY							0

#define GLES_TIMER_PREPARE_TO_DRAW_TIME				1
#define GLES_TIMER_TOTAL_FRAME_TIME					2
#define GLES_TIMER_WAITING_FOR_3D_TIME				3
#define GLES_TIMER_TEXTURE_ALLOCATE_TIME			4
#define GLES_TIMER_TEXTURE_GHOST_LOAD_TIME			5
#define GLES_TIMER_TEXTURE_TRANSLATE_LOAD_TIME		6
#define GLES_TIMER_TEXTURE_READBACK_TIME			7 
#define GLES_TIMER_TRILIST_TIME						8
#define GLES_TIMER_TRISTRIP_TIME					9
#define GLES_TIMER_TRIFAN_TIME						10
#define GLES_TIMER_LINES_TIME						11
#define GLES_TIMER_LINESTRIP_TIME					12
#define GLES_TIMER_LINELOOP_TIME					13
#define GLES_TIMER_POINTLIST_TIME					14
#define GLES_TIMER_TOTAL_STATE_COUNT				15
#define GLES_TIMER_TOTAL_STATE_TIME					16
#define GLES_TIMER_VGP_CONSTANTS_COUNT				17
#define GLES_TIMER_VGP_CODE_COUNT					18
#define GLES_TIMER_VGP_SECTIONS_COUNT				19
#define GLES_TIMER_VALIDATE_TIME					20
#define GLES_TIMER_TEXIMAGE_TIME					21
#define GLES_TIMER_TEXSUBIMAGE_TIME					22
#define GLES_TIMER_COMPRESSTEXIMAGE_TIME			23
#define GLES_TIMER_COMPRESSTEXSUBIMAGE_TIME			24
#define GLES_TIMER_COPYTEXIMAGE_TIME				25
#define GLES_TIMER_COPYTEXSUBIMAGE_TIME				26
#define GLES_TIMER_READPIXELS_TIME					27
#define GLES_TIMER_TOTAL_SLAVEPORT_COPY_TIME		28
#define GLES_TIMER_TOTAL_SLAVEPORT_COPY_COUNT		29
#define GLES_TIMER_FLUSH_HW_TIME					30
#define GLES_TIMES_WAIT_FOR_ACQUIRE					31
#define GLES_TIMES_MATRIXMATHS						32
#define GLES_TIMES_SWAP_BUFFERS						33
#define GLES_TIMES_ACQUIRE_SLAVEPORT				34

/* entry point times */
#define GLES_TIMES_glActiveTexture					40
#define GLES_TIMES_glAlphaFunc						41
#define GLES_TIMES_glAlphaFuncx						42
#define GLES_TIMES_glBindTexture					43
#define GLES_TIMES_glBlendFunc						44
#define GLES_TIMES_glClear							45
#define GLES_TIMES_glClearColor						46
#define GLES_TIMES_glClearColorx					47
#define GLES_TIMES_glClearDepthf					48
#define GLES_TIMES_glClearDepthx 					49
#define GLES_TIMES_glClearStencil					50
#define GLES_TIMES_glClientActiveTexture			51
#define GLES_TIMES_glColor4f						52
#define GLES_TIMES_glColor4x						53
#define GLES_TIMES_glColorMask 						54
#define GLES_TIMES_glColorPointer 					55
#define GLES_TIMES_glCompressedTexImage2D 			56
#define GLES_TIMES_glCompressedTexSubImage2D 		57
#define GLES_TIMES_glCopyTexImage2D 				58
#define GLES_TIMES_glCopyTexSubImage2D 				59
#define GLES_TIMES_glCullFace 						60
#define GLES_TIMES_glDeleteTextures 				61
#define GLES_TIMES_glDepthFunc 						62
#define GLES_TIMES_glDepthMask 						63
#define GLES_TIMES_glDepthRangef 					64
#define GLES_TIMES_glDepthRangex 					65
#define GLES_TIMES_glDisable 						66
#define GLES_TIMES_glDisableClientState 			67
#define GLES_TIMES_glDrawArrays 					68
#define GLES_TIMES_glDrawElements 					69
#define GLES_TIMES_glEnable 						70
#define GLES_TIMES_glEnableClientState 				71
#define GLES_TIMES_glFinish 						72
#define GLES_TIMES_glFlush 							73
#define GLES_TIMES_glFogf 							74
#define GLES_TIMES_glFogfv 							75
#define GLES_TIMES_glFogx 							76
#define GLES_TIMES_glFogxv 							77
#define GLES_TIMES_glFrontFace 						78
#define GLES_TIMES_glFrustumf 						79
#define GLES_TIMES_glFrustumx 						80
#define GLES_TIMES_glGenTextures 					81
#define GLES_TIMES_glGetError						82
#define GLES_TIMES_glGetIntegerv 					83
#define GLES_TIMES_glGetString 						84
#define GLES_TIMES_glHint 							85
#define GLES_TIMES_glLightModelf 					86
#define GLES_TIMES_glLightModelfv 					87
#define GLES_TIMES_glLightModelx 					88
#define GLES_TIMES_glLightModelxv 					89
#define GLES_TIMES_glLightf							90
#define GLES_TIMES_glLightfv 						91
#define GLES_TIMES_glLightx 						92
#define GLES_TIMES_glLightxv 						93
#define GLES_TIMES_glLineWidth 						94
#define GLES_TIMES_glLineWidthx 					95
#define GLES_TIMES_glLoadIdentity 					96
#define GLES_TIMES_glLoadMatrixf 					97
#define GLES_TIMES_glLoadMatrixx 					98
#define GLES_TIMES_glLogicOp						99
#define GLES_TIMES_glMaterialf 						100
#define GLES_TIMES_glMaterialfv						101
#define GLES_TIMES_glMaterialx 						102
#define GLES_TIMES_glMaterialxv						103
#define GLES_TIMES_glMatrixMode 					104
#define GLES_TIMES_glMultMatrixf 					105
#define GLES_TIMES_glMultMatrixx 					106
#define GLES_TIMES_glMultiTexCoord4f 				107
#define GLES_TIMES_glMultiTexCoord4x 				108
#define GLES_TIMES_glNormal3f 						109
#define GLES_TIMES_glNormal3x 						110
#define GLES_TIMES_glNormalPointer 					111
#define GLES_TIMES_glOrthof 						112
#define GLES_TIMES_glOrthox 						113
#define GLES_TIMES_glPixelStorei 					114
#define GLES_TIMES_glPointSize 						115
#define GLES_TIMES_glPointSizex 					116
#define GLES_TIMES_glPolygonOffset 					117
#define GLES_TIMES_glPolygonOffsetx 				118
#define GLES_TIMES_glPopMatrix 						119
#define GLES_TIMES_glPushMatrix 					120
#define GLES_TIMES_glReadPixels 					121
#define GLES_TIMES_glRotatef 						122
#define GLES_TIMES_glRotatex 						123
#define GLES_TIMES_glSampleCoverage 				124
#define GLES_TIMES_glSampleCoveragex 				125
#define GLES_TIMES_glScalef 						126
#define GLES_TIMES_glScalex							127
#define GLES_TIMES_glScissor 						128
#define GLES_TIMES_glShadeModel 					129
#define GLES_TIMES_glStencilFunc 					130
#define GLES_TIMES_glStencilMask 					131
#define GLES_TIMES_glStencilOp 						132
#define GLES_TIMES_glTexCoordPointer				133
#define GLES_TIMES_glTexEnvf 						134
#define GLES_TIMES_glTexEnvfv 						135
#define GLES_TIMES_glTexEnvx 						136
#define GLES_TIMES_glTexEnvxv 						137
#define GLES_TIMES_glTexImage2D 					138
#define GLES_TIMES_glTexParameterf					139
#define GLES_TIMES_glTexParameterx 					140
#define GLES_TIMES_glTexSubImage2D 					141
#define GLES_TIMES_glTranslatef 					142
#define GLES_TIMES_glTranslatex 					143
#define GLES_TIMES_glVertexPointer 					144
#define GLES_TIMES_glViewport 						145

#define GLES_TIMES_glClipPlanef						146
#define GLES_TIMES_glClipPlanex						147

#define GLES_TIMES_glVertexAttrib4f					148
#define GLES_TIMES_glVertexAttrib4x					149
#define GLES_TIMES_glVertexAttrib4Nx				150
#define GLES_TIMES_glProgramEnvParameter4f			151
#define GLES_TIMES_glProgramEnvParameter4fv			152
#define GLES_TIMES_glProgramLocalParameter4f		153
#define GLES_TIMES_glProgramLocalParameter4fv		154													
#define GLES_TIMES_glProgramEnvParameter4x			155
#define GLES_TIMES_glProgramEnvParameter4xv			156
#define GLES_TIMES_glProgramLocalParameter4x		157
#define GLES_TIMES_glProgramLocalParameter4xv		158													
#define GLES_TIMES_glVertexAttribPointer			159													
#define GLES_TIMES_glEnableVertexAttribArray		160													
#define GLES_TIMES_glDisableVertexAttribArray		161													
#define GLES_TIMES_glProgramString					162													
#define GLES_TIMES_glBindProgram					163													
#define GLES_TIMES_glDeletePrograms					164													
#define GLES_TIMES_glGenPrograms					165													

#define GLES_TIMES_glQueryMatrixx					166
#define GLES_TIMES_glColorMaterial					167

#define GLES_NUM_TIMERS								(GLES_TIMES_glColorMaterial + 1)

#define GLES_CALLS(X)				gc->asTimes[X].ui32Count

#define GLES_TIME_PER_CALL(X)		( (gc->asTimes[X].ui32Count) ? \
										(gc->asTimes[X].ui32Total*gc->fCPUSpeed/gc->asTimes[X].ui32Count) : 0.0f )
									
#define GLES_PIXELS_PER_CALL(X)		( (gc->asTimes[X].ui32Count) ? \
										(gc->asTimes[X].fStack*1000.0f/gc->asTimes[X].ui32Count) : 0.0f )

#define GLES_TIME_PER_FRAME(X)		( (gc->asTimes[GLES_TIMER_FLUSH_HW_TIME].ui32Count) ? \
										(gc->asTimes[X].ui32Total*gc->fCPUSpeed/gc->asTimes[GLES_TIMER_FLUSH_HW_TIME].ui32Count) : 0.0f )

#define GLES_PIXELS_PER_FRAME(X)		( (gc->asTimes[GLES_TIMER_FLUSH_HW_TIME].ui32Count) ? \
										(gc->asTimes[X].fStack*1000.0f/gc->asTimes[GLES_TIMER_FLUSH_HW_TIME].ui32Count) : 0.0f )

#define GLES_METRIC_PER_FRAME(X)		( (gc->asTimes[GLES_TIMER_FLUSH_HW_TIME].ui32Count) ? \
										(gc->asTimes[X].ui32Count/gc->asTimes[GLES_TIMER_FLUSH_HW_TIME].ui32Count) : 0.0f )

#define GLES_PARAM_PER_FRAME(X)		X/gc->asTimes[GLES_TIMER_FLUSH_HW_TIME].ui32Count

/* those 2 defines depend on SwapBuffers call rather than flush HW */
#define GLES_TIME_PER_FRAME_SB(X)		( (gc->asTimes[GLES_TIMES_SWAP_BUFFERS].ui32Count) ? \
										(gc->asTimes[X].ui32Total*gc->fCPUSpeed/gc->asTimes[GLES_TIMES_SWAP_BUFFERS].ui32Count) : 0.0f )

#define GLES_METRIC_PER_FRAME_SB(X)		( (gc->asTimes[GLES_TIMES_SWAP_BUFFERS].ui32Count) ? \
										(gc->asTimes[X].ui32Count/gc->asTimes[GLES_TIMES_SWAP_BUFFERS].ui32Count) : 0 )


#define GLES_CHECK_BETWEEN_START_END_FRAME	((gc->sAppHints.ui32ProfileStartFrame <= gc->asTimes[GLES_TIMES_SWAP_BUFFERS].ui32Count) && \
												(gc->sAppHints.ui32ProfileEndFrame >= gc->asTimes[GLES_TIMES_SWAP_BUFFERS].ui32Count))

IMG_VOID MetricsOutputTotals(GLESContext *gc);
IMG_VOID MetricsInitiateTiming(GLESContext *gc);
IMG_VOID GetFrameTime(GLESContext *gc);

#define GLES_TIME_RESET(X)      { gc->asTimes[X].ui32Count = 0;  gc->asTimes[X].ui32Total = 0; gc->asTimes[X].ui32Sum = 0; \
								 Times[X].ui32Start = 0;  gc->asTimes[X].ui32Stop = 0; gc->asTimes[X].fStack = 0.0f;}

#define GLES_TIME_START(X)      {\
								if((X == GLES_TIMES_SWAP_BUFFERS) || GLES_CHECK_BETWEEN_START_END_FRAME){ \
									gc->asTimes[X].ui32Count += 1; gc->asTimes[X].ui32Count |= 0x80000000L; \
									gc->asTimes[X].ui32Start = GLESTimeNow(gc); gc->asTimes[X].ui32Stop = 0; \
								} \
								}

#define GLES_TIME_SUSPEND(X)    { gc->asTimes[X].ui32Stop += GLESTimeNow(gc) - gc->asTimes[X].ui32Start; }

#define GLES_TIME_RESUME(X)     { gc->asTimes[X].ui32Start = GLESTimeNow(gc); }

#define GLES_TIME_STOP(X)       {\
								if((X == GLES_TIMES_SWAP_BUFFERS) || GLES_CHECK_BETWEEN_START_END_FRAME){ \
									gc->asTimes[X].ui32Stop += GLESTimeNow(gc) - gc->asTimes[X].ui32Start; \
									gc->asTimes[X].ui32Sum += gc->asTimes[X].ui32Stop; \
									gc->asTimes[X].ui32Total += gc->asTimes[X].ui32Stop; gc->asTimes[X].ui32Count &= 0x7FFFFFFFL; \
								} \
								}

#define GET_TICK_FREQ(X)       { X = GLESGetCPUFreq(gc); }

#define GLES_TIME_RESET_SUM(X)  { gc->asTimes[X].Sum = 0; }
								 
#define GLES_INC_COUNT(Y,X)  	 {gc->asTimes[Y].ui32Count += 1; \
	                                gc->asTimes[Y].ui32Stop  += (X);\
									gc->asTimes[Y].ui32Total += (X);}

#define GLES_INC_PERFRAME_COUNT(X) {if (gc->asTimes[X].fStack == 0.0f) { gc->asTimes[X].ui32Count++; gc->asTimes[X].fStack = 1.0f; } }

#define GLES_RESET_PERFRAME_COUNT(X) { gc->asTimes[X].fStack = 0.0f;} 

#define GLES_DECR_COUNT(Y)   	    {gc->asTimes[Y].ui32Count -= 1; }

#define GLES_INC_PIXEL_COUNT(X, Y)   { gc->asTimes[X].fStack  += 0.001f*(float)(Y);}
	                                

#else /* !(defined (TIMING) || defined (DEBUG)) */

#define NUM_TIMERS           /* */ 
#define GLES_TIME_RESET(X)    /* */
#define GLES_TIME_START(X)    /* */
#define GLES_TIME_SUSPEND(X)  /* */    
#define GLES_TIME_RESUME(X)   /* */  
#define GLES_TIME_STOP(X)     /* */  
#define GET_TICK_FREQ(X)     /* */   
#define GLES_RESET_FRAME()   /* */
#define GLES_INC_POLY_COUNT(X)  /* */
#define GLES_INC_COUNT(X,Y)  /* */
#define GLES_DECR_COUNT(X)  /* */
#define GLES_INC_PIXEL_COUNT(X, Y) /* */
#define GLES_INC_PERFRAME_COUNT(X) /* */
#define GLES_RESET_PERFRAME_COUNT(X) /* */

#define OutputTotalMetric()  /* */
#define OutputMetric(X)  /* */

#define MetricsOutputTotals(X)
#define MetricsInitiateTiming(X)
#define GetFrameTime(X)

#endif /* defined (TIMING) || defined (DEBUG) */

#if defined(__cplusplus)
}
#endif

#endif /* _METRICS_ */

/**************************************************************************
 End of file (metrics.h)
**************************************************************************/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -