Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RSX: wait when emulation is paused (reduces CPU usage) #10837

Merged
merged 2 commits into from Sep 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 5 additions & 5 deletions rpcs3/Emu/Audio/audio_device_listener.h
Expand Up @@ -18,11 +18,11 @@ class audio_device_listener

IFACEMETHODIMP_(ULONG) AddRef() override { return 1; };
IFACEMETHODIMP_(ULONG) Release() override { return 1; };
IFACEMETHODIMP QueryInterface(REFIID iid, void** object) override { return S_OK; };
IFACEMETHODIMP OnPropertyValueChanged(LPCWSTR device_id, const PROPERTYKEY key) override { return S_OK; };
IFACEMETHODIMP OnDeviceAdded(LPCWSTR device_id) override { return S_OK; };
IFACEMETHODIMP OnDeviceRemoved(LPCWSTR device_id) override { return S_OK; };
IFACEMETHODIMP OnDeviceStateChanged(LPCWSTR device_id, DWORD new_state) override { return S_OK; };
IFACEMETHODIMP QueryInterface(REFIID /*iid*/, void** /*object*/) override { return S_OK; };
IFACEMETHODIMP OnPropertyValueChanged(LPCWSTR /*device_id*/, const PROPERTYKEY /*key*/) override { return S_OK; };
IFACEMETHODIMP OnDeviceAdded(LPCWSTR /*device_id*/) override { return S_OK; };
IFACEMETHODIMP OnDeviceRemoved(LPCWSTR /*device_id*/) override { return S_OK; };
IFACEMETHODIMP OnDeviceStateChanged(LPCWSTR /*device_id*/, DWORD /*new_state*/) override { return S_OK; };
IFACEMETHODIMP OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR new_default_device_id) override;
} m_listener;

Expand Down
13 changes: 11 additions & 2 deletions rpcs3/Emu/RSX/RSXThread.cpp
Expand Up @@ -555,15 +555,24 @@ namespace rsx
on_exit();
}

void thread::cpu_wait(bs_t<cpu_flag>)
void thread::cpu_wait(bs_t<cpu_flag> old)
{
if (external_interrupt_lock)
{
wait_pause();
}

on_semaphore_acquire_wait();
std::this_thread::yield();

if ((state & (cpu_flag::dbg_global_pause + cpu_flag::exit)) == cpu_flag::dbg_global_pause)
{
// Wait 16ms during emulation pause. This reduces cpu load while still giving us the chance to render overlays.
thread_ctrl::wait_on(state, old, 16000);
}
else
{
std::this_thread::yield();
}
}

void thread::on_task()
Expand Down