llfasttimer.h

Go to the documentation of this file.
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                 // high level
00045                 FTM_FRAME,
00046                 FTM_UPDATE,
00047                 FTM_RENDER,
00048                 FTM_SWAP,
00049                 FTM_CLIENT_COPY,
00050                 FTM_IDLE,
00051                 FTM_SLEEP,
00052 
00053                 // common messaging components
00054                 FTM_PUMP,
00055                 FTM_CURL,
00056                 
00057                 // common simulation components
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                 // common render components
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                 // newview specific
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                 // Temp
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, // Special, used by display code
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                 // These don't get counted, because they use CPU clockticks
00193                 //gTimerBins[gCurTimerBin]++;
00194                 //LLTimer::sNumTimerCalls++;
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                 // These don't get counted, because they use CPU clockticks
00209                 //gTimerBins[gCurTimerBin]++;
00210                 //LLTimer::sNumTimerCalls++;
00211                 end = get_cpu_clock_count();
00212 
00213                 sCurDepth--;
00214                 delta = end - sStart[sCurDepth];
00215                 sCounter[mType] += delta;
00216                 sCalls[mType]++;
00217                 // Subtract delta from parents
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

Generated on Fri May 16 08:32:03 2008 for SecondLife by  doxygen 1.5.5