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.
140 lines
3.1 KiB
140 lines
3.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef ENGINESTATS_H |
|
#define ENGINESTATS_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "utlvector.h" |
|
#include "sysexternal.h" |
|
#include "filesystem.h" // FileHandle_t define |
|
|
|
enum EngineTimedStatId_t |
|
{ |
|
ENGINE_STATS_FRAME_TIME, |
|
ENGINE_STATS_FPS, // this is calculated at EndFrame! |
|
ENGINE_STATS_FPS_VARIABILITY, |
|
ENGINE_STATS_NUM_TIMED_STATS, |
|
}; |
|
class CEngineStats |
|
{ |
|
public: |
|
CEngineStats(); |
|
|
|
// |
|
// stats input |
|
// |
|
|
|
void BeginRun( void ); |
|
|
|
// Advances the next frame for the stats... |
|
void NextFrame(); |
|
|
|
void BeginFrame( void ); |
|
|
|
// Timed stat gathering |
|
void BeginTimedStat( EngineTimedStatId_t stat ); |
|
void EndTimedStat( EngineTimedStatId_t stat ); |
|
|
|
// Adds to a timed stat... |
|
void AddToTimedStat( EngineTimedStatId_t stat, float time ); |
|
|
|
// Slams a timed stat |
|
void SetTimedStat( EngineTimedStatId_t stat, float time ); |
|
|
|
// returns timed stats |
|
double TimedStatInFrame( EngineTimedStatId_t stat ) const; |
|
double TotalTimedStat( EngineTimedStatId_t stat ) const; |
|
|
|
void BeginDrawWorld( void ); |
|
void EndDrawWorld( void ); |
|
|
|
void EndFrame( void ); |
|
void EndRun( void ); |
|
|
|
void PauseStats( bool bPaused ); |
|
|
|
// |
|
// stats output |
|
// call these outside of a BeginFrame/EndFrame pair |
|
// |
|
|
|
double GetRunTime( void ); |
|
|
|
void SetFrameTime( float flFrameTime ) { m_flFrameTime = flFrameTime; } |
|
void SetFPSVariability( float flFPSVariability ) { m_flFPSVariability = flFPSVariability; } |
|
|
|
int FrameCount() const { return m_totalNumFrames; } |
|
|
|
private: |
|
void ComputeFrameTimeStats( void ); |
|
|
|
// How many frames worth of data have we logged? |
|
int m_totalNumFrames; |
|
|
|
// run timing data |
|
double m_runStartTime; |
|
double m_runEndTime; |
|
|
|
struct StatGroupInfo_t |
|
{ |
|
double m_StatFrameTime[ENGINE_STATS_NUM_TIMED_STATS]; |
|
double m_StatStartTime[ENGINE_STATS_NUM_TIMED_STATS]; |
|
double m_TotalStatTime[ENGINE_STATS_NUM_TIMED_STATS]; |
|
}; |
|
StatGroupInfo_t m_StatGroup; |
|
bool m_InFrame; |
|
|
|
bool m_bPaused; |
|
bool m_bInRun; |
|
|
|
float m_flFrameTime; |
|
float m_flFPSVariability; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Inlined stat gathering methods |
|
//----------------------------------------------------------------------------- |
|
inline void CEngineStats::BeginTimedStat( EngineTimedStatId_t stat ) |
|
{ |
|
if (m_InFrame) |
|
{ |
|
m_StatGroup.m_StatStartTime[stat] = |
|
Sys_FloatTime(); |
|
} |
|
} |
|
|
|
inline void CEngineStats::EndTimedStat( EngineTimedStatId_t stat ) |
|
{ |
|
if (m_InFrame) |
|
{ |
|
float dt = (float)Sys_FloatTime() - (float)(m_StatGroup.m_StatStartTime[stat]); |
|
m_StatGroup.m_StatFrameTime[stat] += dt; |
|
} |
|
} |
|
|
|
// Adds to a timed stat... |
|
inline void CEngineStats::AddToTimedStat( EngineTimedStatId_t stat, float dt ) |
|
{ |
|
if (m_InFrame) |
|
{ |
|
m_StatGroup.m_StatFrameTime[stat] += dt; |
|
} |
|
} |
|
|
|
// Slams a timed stat |
|
inline void CEngineStats::SetTimedStat( EngineTimedStatId_t stat, float time ) |
|
{ |
|
m_StatGroup.m_StatFrameTime[stat] = time; |
|
} |
|
extern CEngineStats g_EngineStats; |
|
|
|
#endif // ENGINESTATS_H
|
|
|