mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-05 22:09:59 +03:00
1
This commit is contained in:
127
public/measure_section.h
Normal file
127
public/measure_section.h
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user