@@ -48,6 +48,12 @@ static void JoinScreenshotThreads();
48
48
static std::deque<std::thread> s_screenshot_threads;
49
49
static std::mutex s_screenshot_threads_mutex;
50
50
51
+ // #define PSX_GPU_STATS
52
+ #ifdef PSX_GPU_STATS
53
+ static u64 s_active_gpu_cycles = 0 ;
54
+ static u32 s_active_gpu_cycles_frames = 0 ;
55
+ #endif
56
+
51
57
GPU::GPU ()
52
58
{
53
59
ResetStatistics ();
@@ -88,6 +94,11 @@ bool GPU::Initialize()
88
94
89
95
g_gpu_device->SetGPUTimingEnabled (g_settings.display_show_gpu_usage );
90
96
97
+ #ifdef PSX_GPU_STATS
98
+ s_active_gpu_cycles = 0 ;
99
+ s_active_gpu_cycles_frames = 0 ;
100
+ #endif
101
+
91
102
return true ;
92
103
}
93
104
@@ -536,6 +547,9 @@ TickCount GPU::SystemTicksToCRTCTicks(TickCount sysclk_ticks, TickCount* fractio
536
547
void GPU::AddCommandTicks (TickCount ticks)
537
548
{
538
549
m_pending_command_ticks += ticks;
550
+ #ifdef PSX_GPU_STATS
551
+ s_active_gpu_cycles += ticks;
552
+ #endif
539
553
}
540
554
541
555
void GPU::SynchronizeCRTC ()
@@ -998,6 +1012,20 @@ void GPU::CRTCTickEvent(TickCount ticks)
998
1012
m_crtc_state.interlaced_display_field = m_crtc_state.interlaced_field ^ 1u ;
999
1013
else
1000
1014
m_crtc_state.interlaced_display_field = 0 ;
1015
+
1016
+ #ifdef PSX_GPU_STATS
1017
+ if ((++s_active_gpu_cycles_frames) == 60 )
1018
+ {
1019
+ const double busy_frac =
1020
+ static_cast <double >(s_active_gpu_cycles) /
1021
+ static_cast <double >(SystemTicksToGPUTicks (System::ScaleTicksToOverclock (System::MASTER_CLOCK)) *
1022
+ (ComputeVerticalFrequency () / 60 .0f ));
1023
+ Log_DevFmt (" PSX GPU Usage: {:.2f}% [{:.0f} cycles avg per frame]" , busy_frac * 100 ,
1024
+ static_cast <double >(s_active_gpu_cycles) / static_cast <double >(s_active_gpu_cycles_frames));
1025
+ s_active_gpu_cycles = 0 ;
1026
+ s_active_gpu_cycles_frames = 0 ;
1027
+ }
1028
+ #endif
1001
1029
}
1002
1030
1003
1031
Timers::SetGate (HBLANK_TIMER_INDEX, new_vblank);
0 commit comments