diff options
Diffstat (limited to 'mp/src/public/measure_section.h')
| -rw-r--r-- | mp/src/public/measure_section.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/mp/src/public/measure_section.h b/mp/src/public/measure_section.h new file mode 100644 index 00000000..c51d0b71 --- /dev/null +++ b/mp/src/public/measure_section.h @@ -0,0 +1,127 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $Workfile: $
+// $Date: $
+// $NoKeywords: $
+//=============================================================================//
+#if !defined( MEASURE_SECTION_H )
+#define MEASURE_SECTION_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "tier0/fasttimer.h"
+#include "convar.h"
+
+
+// This is the macro to use in your code to measure until the code goes
+// out of scope
+#if defined( _DEBUG ) || defined( FORCE_MEASURE )
+#define MEASURECODE( description ) \
+ static CMeasureSection _xxx_ms( description ); \
+ CMeasureSectionInstance _xxx_ms_inst( &_xxx_ms );
+#else
+#define MEASURECODE( description )
+#endif
+
+
+// ------------------------------------------------------------------------------------ //
+// These things must exist in the executable for the CMeasureSection code to work.
+// ------------------------------------------------------------------------------------ //
+float GetRealTime(); // Get the clock's time.
+
+extern ConVar game_speeds;
+extern ConVar measure_resort;
+// ------------------------------------------------------------------------------------ //
+
+
+
+// Called once per frame to allow any necessary measurements to latch
+void ResetTimeMeasurements( void );
+
+//-----------------------------------------------------------------------------
+// Purpose: Accumulates time for the named section
+//-----------------------------------------------------------------------------
+class CMeasureSection
+{
+public:
+ // Allows for measuring named section
+ CMeasureSection( const char *name );
+ virtual ~CMeasureSection( void );
+
+
+ // Update max value hit
+ void UpdateMax( void );
+ // Reset totals
+ void Reset( void );
+ // Reset sortable totals
+ void SortReset( void );
+ // Get static name of section
+ const char *GetName( void );
+
+ // Get accumulated time
+ CCycleCount const& GetTotalTime( void );
+
+ CCycleCount const& GetTime();
+
+ CCycleCount const& GetMaxTime();
+
+ // Add in some time
+ void AddTime( CCycleCount const &rCount );
+
+ // Get next section in chain
+ CMeasureSection *GetNext( void );
+
+ // Get head of list of all sections
+ static CMeasureSection *GetList( void );
+ // Sort all sections by most time consuming
+ static void SortSections( void );
+
+public:
+ // Time when list should be sorted again
+ static double m_dNextResort;
+
+private:
+ // Accumulated time for section
+ CCycleCount m_dAccumulatedTime;
+
+ // Max time for section
+ CCycleCount m_dMaxTime;
+
+ // Elapsed time for section
+ CCycleCount m_dTotalTime;
+
+ // Name of section
+ const char *m_pszName;
+ // Next section in chain
+ CMeasureSection *m_pNext;
+ // Head of section list
+ static CMeasureSection *s_pSections;
+ // Quick total for doing sorts faster
+ static int s_nCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: On construction marks time and on destruction adds time to
+// parent CMeasureSection object
+//-----------------------------------------------------------------------------
+class CMeasureSectionInstance
+{
+public:
+ // Constructor: Points to object to accumulate time into
+ CMeasureSectionInstance( CMeasureSection *ms );
+ // Destructor: Latches accumulated time
+ virtual ~CMeasureSectionInstance( void );
+
+private:
+ // Time of construction
+ CFastTimer m_Timer;
+
+ // Where to place elapsed time
+ CMeasureSection *m_pMS;
+};
+
+#endif // MEASURE_SECTION_H
\ No newline at end of file |