From c359c0e747ad7757ea87f1802d614cc2ed79216c Mon Sep 17 00:00:00 2001 From: chaoticgd <43898262+chaoticgd@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:29:00 +0100 Subject: [PATCH] Debugger: Add setting to change UI refresh interval --- pcsx2-qt/Debugger/DebuggerWindow.cpp | 25 ++++++++--- pcsx2-qt/Debugger/DebuggerWindow.h | 4 ++ .../DebugUserInterfaceSettingsWidget.cpp | 29 +++++++----- .../DebugUserInterfaceSettingsWidget.ui | 45 ++++++++++++++----- 4 files changed, 77 insertions(+), 26 deletions(-) diff --git a/pcsx2-qt/Debugger/DebuggerWindow.cpp b/pcsx2-qt/Debugger/DebuggerWindow.cpp index bba216eaf2..abd450f2cb 100644 --- a/pcsx2-qt/Debugger/DebuggerWindow.cpp +++ b/pcsx2-qt/Debugger/DebuggerWindow.cpp @@ -120,11 +120,7 @@ DebuggerWindow::DebuggerWindow(QWidget* parent) R5900SymbolImporter.OnDebuggerOpened(); }); - QTimer* refresh_timer = new QTimer(this); - connect(refresh_timer, &QTimer::timeout, this, []() { - DebuggerWidget::broadcastEvent(DebuggerEvents::Refresh()); - }); - refresh_timer->start(1000); + updateFromSettings(); } DebuggerWindow* DebuggerWindow::getInstance() @@ -285,6 +281,25 @@ bool DebuggerWindow::shouldSaveWindowGeometry() return Host::GetBaseBoolSettingValue("Debugger/UserInterface", "SaveWindowGeometry", true); } +void DebuggerWindow::updateFromSettings() +{ + const int refresh_interval = Host::GetBaseIntSettingValue("Debugger/UserInterface", "RefreshInterval", 1000); + const int effective_refresh_interval = std::clamp(refresh_interval, 10, 100000); + + if (!m_refresh_timer) + { + m_refresh_timer = new QTimer(this); + connect(m_refresh_timer, &QTimer::timeout, this, []() { + DebuggerWidget::broadcastEvent(DebuggerEvents::Refresh()); + }); + m_refresh_timer->start(effective_refresh_interval); + } + else + { + m_refresh_timer->setInterval(effective_refresh_interval); + } +} + void DebuggerWindow::onVMStarting() { m_ui.actionRun->setEnabled(true); diff --git a/pcsx2-qt/Debugger/DebuggerWindow.h b/pcsx2-qt/Debugger/DebuggerWindow.h index 3999a9899b..1d913a6f33 100644 --- a/pcsx2-qt/Debugger/DebuggerWindow.h +++ b/pcsx2-qt/Debugger/DebuggerWindow.h @@ -8,6 +8,7 @@ #include "DebugTools/DebugInterface.h" #include +#include class DockManager; @@ -37,6 +38,8 @@ public: void restoreWindowGeometry(); bool shouldSaveWindowGeometry(); + void updateFromSettings(); + public slots: void onVMStarting(); void onVMPaused(); @@ -67,6 +70,7 @@ private: DockManager* m_dock_manager; QByteArray m_default_toolbar_state; + QTimer* m_refresh_timer = nullptr; int m_font_size; static const constexpr int DEFAULT_FONT_SIZE = 10; diff --git a/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.cpp b/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.cpp index a4d616e712..58d816cf4b 100644 --- a/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.cpp +++ b/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.cpp @@ -4,6 +4,7 @@ #include "DebugUserInterfaceSettingsWidget.h" #include "SettingWidgetBinder.h" +#include "Debugger/DebuggerWindow.h" static const char* s_drop_indicators[] = { QT_TRANSLATE_NOOP("DebugUserInterfaceSettingsWidget", "Classic"), @@ -19,32 +20,40 @@ DebugUserInterfaceSettingsWidget::DebugUserInterfaceSettingsWidget(SettingsWindo m_ui.setupUi(this); - SettingWidgetBinder::BindWidgetToBoolSetting( - sif, m_ui.showOnStartupCheckBox, "Debugger/UserInterface", "ShowOnStartup", false); - + SettingWidgetBinder::BindWidgetToIntSetting( + sif, m_ui.refreshInterval, "Debugger/UserInterface", "RefreshInterval", 1000); + connect(m_ui.refreshInterval, &QSpinBox::valueChanged, this, []() { + if (g_debugger_window) + g_debugger_window->updateFromSettings(); + }); dialog->registerWidgetHelp( - m_ui.showOnStartupCheckBox, tr("Show On Startup"), tr("Unchecked"), + m_ui.refreshInterval, tr("Refresh Interval"), tr("1000ms"), + tr("The amount of time to wait between subsequent attempts to update the user interface to reflect the state " + "of the virtual machine.")); + + SettingWidgetBinder::BindWidgetToBoolSetting( + sif, m_ui.showOnStartup, "Debugger/UserInterface", "ShowOnStartup", false); + dialog->registerWidgetHelp( + m_ui.showOnStartup, tr("Show On Startup"), tr("Unchecked"), tr("Open the debugger window automatically when PCSX2 starts.")); SettingWidgetBinder::BindWidgetToBoolSetting( - sif, m_ui.saveWindowGeometryCheckBox, "Debugger/UserInterface", "SaveWindowGeometry", true); - + sif, m_ui.saveWindowGeometry, "Debugger/UserInterface", "SaveWindowGeometry", true); dialog->registerWidgetHelp( - m_ui.saveWindowGeometryCheckBox, tr("Save Window Geometry"), tr("Checked"), + m_ui.saveWindowGeometry, tr("Save Window Geometry"), tr("Checked"), tr("Save the position and size of the debugger window when it is closed so that it can be restored later.")); SettingWidgetBinder::BindWidgetToEnumSetting( sif, - m_ui.dropIndicatorCombo, + m_ui.dropIndicator, "Debugger/UserInterface", "DropIndicatorStyle", s_drop_indicators, s_drop_indicators, s_drop_indicators[0], "DebugUserInterfaceSettingsWidget"); - dialog->registerWidgetHelp( - m_ui.dropIndicatorCombo, tr("Drop Indicator Style"), tr("Classic"), + m_ui.dropIndicator, tr("Drop Indicator Style"), tr("Classic"), tr("Choose how the drop indicators that appear when you drag dock windows in the debugger are styled. " "You will have to restart the debugger for this option to take effect.")); } diff --git a/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.ui b/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.ui index c902a45030..bf58c00822 100644 --- a/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.ui +++ b/pcsx2-qt/Settings/DebugUserInterfaceSettingsWidget.ui @@ -38,15 +38,8 @@ Debugger Window - - - - Save Window Geometry - - - - - + + 0 @@ -58,6 +51,36 @@ + + + + Save Window Geometry + + + + + + + Refresh Interval: + + + + + + + ms + + + 10 + + + 100000 + + + 1000 + + + @@ -76,12 +99,12 @@ - Drop Indicator Style + Drop Indicator Style: - +