general: remove atomic signal and wait

This commit is contained in:
Liam 2023-06-20 11:41:38 -04:00
parent e3122c5b46
commit 1586f1c0b1
9 changed files with 26 additions and 40 deletions

View file

@ -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, {});
}

View file

@ -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;