bool AsyncIOManager::WaitResult(u32 handle, AsyncIOResult &result) { std::unique_lock<std::mutex> guard(resultsLock_); ScheduleEvent(IO_EVENT_SYNC); while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) { if (PopResult(handle, result)) { return true; } resultsWait_.wait_for(guard, std::chrono::milliseconds(16)); } return PopResult(handle, result); }
bool GPU_Vulkan::FramebufferReallyDirty() { if (ThreadEnabled()) { // Allow it to process fully before deciding if it's dirty. SyncThread(); } VirtualFramebuffer *vfb = framebufferManager_->GetDisplayVFB(); if (vfb) { bool dirty = vfb->reallyDirtyAfterDisplay; vfb->reallyDirtyAfterDisplay = false; return dirty; } return true; }
bool AsyncIOManager::WaitResult(u32 handle, AsyncIOResult &result) { lock_guard guard(resultsLock_); ScheduleEvent(IO_EVENT_SYNC); while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) { if (PopResult(handle, result)) { return true; } resultsWait_.wait_for(resultsLock_, 16); } if (PopResult(handle, result)) { return true; } return false; }
u64 AsyncIOManager::ResultFinishTicks(u32 handle) { AsyncIOResult result; lock_guard guard(resultsLock_); ScheduleEvent(IO_EVENT_SYNC); while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) { if (ReadResult(handle, result)) { return result.finishTicks; } resultsWait_.wait_for(resultsLock_, 16); } if (ReadResult(handle, result)) { return result.finishTicks; } return 0; }
u64 AsyncIOManager::ResultFinishTicks(u32 handle) { AsyncIOResult result; std::unique_lock<std::mutex> guard(resultsLock_); ScheduleEvent(IO_EVENT_SYNC); while (HasEvents() && ThreadEnabled() && resultsPending_.find(handle) != resultsPending_.end()) { if (ReadResult(handle, result)) { return result.finishTicks; } resultsWait_.wait_for(guard, std::chrono::milliseconds(16)); } if (ReadResult(handle, result)) { return result.finishTicks; } return 0; }