source-engine/gameui/BenchmarkDialog.cpp

131 lines
3.6 KiB
C++
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= 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();
}