ssize_t SharedBufferClient::dequeue() { SharedBufferStack& stack( *mSharedStack ); if (stack.head == tail && stack.available == mNumBuffers) { LOGW("dequeue: tail=%d, head=%d, avail=%d, queued=%d", tail, stack.head, stack.available, stack.queued); } RWLock::AutoRLock _rd(mLock); const nsecs_t dequeueTime = systemTime(SYSTEM_TIME_THREAD); //LOGD("[%d] about to dequeue a buffer", // mSharedStack->identity); DequeueCondition condition(this); status_t err = waitForCondition(condition); if (err != NO_ERROR) return ssize_t(err); DequeueUpdate update(this); updateCondition( update ); int dequeued = stack.index[tail]; tail = ((tail+1 >= mNumBuffers) ? 0 : tail+1); LOGD_IF(DEBUG_ATOMICS, "dequeued=%d, tail++=%d, %s", dequeued, tail, dump("").string()); mDequeueTime[dequeued] = dequeueTime; return dequeued; }
status_t SharedBufferClient::lock(int buf) { RWLock::AutoRLock _rd(mLock); SharedBufferStack& stack( *mSharedStack ); LockCondition condition(this, buf); status_t err = waitForCondition(condition); return err; }
ssize_t SharedBufferClient::numOfAvailableBuffer(bool lock) { SharedBufferStack& stack( *mSharedStack ); if(lock) { BufferAllFreeCondition condition(this); status_t err = waitForCondition(condition); if (err != NO_ERROR) return 0; } return stack.numofbuffer; }
void TestScriptingInterface::waitForProcessingIdle() { auto statTracker = DependencyManager::get<StatTracker>(); waitForCondition(0, [statTracker]()->bool { return (0 == statTracker->getStat("Processing").toInt() && 0 == statTracker->getStat("PendingProcessing").toInt()); }); }
void TestScriptingInterface::waitForDownloadIdle() { waitForCondition(0, []()->bool { return (0 == ResourceCache::getLoadingRequestCount()) && (0 == ResourceCache::getPendingRequestCount()); }); }
void TestScriptingInterface::waitForTextureIdle() { waitForCondition(0, []()->bool { return (0 == gpu::Context::getTexturePendingGPUTransferCount()); }); }