You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.4 KiB
127 lines
3.4 KiB
//========= 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
|