diff options
Diffstat (limited to 'gameui/BenchmarkDialog.cpp')
| -rw-r--r-- | gameui/BenchmarkDialog.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/gameui/BenchmarkDialog.cpp b/gameui/BenchmarkDialog.cpp new file mode 100644 index 0000000..9cf0a1a --- /dev/null +++ b/gameui/BenchmarkDialog.cpp @@ -0,0 +1,130 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include "BenchmarkDialog.h" +#include "EngineInterface.h" +#include "BasePanel.h" +#include "tier1/KeyValues.h" +#include "tier1/convar.h" +#include "filesystem.h" +#include "vgui_controls/Button.h" +#include "vgui_controls/CheckButton.h" + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CBenchmarkDialog::CBenchmarkDialog(vgui::Panel *parent, const char *name) : BaseClass(parent, name) +{ + Button *button = new Button(this, "RunButton", "RunButton"); + button->SetCommand(new KeyValues("RunBenchmark")); + SetSizeable(false); + SetDeleteSelfOnClose(true); + + LoadControlSettings("Resource/BenchmarkDialog.res"); +} + +//----------------------------------------------------------------------------- +// Purpose: Launches the benchmark +//----------------------------------------------------------------------------- +void CBenchmarkDialog::RunBenchmark() +{ + // apply settings + BasePanel()->ApplyOptionsDialogSettings(); + + // launch the map + engine->ClientCmd_Unrestricted("disconnect\n"); + engine->ClientCmd_Unrestricted("wait\n"); + engine->ClientCmd_Unrestricted("wait\n"); + engine->ClientCmd_Unrestricted("maxplayers 1\n"); + engine->ClientCmd_Unrestricted("progress_enable\n"); + engine->ClientCmd_Unrestricted("map test_hardware\n"); + + // close this dialog + Close(); +} + + +//----------------------------------------------------------------------------- +// Purpose: Displays benchmark results +//----------------------------------------------------------------------------- +class CBenchmarkResultsDialog : public vgui::Frame +{ + DECLARE_CLASS_SIMPLE( CBenchmarkResultsDialog, vgui::Frame ); +public: + CBenchmarkResultsDialog( vgui::Panel *parent, const char *name ) : BaseClass( parent, name ) + { + SetTitle("#GameUI_BenchmarkResults_Title", true); + SetDeleteSelfOnClose(true); + SetSizeable(false); + + m_pUploadCheck = new CheckButton( this, "UploadCheck", "#GameUI_BenchmarkResults_UploadNow" ); + + LoadControlSettings("Resource/BenchmarkResultsDialog.res"); + + m_pUploadCheck->SetSelected( true ); + MoveToCenterOfScreen(); + } + + virtual void Activate() + { + BaseClass::Activate(); + + KeyValues *kv = new KeyValues( "Benchmark" ); + if ( kv->LoadFromFile( g_pFullFileSystem, "results/results.txt", "MOD" ) ) + { + // get the framerate + char szFrameRate[32]; + Q_snprintf( szFrameRate, sizeof(szFrameRate), "%.2f", kv->GetFloat("framerate") ); + SetDialogVariable( "framerate", szFrameRate ); + } + else + { + Close(); + } + kv->deleteThis(); + } + + void OnKeyCodePressed( KeyCode code ) + { + if ( code == KEY_XBUTTON_B ) + { + Close(); + } + else + { + BaseClass::OnKeyCodePressed(code); + } + } + +private: + virtual void OnClose() + { + if ( m_pUploadCheck->IsSelected() ) + { + engine->ClientCmd_Unrestricted( "bench_upload\n" ); + } + BaseClass::OnClose(); + } + + vgui::CheckButton *m_pUploadCheck; +}; + +//----------------------------------------------------------------------------- +// Purpose: Launches the stats dialog +//----------------------------------------------------------------------------- +CON_COMMAND_F( bench_showstatsdialog, "Shows a dialog displaying the most recent benchmark results.", FCVAR_CHEAT ) +{ + static vgui::DHANDLE<CBenchmarkResultsDialog> g_BenchmarkResultsDialog; + + if (!g_BenchmarkResultsDialog.Get()) + { + g_BenchmarkResultsDialog = new CBenchmarkResultsDialog( BasePanel(), "BenchmarkResultsDialog" ); + } + + g_BenchmarkResultsDialog->Activate(); +} |