Counter Strike : Global Offensive Source Code
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.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "perfvisualbenchmark.h"
#include "keyvalues.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
#define VAR 0
#define ON 1
#define OFF 2
#define DETAILS 3
static CPerfVisualBenchmark s_PerfVisualBenchmark; // singleton
IGameSystem* PerfVisualBenchmark() { return &s_PerfVisualBenchmark; }
extern ConVar cl_mouseenable;
void usrCmd_Start() { s_PerfVisualBenchmark.Start(); }
void usrCmd_Abort() { s_PerfVisualBenchmark.Stop(); }
static ConCommand perfvisualbenchmark("perfvisualbenchmark", usrCmd_Start); static ConCommand perfvisualbenchmark_abort("perfvisualbenchmark_abort", usrCmd_Abort);
CPerfVisualBenchmark::CPerfVisualBenchmark() { }
CPerfVisualBenchmark::~CPerfVisualBenchmark() { }
bool CPerfVisualBenchmark::Init() { RunInfo_t runInfo; runInfo.m_pVarName = ""; runInfo.m_pOnVal = ""; runInfo.m_pOffVal = ""; runInfo.m_pDescription = "Default"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawdetailprops"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "detail props"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawworld"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "world geometry"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawentities"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "entities"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_3dsky"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "3D skybox"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawdecals"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "decals"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "mat_stub"; runInfo.m_pOnVal = "1"; runInfo.m_pOffVal = "0"; runInfo.m_pDescription = "material system and below"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "mat_viewportscale"; runInfo.m_pOnVal = ".2"; runInfo.m_pOffVal = "1.0"; runInfo.m_pDescription = "fillrate"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawstaticprops"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "fillrate"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawbrushmodels"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "brush models"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_renderoverlayfragment"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "overlays"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawdisp"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "displacements"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawviewmodel"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "viewmodel"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "cl_drawhud"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "hud"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawparticles"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "particles"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawsprites"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "sprites"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "mat_bumpmap"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "bump mapping"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME_RELOAD_MATERIALS; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "mat_specular"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "specularity"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME_RELOAD_MATERIALS; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "mat_drawwater"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "water"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_dynamic"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "dynamic lighting"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_shadows"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "shadows"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
runInfo.m_pVarName = "r_drawropes"; runInfo.m_pOnVal = "0"; runInfo.m_pOffVal = "1"; runInfo.m_pDescription = "ropes"; runInfo.m_flStabilizeTime = FPS_STABILIZE_TIME; m_RunInfo.AddToTail( runInfo );
m_bIsOn = false; //is this thing on?
return true; }
void CPerfVisualBenchmark::Start() { m_bSaveMouseEnable = cl_mouseenable.GetBool(); cl_mouseenable.SetValue( 0 );
m_iCurVar = 0; m_flTimer = gpGlobals->realtime + FPS_STABILIZE_TIME; m_bWaiting = true; m_bIsOn = true; // showtime!
engine->ClientCmd_Unrestricted("cancelselect"); // exit menu and console
// engine->ClientCmd_Unrestricted("wait");
// engine->ClientCmd_Unrestricted("setpause"); // pause the mofo
engine->ClientCmd_Unrestricted("host_timescale 0.0001"); // pause the mofo
}
void CPerfVisualBenchmark::Stop() { cl_mouseenable.SetValue( m_bSaveMouseEnable );
m_bIsOn = false; Print(); engine->ClientCmd_Unrestricted("host_timescale 0"); // pause the mofo
// engine->ClientCmd_Unrestricted("unpause"); // unpause the mofo
// engine->ClientCmd_Unrestricted("wait");
engine->ClientCmd_Unrestricted("toggleconsole"); }
void CPerfVisualBenchmark::PreRender( ) { if (!m_bIsOn) return;
// Wait for the timer
if ( m_flTimer > gpGlobals->realtime ) return;
if ( m_bWaiting ) { m_flTimer = gpGlobals->realtime + FPS_MEASURE_TIME; m_flStartMeasureTime = gpGlobals->realtime; m_nStartFrameCount = gpGlobals->framecount; m_bWaiting = false; return; }
// Ok, we were measuring, lets calculate the results
float flDenom = gpGlobals->realtime - m_flStartMeasureTime; if (flDenom == 0) { flDenom = 1.0f; }
// note the current avged fps;
float flAveFPS = (gpGlobals->framecount - m_nStartFrameCount) / flDenom; m_RunInfo[m_iCurVar].m_flFPS = flAveFPS;
m_flTimer = gpGlobals->realtime + FPS_STABILIZE_TIME; m_bWaiting = true;
char combuffer[255];
// Turn off any previous value
if ( m_RunInfo[m_iCurVar].m_pVarName ) { Q_snprintf(combuffer, sizeof(combuffer), "%s %s\n", m_RunInfo[m_iCurVar].m_pVarName, m_RunInfo[m_iCurVar].m_pOffVal ); //turn off current var
engine->ClientCmd_Unrestricted(combuffer); }
// next var
m_iCurVar++; if (m_iCurVar == m_RunInfo.Count()) { Stop(); return; }
Q_snprintf(combuffer, sizeof(combuffer), "%s %s\n",m_RunInfo[m_iCurVar].m_pVarName, m_RunInfo[m_iCurVar].m_pOnVal); //turn on next var
engine->ClientCmd_Unrestricted(combuffer); }
void CPerfVisualBenchmark::Print() // sort and print into console
{ for (int i = 0; i<m_RunInfo.Count(); i++) { int curMax = 0; for (int j = 0; j<m_RunInfo.Count(); j++) { if (m_RunInfo[j].m_flFPS > m_RunInfo[curMax].m_flFPS) { curMax = j; } } Msg("%.0f fps - %s\n",m_RunInfo[curMax].m_flFPS, m_RunInfo[curMax].m_pDescription); m_RunInfo[curMax].m_flFPS=-1; } }
|