diff --git a/engine/cbenchmark.cpp b/engine/cbenchmark.cpp index 0a265a9a..9c717e77 100644 --- a/engine/cbenchmark.cpp +++ b/engine/cbenchmark.cpp @@ -71,13 +71,16 @@ void CBenchmarkResults::StartBenchmark( const CCommand &args ) SetResultsFilename( pszFilename ); // set any necessary settings - host_framerate.SetValue( (float)(1.0f / host_state.interval_per_tick) ); + //host_framerate.SetValue( (float)(1.0f / host_state.interval_per_tick) ); // get the current frame and time m_iStartFrame = host_framecount; m_flStartTime = realtime; + + m_flNextSecondTime = realtime + 1.0f; + m_iNextSecondFrame = host_framecount; } - + //----------------------------------------------------------------------------- // Purpose: writes out results to file //----------------------------------------------------------------------------- @@ -86,7 +89,7 @@ void CBenchmarkResults::StopBenchmark() m_bIsTestRunning = false; // reset - host_framerate.SetValue( 0 ); + //host_framerate.SetValue( 0 ); // print out some stats int numticks = host_framecount - m_iStartFrame; @@ -103,12 +106,23 @@ void CBenchmarkResults::StopBenchmark() kv->SetFloat( "framerate", framerate ); kv->SetInt( "build", build_number() ); + CUtlString str; + for( int i = 0; i < m_FPSInfo.Count(); i++ ) + { + str += m_FPSInfo[i]; + if( i != m_FPSInfo.Count()-1 ) + str += ','; + } + kv->SetString( "framerates", str ); + // get material system info GetMaterialSystemConfigForBenchmarkUpload( kv ); // save kv->SaveToFile( g_pFileSystem, szFilename, "MOD" ); kv->deleteThis(); + + m_FPSInfo.Purge(); } //----------------------------------------------------------------------------- @@ -152,6 +166,20 @@ void CBenchmarkResults::Upload() #endif } +void CBenchmarkResults::Frame() +{ + if( !m_bIsTestRunning ) + return; + + if( m_flNextSecondTime <= realtime ) + { + m_FPSInfo.AddToTail( host_framecount-m_iNextSecondFrame ); + m_flNextSecondTime += 1.0f; + m_iNextSecondFrame = host_framecount; + } +} + + CON_COMMAND_F( bench_start, "Starts gathering of info. Arguments: filename to write results into", FCVAR_CHEAT ) { GetBenchResultsMgr()->StartBenchmark( args ); diff --git a/engine/cbenchmark.h b/engine/cbenchmark.h index fc842eaf..75e21e14 100644 --- a/engine/cbenchmark.h +++ b/engine/cbenchmark.h @@ -34,13 +34,19 @@ public: void StopBenchmark(); void SetResultsFilename( const char *pFilename ); void Upload(); + void Frame(); private: bool m_bIsTestRunning; char m_szFilename[256]; - int m_flStartTime; + float m_flStartTime; int m_iStartFrame; + + float m_flNextSecondTime; + int m_iNextSecondFrame; + + CUtlVector m_FPSInfo; }; inline CBenchmarkResults *GetBenchResultsMgr() diff --git a/engine/sv_main.cpp b/engine/sv_main.cpp index 5bc95139..58c395ed 100644 --- a/engine/sv_main.cpp +++ b/engine/sv_main.cpp @@ -72,6 +72,7 @@ #include "cl_rcon.h" #include "host_state.h" #include "voice.h" +#include "cbenchmark.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" @@ -2845,6 +2846,9 @@ void SV_Think( bool bIsSimulating ) bIsSimulating = bIsSimulating && ( sv.IsMultiplayer() || cl.IsActive() ); g_pServerPluginHandler->GameFrame( bIsSimulating ); + + if( bIsSimulating ) + GetBenchResultsMgr()->Frame(); } //----------------------------------------------------------------------------- @@ -2920,6 +2924,7 @@ void SV_Frame( bool finalTick ) // unlock sting tables to allow changes, helps to find unwanted changes (bebug build only) networkStringTableContainerServer->Lock( false ); + // Run any commands from client and play client Think functions if it is time. sv.RunFrame(); // read network input etc diff --git a/togl/linuxwin/dxabstract.cpp b/togl/linuxwin/dxabstract.cpp index b01541dd..8e6bdac9 100644 --- a/togl/linuxwin/dxabstract.cpp +++ b/togl/linuxwin/dxabstract.cpp @@ -6481,7 +6481,8 @@ HRESULT ID3DXMatrixStack::Create() m_stack.EnsureCapacity( 16 ); // 1KB ish m_stack.AddToTail(); m_stackTop = 0; // top of stack is at index 0 currently - + m_mark = false; + LoadIdentity(); return S_OK; diff --git a/togles/linuxwin/dxabstract.cpp b/togles/linuxwin/dxabstract.cpp index 67d391e7..4b2e7cf9 100644 --- a/togles/linuxwin/dxabstract.cpp +++ b/togles/linuxwin/dxabstract.cpp @@ -6478,7 +6478,8 @@ HRESULT ID3DXMatrixStack::Create() m_stack.EnsureCapacity( 16 ); // 1KB ish m_stack.AddToTail(); m_stackTop = 0; // top of stack is at index 0 currently - + m_mark = false; + LoadIdentity(); return S_OK;