From 73ca2119ed6fbb2a094c1dcf7b1073936ff49ff0 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Mon, 1 Mar 2021 22:44:47 +0100 Subject: [PATCH] perf overlay: add datapoint settings to GUI --- rpcs3/Emu/RSX/Overlays/overlay_controls.h | 1 + .../Emu/RSX/Overlays/overlay_perf_metrics.cpp | 50 ++++++++++++--- rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.h | 6 +- rpcs3/rpcs3qt/emu_settings_type.h | 4 ++ rpcs3/rpcs3qt/settings_dialog.cpp | 6 ++ rpcs3/rpcs3qt/settings_dialog.ui | 61 ++++++++++++++++++- rpcs3/rpcs3qt/tooltips.h | 2 + 7 files changed, 119 insertions(+), 11 deletions(-) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_controls.h b/rpcs3/Emu/RSX/Overlays/overlay_controls.h index 59ff03c195..361263ce80 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_controls.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_controls.h @@ -1097,6 +1097,7 @@ namespace rsx void set_color(color4f color); void set_guide_interval(f32 guide_interval); u16 get_height() const; + u32 get_datapoint_count() const; void record_datapoint(f32 datapoint); void update(); compiled_resource& get_compiled() override; diff --git a/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.cpp b/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.cpp index 0ca88e9868..0c0ba76d30 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.cpp @@ -264,7 +264,7 @@ namespace rsx visible = true; } - void perf_metrics_overlay::set_framerate_graph_enabled(bool enabled, u32 datapoint_count) + void perf_metrics_overlay::set_framerate_graph_enabled(bool enabled) { if (m_framerate_graph_enabled == enabled) return; @@ -275,7 +275,6 @@ namespace rsx { m_fps_graph.set_title(" Framerate"); m_fps_graph.set_font_size(static_cast(m_font_size * 0.8)); - m_fps_graph.set_count(datapoint_count); m_fps_graph.set_color(convert_color_code(m_color_body, m_opacity)); m_fps_graph.set_guide_interval(10); } @@ -283,7 +282,7 @@ namespace rsx m_force_repaint = true; } - void perf_metrics_overlay::set_frametime_graph_enabled(bool enabled, u32 datapoint_count) + void perf_metrics_overlay::set_frametime_graph_enabled(bool enabled) { if (m_frametime_graph_enabled == enabled) return; @@ -294,7 +293,6 @@ namespace rsx { m_frametime_graph.set_title(" Frametime"); m_frametime_graph.set_font_size(static_cast(m_font_size * 0.8)); - m_frametime_graph.set_count(datapoint_count); m_frametime_graph.set_color(convert_color_code(m_color_body, m_opacity)); m_frametime_graph.set_guide_interval(8); } @@ -302,6 +300,24 @@ namespace rsx m_force_repaint = true; } + void perf_metrics_overlay::set_framerate_datapoint_count(u32 datapoint_count) + { + if (m_fps_graph.get_datapoint_count() == datapoint_count) + return; + + m_fps_graph.set_count(datapoint_count); + m_force_repaint = true; + } + + void perf_metrics_overlay::set_frametime_datapoint_count(u32 datapoint_count) + { + if (m_frametime_graph.get_datapoint_count() == datapoint_count) + return; + + m_frametime_graph.set_count(datapoint_count); + m_force_repaint = true; + } + void perf_metrics_overlay::set_detail_level(detail_level level) { if (m_detail == level) @@ -640,7 +656,20 @@ namespace rsx void graph::set_count(u32 datapoint_count) { m_datapoint_count = datapoint_count; - m_datapoints.resize(datapoint_count, 0); + + if (m_datapoints.empty()) + { + m_datapoints.resize(m_datapoint_count, 0); + } + else if (m_datapoints.empty() || m_datapoint_count < m_datapoints.size()) + { + std::copy(m_datapoints.begin() + m_datapoints.size() - m_datapoint_count, m_datapoints.end(), m_datapoints.begin()); + m_datapoints.resize(m_datapoint_count); + } + else + { + m_datapoints.insert(m_datapoints.begin(), m_datapoint_count - m_datapoints.size(), 0); + } } void graph::set_color(color4f color) @@ -658,6 +687,11 @@ namespace rsx return h + m_label.h + m_label.padding_top + m_label.padding_bottom; } + u32 graph::get_datapoint_count() const + { + return m_datapoint_count; + } + void graph::record_datapoint(f32 datapoint) { ensure(datapoint >= 0.0f); @@ -773,8 +807,10 @@ namespace rsx perf_overlay->set_opacity(perf_settings.opacity / 100.f); perf_overlay->set_body_colors(perf_settings.color_body, perf_settings.background_body); perf_overlay->set_title_colors(perf_settings.color_title, perf_settings.background_title); - perf_overlay->set_framerate_graph_enabled(perf_settings.framerate_graph_enabled.get(), perf_settings.framerate_datapoint_count); - perf_overlay->set_frametime_graph_enabled(perf_settings.frametime_graph_enabled.get(), perf_settings.frametime_datapoint_count); + perf_overlay->set_framerate_datapoint_count(perf_settings.framerate_datapoint_count); + perf_overlay->set_frametime_datapoint_count(perf_settings.frametime_datapoint_count); + perf_overlay->set_framerate_graph_enabled(perf_settings.framerate_graph_enabled.get()); + perf_overlay->set_frametime_graph_enabled(perf_settings.frametime_graph_enabled.get()); perf_overlay->init(); } else if (perf_overlay) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.h b/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.h index 060b6031c6..4d24e621cd 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_perf_metrics.h @@ -85,8 +85,10 @@ namespace rsx public: void init(); - void set_framerate_graph_enabled(bool enabled, u32 datapoint_count); - void set_frametime_graph_enabled(bool enabled, u32 datapoint_count); + void set_framerate_graph_enabled(bool enabled); + void set_frametime_graph_enabled(bool enabled); + void set_framerate_datapoint_count(u32 datapoint_count); + void set_frametime_datapoint_count(u32 datapoint_count); void set_detail_level(detail_level level); void set_position(screen_quadrant quadrant); void set_update_interval(u32 update_interval); diff --git a/rpcs3/rpcs3qt/emu_settings_type.h b/rpcs3/rpcs3qt/emu_settings_type.h index 9be6b1813f..e2fabb343f 100644 --- a/rpcs3/rpcs3qt/emu_settings_type.h +++ b/rpcs3/rpcs3qt/emu_settings_type.h @@ -81,6 +81,8 @@ enum class emu_settings_type PerfOverlayEnabled, PerfOverlayFramerateGraphEnabled, PerfOverlayFrametimeGraphEnabled, + PerfOverlayFramerateDatapoints, + PerfOverlayFrametimeDatapoints, PerfOverlayDetailLevel, PerfOverlayPosition, PerfOverlayUpdateInterval, @@ -227,6 +229,8 @@ static const QMap settings_location = { emu_settings_type::PerfOverlayEnabled, { "Video", "Performance Overlay", "Enabled" } }, { emu_settings_type::PerfOverlayFramerateGraphEnabled, { "Video", "Performance Overlay", "Enable Framerate Graph" } }, { emu_settings_type::PerfOverlayFrametimeGraphEnabled, { "Video", "Performance Overlay", "Enable Frametime Graph" } }, + { emu_settings_type::PerfOverlayFramerateDatapoints, { "Video", "Performance Overlay", "Framerate datapoints" } }, + { emu_settings_type::PerfOverlayFrametimeDatapoints, { "Video", "Performance Overlay", "Frametime datapoints" } }, { emu_settings_type::PerfOverlayDetailLevel, { "Video", "Performance Overlay", "Detail level" } }, { emu_settings_type::PerfOverlayPosition, { "Video", "Performance Overlay", "Position" } }, { emu_settings_type::PerfOverlayUpdateInterval, { "Video", "Performance Overlay", "Metrics update interval (ms)" } }, diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 449953d25f..a9b81a16d6 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -1255,6 +1255,12 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std EnhanceSlider(emu_settings_type::PerfOverlayOpacity, ui->perfOverlayOpacity, ui->label_opacity, tr("Opacity: %0 %", "Performance overlay opacity")); SubscribeTooltip(ui->perf_overlay_opacity, tooltips.settings.perf_overlay_opacity); + EnhanceSlider(emu_settings_type::PerfOverlayFramerateDatapoints, ui->slider_framerate_datapoints, ui->label_framerate_datapoints, tr("Framerate datapoints: %0", "Framerate graph datapoints")); + SubscribeTooltip(ui->perf_overlay_framerate_datapoints, tooltips.settings.perf_overlay_framerate_datapoints); + + EnhanceSlider(emu_settings_type::PerfOverlayFrametimeDatapoints, ui->slider_frametime_datapoints, ui->label_frametime_datapoints, tr("Frametime datapoints: %0", "Frametime graph datapoints")); + SubscribeTooltip(ui->perf_overlay_frametime_datapoints, tooltips.settings.perf_overlay_frametime_datapoints); + EnhanceSlider(emu_settings_type::ShaderLoadBgDarkening, ui->shaderLoadBgDarkening, ui->label_shaderLoadBgDarkening, tr("Background darkening: %0 %", "Shader load background darkening")); SubscribeTooltip(ui->shaderLoadBgDarkening, tooltips.settings.shader_load_bg_darkening); diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index 07fb3f6ede..71c8242b6e 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -1983,8 +1983,7 @@ QLayout::SetNoConstraint - - + @@ -2858,6 +2857,64 @@ + + + + + 0 + + + 0 + + + 0 + + + + + Framerate datapoints: + + + + + + + Qt::Horizontal + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + Frametime datapoints: + + + + + + + Qt::Horizontal + + + + + + diff --git a/rpcs3/rpcs3qt/tooltips.h b/rpcs3/rpcs3qt/tooltips.h index fcceb1741b..ff476d3902 100644 --- a/rpcs3/rpcs3qt/tooltips.h +++ b/rpcs3/rpcs3qt/tooltips.h @@ -119,6 +119,8 @@ public: const QString perf_overlay_enabled = tr("Enables or disables the performance overlay."); const QString perf_overlay_framerate_graph_enabled = tr("Enables or disables the framerate graph."); const QString perf_overlay_frametime_graph_enabled = tr("Enables or disables the frametime graph."); + const QString perf_overlay_framerate_datapoints = tr("Sets the amount of datapoints used in the framerate graph."); + const QString perf_overlay_frametime_datapoints = tr("Sets the amount of datapoints used in the frametime graph."); const QString perf_overlay_position = tr("Sets the on-screen position (quadrant) of the performance overlay."); const QString perf_overlay_detail_level = tr("Controls the amount of information displayed on the performance overlay."); const QString perf_overlay_update_interval = tr("Sets the time interval in which the performance overlay is being updated (measured in milliseconds).");