mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 10:42:36 +01:00
SPU Profiler: fix CPU usage when emulation is paused
Avoid collecting samples when the thread paused.
This commit is contained in:
parent
52b993095d
commit
0da81d22d3
@ -267,7 +267,7 @@ struct cpu_prof
|
|||||||
// Sample active threads
|
// Sample active threads
|
||||||
for (auto& [ptr, info] : threads)
|
for (auto& [ptr, info] : threads)
|
||||||
{
|
{
|
||||||
if (cpu_flag::exit - ptr->state)
|
if (auto state = +ptr->state; cpu_flag::exit - state)
|
||||||
{
|
{
|
||||||
// Get short function hash
|
// Get short function hash
|
||||||
const u64 name = atomic_storage<u64>::load(ptr->block_hash);
|
const u64 name = atomic_storage<u64>::load(ptr->block_hash);
|
||||||
@ -275,7 +275,7 @@ struct cpu_prof
|
|||||||
// Append occurrence
|
// Append occurrence
|
||||||
info.samples++;
|
info.samples++;
|
||||||
|
|
||||||
if (auto state = +ptr->state; !::is_paused(state) && !::is_stopped(state) && cpu_flag::wait - state)
|
if (cpu_flag::wait - state)
|
||||||
{
|
{
|
||||||
info.freq[name]++;
|
info.freq[name]++;
|
||||||
info.new_samples++;
|
info.new_samples++;
|
||||||
@ -286,6 +286,12 @@ struct cpu_prof
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (state & (cpu_flag::dbg_pause + cpu_flag::dbg_global_pause))
|
||||||
|
{
|
||||||
|
// Idle state caused by emulation pause is not accounted for
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
info.idle++;
|
info.idle++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -302,6 +308,12 @@ struct cpu_prof
|
|||||||
sample_info::print_all(threads);
|
sample_info::print_all(threads);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Emu.IsPaused())
|
||||||
|
{
|
||||||
|
thread_ctrl::wait_for(5000);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Wait, roughly for 20µs
|
// Wait, roughly for 20µs
|
||||||
thread_ctrl::wait_for(20, false);
|
thread_ctrl::wait_for(20, false);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user