From 7e22fb08d2484085b4316e9319c039debc1ff15e Mon Sep 17 00:00:00 2001 From: Stenzek Date: Wed, 1 May 2024 23:00:10 +1000 Subject: [PATCH] GPU: Add #define'able PSX GPU stats --- src/core/gpu.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/core/gpu.cpp b/src/core/gpu.cpp index fb3a117b9..c71690578 100644 --- a/src/core/gpu.cpp +++ b/src/core/gpu.cpp @@ -48,6 +48,12 @@ static void JoinScreenshotThreads(); static std::deque s_screenshot_threads; static std::mutex s_screenshot_threads_mutex; +// #define PSX_GPU_STATS +#ifdef PSX_GPU_STATS +static u64 s_active_gpu_cycles = 0; +static u32 s_active_gpu_cycles_frames = 0; +#endif + GPU::GPU() { ResetStatistics(); @@ -88,6 +94,11 @@ bool GPU::Initialize() g_gpu_device->SetGPUTimingEnabled(g_settings.display_show_gpu_usage); +#ifdef PSX_GPU_STATS + s_active_gpu_cycles = 0; + s_active_gpu_cycles_frames = 0; +#endif + return true; } @@ -536,6 +547,9 @@ TickCount GPU::SystemTicksToCRTCTicks(TickCount sysclk_ticks, TickCount* fractio void GPU::AddCommandTicks(TickCount ticks) { m_pending_command_ticks += ticks; +#ifdef PSX_GPU_STATS + s_active_gpu_cycles += ticks; +#endif } void GPU::SynchronizeCRTC() @@ -998,6 +1012,20 @@ void GPU::CRTCTickEvent(TickCount ticks) m_crtc_state.interlaced_display_field = m_crtc_state.interlaced_field ^ 1u; else m_crtc_state.interlaced_display_field = 0; + +#ifdef PSX_GPU_STATS + if ((++s_active_gpu_cycles_frames) == 60) + { + const double busy_frac = + static_cast(s_active_gpu_cycles) / + static_cast(SystemTicksToGPUTicks(System::ScaleTicksToOverclock(System::MASTER_CLOCK)) * + (ComputeVerticalFrequency() / 60.0f)); + Log_DevFmt("PSX GPU Usage: {:.2f}% [{:.0f} cycles avg per frame]", busy_frac * 100, + static_cast(s_active_gpu_cycles) / static_cast(s_active_gpu_cycles_frames)); + s_active_gpu_cycles = 0; + s_active_gpu_cycles_frames = 0; + } +#endif } Timers::SetGate(HBLANK_TIMER_INDEX, new_vblank);