general: remove atomic signal and wait
This commit is contained in:
parent
e3122c5b46
commit
1586f1c0b1
9 changed files with 26 additions and 40 deletions
|
@ -43,14 +43,10 @@ void Nvnflinger::SplitVSync(std::stop_token stop_token) {
|
|||
Common::SetCurrentThreadPriority(Common::ThreadPriority::High);
|
||||
|
||||
while (!stop_token.stop_requested()) {
|
||||
vsync_signal.wait(false);
|
||||
vsync_signal.store(false);
|
||||
|
||||
guard->lock();
|
||||
vsync_signal.Wait();
|
||||
|
||||
const auto lock_guard = Lock();
|
||||
Compose();
|
||||
|
||||
guard->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,9 +65,8 @@ Nvnflinger::Nvnflinger(Core::System& system_, HosBinderDriverServer& hos_binder_
|
|||
"ScreenComposition",
|
||||
[this](std::uintptr_t, s64 time,
|
||||
std::chrono::nanoseconds ns_late) -> std::optional<std::chrono::nanoseconds> {
|
||||
vsync_signal.store(true);
|
||||
{ const auto lock_guard = Lock(); }
|
||||
vsync_signal.notify_one();
|
||||
vsync_signal.Set();
|
||||
return std::chrono::nanoseconds(GetNextTicks());
|
||||
});
|
||||
|
||||
|
@ -97,8 +92,7 @@ Nvnflinger::~Nvnflinger() {
|
|||
if (system.IsMulticore()) {
|
||||
system.CoreTiming().UnscheduleEvent(multi_composition_event, {});
|
||||
vsync_thread.request_stop();
|
||||
vsync_signal.store(true);
|
||||
vsync_signal.notify_all();
|
||||
vsync_signal.Set();
|
||||
} else {
|
||||
system.CoreTiming().UnscheduleEvent(single_composition_event, {});
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include "common/common_types.h"
|
||||
#include "common/polyfill_thread.h"
|
||||
#include "common/thread.h"
|
||||
#include "core/hle/result.h"
|
||||
#include "core/hle/service/kernel_helpers.h"
|
||||
|
||||
|
@ -143,7 +144,7 @@ private:
|
|||
|
||||
Core::System& system;
|
||||
|
||||
std::atomic<bool> vsync_signal;
|
||||
Common::Event vsync_signal;
|
||||
|
||||
std::jthread vsync_thread;
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ ServerManager::~ServerManager() {
|
|||
m_event->Signal();
|
||||
|
||||
// Wait for processing to stop.
|
||||
m_stopped.wait(false);
|
||||
m_stopped.Wait();
|
||||
m_threads.clear();
|
||||
|
||||
// Clean up ports.
|
||||
|
@ -182,10 +182,7 @@ void ServerManager::StartAdditionalHostThreads(const char* name, size_t num_thre
|
|||
}
|
||||
|
||||
Result ServerManager::LoopProcess() {
|
||||
SCOPE_EXIT({
|
||||
m_stopped.store(true);
|
||||
m_stopped.notify_all();
|
||||
});
|
||||
SCOPE_EXIT({ m_stopped.Set(); });
|
||||
|
||||
R_RETURN(this->LoopProcessImpl());
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <atomic>
|
||||
#include <functional>
|
||||
#include <list>
|
||||
#include <map>
|
||||
|
@ -12,6 +11,7 @@
|
|||
#include <vector>
|
||||
|
||||
#include "common/polyfill_thread.h"
|
||||
#include "common/thread.h"
|
||||
#include "core/hle/result.h"
|
||||
#include "core/hle/service/mutex.h"
|
||||
|
||||
|
@ -82,7 +82,7 @@ private:
|
|||
std::list<RequestState> m_deferrals{};
|
||||
|
||||
// Host state tracking
|
||||
std::atomic<bool> m_stopped{};
|
||||
Common::Event m_stopped{};
|
||||
std::vector<std::jthread> m_threads{};
|
||||
std::stop_source m_stop_source{};
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue