📄 metrics.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 + -