/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ThreadWorkerQueueShim.cpp Date: 2022-3-9 Author: Reece ***/ #include #include "Async.hpp" #include "ThreadWorkerQueueShim.hpp" namespace Aurora::Async { void AsyncLoop::OnFrame() { if (this->commitPending_) { if (LoopQueue::Commit()) { this->commitPending_ = false; } } } bool AsyncLoop::AddCallback(const AuSPtr &source, const AuSPtr &subscriber) { auto ret = LoopQueue::AddCallback(source, subscriber); if (ret) { Schedule(); } return ret; } bool AsyncLoop::AddCallbackEx(const AuSPtr &source, const AuSPtr &subscriber) { auto ret = LoopQueue::AddCallbackEx(source, subscriber); if (ret) { Schedule(); } return ret; } bool AsyncLoop::AddCallback(const AuSPtr &subscriber) { auto ret = LoopQueue::AddCallback(subscriber); if (ret) { Schedule(); } return ret; } void AsyncLoop::Schedule() { this->commitPending_ = true; if (AuThreads::GetThread() != this->pParent->threadObject.get()) { this->pParent->parent.lock()->cvVariable->Broadcast(); } } bool AsyncLoop::CommitPending() { return this->commitPending_; } bool AsyncLoop::Commit() { Schedule(); return true; } }