diff options
Diffstat (limited to 'Source/Core/VideoCommon/AsyncRequests.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/AsyncRequests.cpp | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/Source/Core/VideoCommon/AsyncRequests.cpp b/Source/Core/VideoCommon/AsyncRequests.cpp index 6671f93293..7348724e43 100644 --- a/Source/Core/VideoCommon/AsyncRequests.cpp +++ b/Source/Core/VideoCommon/AsyncRequests.cpp @@ -3,8 +3,6 @@ #include "VideoCommon/AsyncRequests.h" -#include <mutex> - #include "Core/System.h" #include "VideoCommon/Fifo.h" @@ -16,33 +14,25 @@ AsyncRequests AsyncRequests::s_singleton; AsyncRequests::AsyncRequests() = default; -void AsyncRequests::PullEventsInternal() +void AsyncRequests::PullEvents() { + if (m_queue.Empty()) + return; + // This is only called if the queue isn't empty. // So just flush the pipeline to get accurate results. g_vertex_manager->Flush(); - std::unique_lock<std::mutex> lock(m_mutex); - m_empty.Set(); - - while (!m_queue.empty()) + while (!m_queue.Empty()) { - Event e = std::move(m_queue.front()); - lock.unlock(); - std::invoke(e); - lock.lock(); - - m_queue.pop(); + std::invoke(std::move(m_queue.Front())); + m_queue.Pop(); } - - m_cond.notify_one(); } void AsyncRequests::QueueEvent(Event&& event) { - m_empty.Clear(); - - m_queue.push(std::move(event)); + m_queue.Push(std::move(event)); auto& system = Core::System::GetInstance(); system.GetFifo().RunGpu(); @@ -50,12 +40,10 @@ void AsyncRequests::QueueEvent(Event&& event) void AsyncRequests::WaitForEmptyQueue() { - std::unique_lock<std::mutex> lock(m_mutex); - m_cond.wait(lock, [this] { return m_queue.empty(); }); + m_queue.WaitForEmpty(); } void AsyncRequests::SetPassthrough(bool enable) { - std::unique_lock<std::mutex> lock(m_mutex); m_passthrough = enable; } |
