122 lines
3.5 KiB
C++
122 lines
3.5 KiB
C++
//========= 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 "convar.h"
|
|
#include "tier0/fasttimer.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
|