[desktop] Add basic Frametime/FPS overlay (#3537)

Just displays min, max, avg frametime/fps, alongside a chart of FPS in
the last 30 seconds.

Notes:
- Qt Charts is now required
- FPS/frametime collector now runs 2x as often. TODO: keep status bar at
  500ms, but put perf overlay at 250ms

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3537
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
This commit is contained in:
crueter 2026-02-15 19:22:19 +01:00
parent 8e373eb714
commit 45c9f9bbb3
No known key found for this signature in database
GPG key ID: 425ACD2D4830EBC6
10 changed files with 563 additions and 39 deletions

View file

@ -55,6 +55,7 @@ class QProgressDialog;
class QSlider;
class QHBoxLayout;
class WaitTreeWidget;
class PerformanceOverlay;
enum class GameListOpenTarget;
enum class DumpRomFSTarget;
class GameListPlaceholder;
@ -70,6 +71,9 @@ enum class StartGameType {
Global, // Only uses global configuration
};
namespace VideoCore {
class ShaderNotify;
}
namespace Core {
enum class SystemResultStatus : u32;
} // namespace Core
@ -214,6 +218,9 @@ signals:
void WebBrowserClosed(Service::AM::Frontend::WebExitReason exit_reason, std::string last_url);
void SigInterrupt();
void sizeChanged(const QSize &size);
void positionChanged(const QPoint &pos);
void statsUpdated(const Core::PerfStatsResults &results, const VideoCore::ShaderNotify &shaders);
public slots:
void OnLoadComplete();
@ -310,6 +317,8 @@ private:
void RequestGameExit();
void changeEvent(QEvent* event) override;
void closeEvent(QCloseEvent* event) override;
void resizeEvent(QResizeEvent *event) override;
void moveEvent(QMoveEvent *event) override;
std::string CreateTASFramesString(
std::array<size_t, InputCommon::TasInput::PLAYER_NUMBER> frames) const;
@ -392,6 +401,7 @@ private slots:
void OnDataDialog();
void OnToggleFilterBar();
void OnToggleStatusBar();
void OnTogglePerfOverlay();
void OnGameListRefresh();
void InitializeHotkeys();
void ToggleFullscreen();
@ -493,6 +503,7 @@ private:
LoadingScreen* loading_screen = nullptr;
QTimer shutdown_timer;
OverlayDialog* shutdown_dialog{};
PerformanceOverlay *perf_overlay = nullptr;
GameListPlaceholder* game_list_placeholder = nullptr;