00001
00032 #ifndef LL_LLFASTTIMER_H
00033 #define LL_LLFASTTIMER_H
00034
00035 #define FAST_TIMER_ON 1
00036
00037 U64 get_cpu_clock_count();
00038
00039 class LLFastTimer
00040 {
00041 public:
00042 enum EFastTimerType
00043 {
00044
00045 FTM_FRAME,
00046 FTM_UPDATE,
00047 FTM_RENDER,
00048 FTM_SWAP,
00049 FTM_CLIENT_COPY,
00050 FTM_IDLE,
00051 FTM_SLEEP,
00052
00053
00054 FTM_PUMP,
00055 FTM_CURL,
00056
00057
00058 FTM_UPDATE_ANIMATION,
00059 FTM_UPDATE_TERRAIN,
00060 FTM_UPDATE_PRIMITIVES,
00061 FTM_UPDATE_PARTICLES,
00062 FTM_SIMULATE_PARTICLES,
00063 FTM_UPDATE_SKY,
00064 FTM_UPDATE_TEXTURES,
00065 FTM_UPDATE_WLPARAM,
00066 FTM_UPDATE_WATER,
00067 FTM_UPDATE_CLOUDS,
00068 FTM_UPDATE_GRASS,
00069 FTM_UPDATE_TREE,
00070 FTM_UPDATE_AVATAR,
00071
00072
00073 FTM_RENDER_GEOMETRY,
00074 FTM_RENDER_TERRAIN,
00075 FTM_RENDER_SIMPLE,
00076 FTM_RENDER_FULLBRIGHT,
00077 FTM_RENDER_GLOW,
00078 FTM_RENDER_GRASS,
00079 FTM_RENDER_INVISIBLE,
00080 FTM_RENDER_SHINY,
00081 FTM_RENDER_BUMP,
00082 FTM_RENDER_TREES,
00083 FTM_RENDER_CHARACTERS,
00084 FTM_RENDER_OCCLUSION,
00085 FTM_RENDER_ALPHA,
00086 FTM_RENDER_CLOUDS,
00087 FTM_RENDER_HUD,
00088 FTM_RENDER_PARTICLES,
00089 FTM_RENDER_WATER,
00090 FTM_RENDER_WL_SKY,
00091 FTM_RENDER_FAKE_VBO_UPDATE,
00092 FTM_RENDER_TIMER,
00093 FTM_RENDER_UI,
00094 FTM_RENDER_BLOOM,
00095 FTM_RENDER_BLOOM_FBO,
00096 FTM_RENDER_FONTS,
00097
00098
00099 FTM_MESSAGES,
00100 FTM_MOUSEHANDLER,
00101 FTM_KEYHANDLER,
00102 FTM_REBUILD,
00103 FTM_STATESORT,
00104 FTM_STATESORT_DRAWABLE,
00105 FTM_STATESORT_POSTSORT,
00106 FTM_REBUILD_VBO,
00107 FTM_REBUILD_VOLUME_VB,
00108 FTM_REBUILD_BRIDGE_VB,
00109 FTM_REBUILD_HUD_VB,
00110 FTM_REBUILD_TERRAIN_VB,
00111 FTM_REBUILD_WATER_VB,
00112 FTM_REBUILD_TREE_VB,
00113 FTM_REBUILD_PARTICLE_VB,
00114 FTM_REBUILD_CLOUD_VB,
00115 FTM_REBUILD_GRASS_VB,
00116 FTM_REBUILD_NONE_VB,
00117 FTM_REBUILD_OCCLUSION_VB,
00118 FTM_POOLS,
00119 FTM_POOLRENDER,
00120 FTM_IDLE_CB,
00121 FTM_WORLD_UPDATE,
00122 FTM_UPDATE_MOVE,
00123 FTM_OCTREE_BALANCE,
00124 FTM_UPDATE_LIGHTS,
00125 FTM_CULL,
00126 FTM_CULL_REBOUND,
00127 FTM_FRUSTUM_CULL,
00128 FTM_GEO_UPDATE,
00129 FTM_GEO_RESERVE,
00130 FTM_GEO_LIGHT,
00131 FTM_GEO_SHADOW,
00132 FTM_GEO_SKY,
00133 FTM_GEN_VOLUME,
00134 FTM_GEN_TRIANGLES,
00135 FTM_GEN_FLEX,
00136 FTM_AUDIO_UPDATE,
00137 FTM_RESET_DRAWORDER,
00138 FTM_OBJECTLIST_UPDATE,
00139 FTM_AVATAR_UPDATE,
00140 FTM_JOINT_UPDATE,
00141 FTM_ATTACHMENT_UPDATE,
00142 FTM_LOD_UPDATE,
00143 FTM_REGION_UPDATE,
00144 FTM_CLEANUP,
00145 FTM_NETWORK,
00146 FTM_IDLE_NETWORK,
00147 FTM_CREATE_OBJECT,
00148 FTM_LOAD_AVATAR,
00149 FTM_PROCESS_MESSAGES,
00150 FTM_PROCESS_OBJECTS,
00151 FTM_PROCESS_IMAGES,
00152 FTM_IMAGE_UPDATE,
00153 FTM_IMAGE_CREATE,
00154 FTM_IMAGE_DECODE,
00155 FTM_IMAGE_MARK_DIRTY,
00156 FTM_PIPELINE,
00157 FTM_VFILE_WAIT,
00158 FTM_FLEXIBLE_UPDATE,
00159 FTM_OCCLUSION_READBACK,
00160 FTM_HUD_EFFECTS,
00161 FTM_HUD_UPDATE,
00162 FTM_INVENTORY,
00163 FTM_AUTO_SELECT,
00164 FTM_ARRANGE,
00165 FTM_FILTER,
00166 FTM_REFRESH,
00167 FTM_SORT,
00168
00169
00170 FTM_TEMP1,
00171 FTM_TEMP2,
00172 FTM_TEMP3,
00173 FTM_TEMP4,
00174 FTM_TEMP5,
00175 FTM_TEMP6,
00176 FTM_TEMP7,
00177 FTM_TEMP8,
00178
00179 FTM_OTHER,
00180
00181 FTM_NUM_TYPES
00182 };
00183 enum { FTM_HISTORY_NUM = 60 };
00184 enum { FTM_MAX_DEPTH = 64 };
00185
00186 public:
00187 LLFastTimer(EFastTimerType type)
00188 {
00189 #if FAST_TIMER_ON
00190 mType = type;
00191
00192
00193
00194
00195
00196 U64 cpu_clocks = get_cpu_clock_count();
00197
00198 sStart[sCurDepth] = cpu_clocks;
00199 sCurDepth++;
00200 #endif
00201 };
00202 ~LLFastTimer()
00203 {
00204 #if FAST_TIMER_ON
00205 U64 end,delta;
00206 int i;
00207
00208
00209
00210
00211 end = get_cpu_clock_count();
00212
00213 sCurDepth--;
00214 delta = end - sStart[sCurDepth];
00215 sCounter[mType] += delta;
00216 sCalls[mType]++;
00217
00218 for (i=0; i<sCurDepth; i++)
00219 sStart[i] += delta;
00220 #endif
00221 }
00222
00223 static void reset();
00224 static U64 countsPerSecond();
00225
00226 public:
00227 static int sCurDepth;
00228 static U64 sStart[FTM_MAX_DEPTH];
00229 static U64 sCounter[FTM_NUM_TYPES];
00230 static U64 sCalls[FTM_NUM_TYPES];
00231 static U64 sCountAverage[FTM_NUM_TYPES];
00232 static U64 sCallAverage[FTM_NUM_TYPES];
00233 static U64 sCountHistory[FTM_HISTORY_NUM][FTM_NUM_TYPES];
00234 static U64 sCallHistory[FTM_HISTORY_NUM][FTM_NUM_TYPES];
00235 static S32 sCurFrameIndex;
00236 static S32 sLastFrameIndex;
00237 static int sPauseHistory;
00238 static int sResetHistory;
00239 static F64 sCPUClockFrequency;
00240
00241 private:
00242 EFastTimerType mType;
00243 };
00244
00245
00246 #endif // LL_LLFASTTIMER_H