Lines Matching refs:mCore
24 #define VALIDATE_CONSISTENCY() do { mCore->validateConsistencyLocked(); } while (0)
50 mCore(core), in BufferQueueProducer()
68 Mutex::Autolock lock(mCore->mMutex); in requestBuffer()
70 if (mCore->mIsAbandoned) { in requestBuffer()
75 if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in requestBuffer()
103 Mutex::Autolock lock(mCore->mMutex); in setMaxDequeuedBufferCount()
104 mCore->waitWhileAllocatingLocked(); in setMaxDequeuedBufferCount()
106 if (mCore->mIsAbandoned) { in setMaxDequeuedBufferCount()
112 if (maxDequeuedBuffers == mCore->mMaxDequeuedBufferCount) { in setMaxDequeuedBufferCount()
119 for (int s : mCore->mActiveBuffers) { in setMaxDequeuedBufferCount()
131 int bufferCount = mCore->getMinUndequeuedBufferCountLocked(); in setMaxDequeuedBufferCount()
140 const int minBufferSlots = mCore->getMinMaxBufferCountLocked(); in setMaxDequeuedBufferCount()
147 if (bufferCount > mCore->mMaxBufferCount) { in setMaxDequeuedBufferCount()
151 mCore->mMaxBufferCount, mCore->mMaxAcquiredBufferCount, in setMaxDequeuedBufferCount()
152 mCore->mAsyncMode, mCore->mDequeueBufferCannotBlock); in setMaxDequeuedBufferCount()
156 int delta = maxDequeuedBuffers - mCore->mMaxDequeuedBufferCount; in setMaxDequeuedBufferCount()
157 if (!mCore->adjustAvailableSlotsLocked(delta)) { in setMaxDequeuedBufferCount()
160 mCore->mMaxDequeuedBufferCount = maxDequeuedBuffers; in setMaxDequeuedBufferCount()
163 listener = mCore->mConsumerListener; in setMaxDequeuedBufferCount()
165 mCore->mDequeueCondition.broadcast(); in setMaxDequeuedBufferCount()
182 Mutex::Autolock lock(mCore->mMutex); in setAsyncMode()
183 mCore->waitWhileAllocatingLocked(); in setAsyncMode()
185 if (mCore->mIsAbandoned) { in setAsyncMode()
190 if (async == mCore->mAsyncMode) { in setAsyncMode()
194 if ((mCore->mMaxAcquiredBufferCount + mCore->mMaxDequeuedBufferCount + in setAsyncMode()
195 (async || mCore->mDequeueBufferCannotBlock ? 1 : 0)) > in setAsyncMode()
196 mCore->mMaxBufferCount) { in setAsyncMode()
200 mCore->mMaxBufferCount, mCore->mMaxAcquiredBufferCount, in setAsyncMode()
201 mCore->mMaxDequeuedBufferCount, in setAsyncMode()
202 mCore->mDequeueBufferCannotBlock); in setAsyncMode()
206 int delta = mCore->getMaxBufferCountLocked(async, in setAsyncMode()
207 mCore->mDequeueBufferCannotBlock, mCore->mMaxBufferCount) in setAsyncMode()
208 - mCore->getMaxBufferCountLocked(); in setAsyncMode()
210 if (!mCore->adjustAvailableSlotsLocked(delta)) { in setAsyncMode()
215 mCore->mAsyncMode = async; in setAsyncMode()
217 mCore->mDequeueCondition.broadcast(); in setAsyncMode()
219 listener = mCore->mConsumerListener; in setAsyncMode()
231 if (mCore->mFreeBuffers.empty()) { in getFreeBufferLocked()
234 int slot = mCore->mFreeBuffers.front(); in getFreeBufferLocked()
235 mCore->mFreeBuffers.pop_front(); in getFreeBufferLocked()
240 if (mCore->mFreeSlots.empty()) { in getFreeSlotLocked()
243 int slot = *(mCore->mFreeSlots.begin()); in getFreeSlotLocked()
244 mCore->mFreeSlots.erase(slot); in getFreeSlotLocked()
254 if (mCore->mIsAbandoned) { in waitForFreeSlotThenRelock()
261 for (int s : mCore->mActiveBuffers) { in waitForFreeSlotThenRelock()
273 if (mCore->mBufferHasBeenQueued && in waitForFreeSlotThenRelock()
274 dequeuedCount >= mCore->mMaxDequeuedBufferCount) { in waitForFreeSlotThenRelock()
276 "(%d)", callerString, mCore->mMaxDequeuedBufferCount); in waitForFreeSlotThenRelock()
286 const int maxBufferCount = mCore->getMaxBufferCountLocked(); in waitForFreeSlotThenRelock()
287 bool tooManyBuffers = mCore->mQueue.size() in waitForFreeSlotThenRelock()
291 mCore->mQueue.size()); in waitForFreeSlotThenRelock()
295 if (mCore->mSharedBufferMode && mCore->mSharedBufferSlot != in waitForFreeSlotThenRelock()
297 *found = mCore->mSharedBufferSlot; in waitForFreeSlotThenRelock()
304 } else if (mCore->mAllowAllocation) { in waitForFreeSlotThenRelock()
331 if ((mCore->mDequeueBufferCannotBlock || mCore->mAsyncMode) && in waitForFreeSlotThenRelock()
332 (acquiredCount <= mCore->mMaxAcquiredBufferCount)) { in waitForFreeSlotThenRelock()
336 status_t result = mCore->mDequeueCondition.waitRelative( in waitForFreeSlotThenRelock()
337 mCore->mMutex, mDequeueTimeout); in waitForFreeSlotThenRelock()
342 mCore->mDequeueCondition.wait(mCore->mMutex); in waitForFreeSlotThenRelock()
356 Mutex::Autolock lock(mCore->mMutex); in dequeueBuffer()
357 mConsumerName = mCore->mConsumerName; in dequeueBuffer()
359 if (mCore->mIsAbandoned) { in dequeueBuffer()
364 if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in dequeueBuffer()
383 Mutex::Autolock lock(mCore->mMutex); in dequeueBuffer()
384 mCore->waitWhileAllocatingLocked(); in dequeueBuffer()
387 format = mCore->mDefaultBufferFormat; in dequeueBuffer()
391 usage |= mCore->mConsumerUsageBits; in dequeueBuffer()
395 width = mCore->mDefaultWidth; in dequeueBuffer()
396 height = mCore->mDefaultHeight; in dequeueBuffer()
419 if (!mCore->mAllowAllocation) { in dequeueBuffer()
421 if (mCore->mSharedBufferSlot == found) { in dequeueBuffer()
425 mCore->mFreeSlots.insert(found); in dequeueBuffer()
426 mCore->clearBufferSlotLocked(found); in dequeueBuffer()
434 if (mCore->mSharedBufferSlot == found && in dequeueBuffer()
442 if (mCore->mSharedBufferSlot != found) { in dequeueBuffer()
443 mCore->mActiveBuffers.insert(found); in dequeueBuffer()
462 mCore->mBufferAge = 0; in dequeueBuffer()
463 mCore->mIsAllocating = true; in dequeueBuffer()
469 mCore->mBufferAge = mCore->mFrameCounter + 1 - mSlots[found].mFrameNumber; in dequeueBuffer()
473 mCore->mBufferAge); in dequeueBuffer()
485 *outFence = (mCore->mSharedBufferMode && in dequeueBuffer()
486 mCore->mSharedBufferSlot == found) ? in dequeueBuffer()
493 if (mCore->mSharedBufferMode && mCore->mSharedBufferSlot == in dequeueBuffer()
495 mCore->mSharedBufferSlot = found; in dequeueBuffer()
509 Mutex::Autolock lock(mCore->mMutex); in dequeueBuffer()
511 if (error == NO_ERROR && !mCore->mIsAbandoned) { in dequeueBuffer()
512 graphicBuffer->setGenerationNumber(mCore->mGenerationNumber); in dequeueBuffer()
516 mCore->mIsAllocating = false; in dequeueBuffer()
517 mCore->mIsAllocatingCondition.broadcast(); in dequeueBuffer()
520 mCore->mFreeSlots.insert(*outSlot); in dequeueBuffer()
521 mCore->clearBufferSlotLocked(*outSlot); in dequeueBuffer()
526 if (mCore->mIsAbandoned) { in dequeueBuffer()
527 mCore->mFreeSlots.insert(*outSlot); in dequeueBuffer()
528 mCore->clearBufferSlotLocked(*outSlot); in dequeueBuffer()
562 *outBufferAge = mCore->mBufferAge; in dequeueBuffer()
576 Mutex::Autolock lock(mCore->mMutex); in detachBuffer()
578 if (mCore->mIsAbandoned) { in detachBuffer()
583 if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in detachBuffer()
588 if (mCore->mSharedBufferMode || mCore->mSharedBufferSlot == slot) { in detachBuffer()
608 mCore->mActiveBuffers.erase(slot); in detachBuffer()
609 mCore->mFreeSlots.insert(slot); in detachBuffer()
610 mCore->clearBufferSlotLocked(slot); in detachBuffer()
611 mCore->mDequeueCondition.broadcast(); in detachBuffer()
613 listener = mCore->mConsumerListener; in detachBuffer()
637 Mutex::Autolock lock(mCore->mMutex); in detachNextBuffer()
639 if (mCore->mIsAbandoned) { in detachNextBuffer()
644 if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in detachNextBuffer()
649 if (mCore->mSharedBufferMode) { in detachNextBuffer()
655 mCore->waitWhileAllocatingLocked(); in detachNextBuffer()
657 if (mCore->mFreeBuffers.empty()) { in detachNextBuffer()
661 int found = mCore->mFreeBuffers.front(); in detachNextBuffer()
662 mCore->mFreeBuffers.remove(found); in detachNextBuffer()
663 mCore->mFreeSlots.insert(found); in detachNextBuffer()
669 mCore->clearBufferSlotLocked(found); in detachNextBuffer()
671 listener = mCore->mConsumerListener; in detachNextBuffer()
693 Mutex::Autolock lock(mCore->mMutex); in attachBuffer()
695 if (mCore->mIsAbandoned) { in attachBuffer()
700 if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in attachBuffer()
705 if (mCore->mSharedBufferMode) { in attachBuffer()
710 if (buffer->getGenerationNumber() != mCore->mGenerationNumber) { in attachBuffer()
713 mCore->mGenerationNumber); in attachBuffer()
717 mCore->waitWhileAllocatingLocked(); in attachBuffer()
744 mCore->mActiveBuffers.insert(found); in attachBuffer()
794 Mutex::Autolock lock(mCore->mMutex); in queueBuffer()
796 if (mCore->mIsAbandoned) { in queueBuffer()
801 if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in queueBuffer()
822 if (mCore->mSharedBufferMode && mCore->mSharedBufferSlot == in queueBuffer()
824 mCore->mSharedBufferSlot = slot; in queueBuffer()
830 slot, mCore->mFrameCounter + 1, requestedPresentTimestamp, dataSpace, in queueBuffer()
847 dataSpace = mCore->mDefaultBufferDataSpace; in queueBuffer()
855 ++mCore->mFrameCounter; in queueBuffer()
856 currentFrameNumber = mCore->mFrameCounter; in queueBuffer()
875 item.mIsDroppable = mCore->mAsyncMode || in queueBuffer()
876 mCore->mDequeueBufferCannotBlock || in queueBuffer()
877 (mCore->mSharedBufferMode && mCore->mSharedBufferSlot == slot); in queueBuffer()
880 item.mAutoRefresh = mCore->mSharedBufferMode && mCore->mAutoRefresh; in queueBuffer()
881 item.mApi = mCore->mConnectedApi; in queueBuffer()
886 if (mCore->mSharedBufferMode) { in queueBuffer()
887 mCore->mSharedBufferCache.crop = crop; in queueBuffer()
888 mCore->mSharedBufferCache.transform = transform; in queueBuffer()
889 mCore->mSharedBufferCache.scalingMode = static_cast<uint32_t>( in queueBuffer()
891 mCore->mSharedBufferCache.dataspace = dataSpace; in queueBuffer()
895 if (mCore->mQueue.empty()) { in queueBuffer()
898 mCore->mQueue.push_back(item); in queueBuffer()
899 frameAvailableListener = mCore->mConsumerListener; in queueBuffer()
903 const BufferItem& last = mCore->mQueue.itemAt( in queueBuffer()
904 mCore->mQueue.size() - 1); in queueBuffer()
913 if (!mCore->mSharedBufferMode && in queueBuffer()
919 mCore->mActiveBuffers.erase(last.mSlot); in queueBuffer()
920 mCore->mFreeBuffers.push_back(last.mSlot); in queueBuffer()
926 mCore->mQueue.editItemAt(mCore->mQueue.size() - 1) = item; in queueBuffer()
927 frameReplacedListener = mCore->mConsumerListener; in queueBuffer()
929 mCore->mQueue.push_back(item); in queueBuffer()
930 frameAvailableListener = mCore->mConsumerListener; in queueBuffer()
934 mCore->mBufferHasBeenQueued = true; in queueBuffer()
935 mCore->mDequeueCondition.broadcast(); in queueBuffer()
936 mCore->mLastQueuedSlot = slot; in queueBuffer()
938 output->width = mCore->mDefaultWidth; in queueBuffer()
939 output->height = mCore->mDefaultHeight; in queueBuffer()
940 output->transformHint = mCore->mTransformHint; in queueBuffer()
941 output->numPendingBuffers = static_cast<uint32_t>(mCore->mQueue.size()); in queueBuffer()
942 output->nextFrameNumber = mCore->mFrameCounter + 1; in queueBuffer()
944 ATRACE_INT(mCore->mConsumerName.string(), in queueBuffer()
945 static_cast<int32_t>(mCore->mQueue.size())); in queueBuffer()
946 mCore->mOccupancyTracker.registerOccupancyChange(mCore->mQueue.size()); in queueBuffer()
982 connectedApi = mCore->mConnectedApi; in queueBuffer()
1018 Mutex::Autolock lock(mCore->mMutex); in cancelBuffer()
1020 if (mCore->mIsAbandoned) { in cancelBuffer()
1025 if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in cancelBuffer()
1030 if (mCore->mSharedBufferMode) { in cancelBuffer()
1052 if (!mCore->mSharedBufferMode && mSlots[slot].mBufferState.isFree()) { in cancelBuffer()
1058 mCore->mActiveBuffers.erase(slot); in cancelBuffer()
1059 mCore->mFreeBuffers.push_back(slot); in cancelBuffer()
1063 mCore->mDequeueCondition.broadcast(); in cancelBuffer()
1071 Mutex::Autolock lock(mCore->mMutex); in query()
1078 if (mCore->mIsAbandoned) { in query()
1086 value = static_cast<int32_t>(mCore->mDefaultWidth); in query()
1089 value = static_cast<int32_t>(mCore->mDefaultHeight); in query()
1092 value = static_cast<int32_t>(mCore->mDefaultBufferFormat); in query()
1099 value = mCore->getMinUndequeuedBufferCountLocked(); in query()
1105 value = (mCore->mQueue.size() > 1); in query()
1109 value = static_cast<int32_t>(mCore->mConsumerUsageBits); in query()
1112 value = static_cast<int32_t>(mCore->mDefaultBufferDataSpace); in query()
1115 if (mCore->mBufferAge > INT32_MAX) { in query()
1118 value = static_cast<int32_t>(mCore->mBufferAge); in query()
1122 value = static_cast<int32_t>(mCore->mConsumerIsProtected); in query()
1125 value = static_cast<int32_t>(mCore->mMaxBufferCount); in query()
1139 Mutex::Autolock lock(mCore->mMutex); in connect()
1140 mConsumerName = mCore->mConsumerName; in connect()
1144 if (mCore->mIsAbandoned) { in connect()
1149 if (mCore->mConsumerListener == NULL) { in connect()
1159 if (mCore->mConnectedApi != BufferQueueCore::NO_CONNECTED_API) { in connect()
1161 mCore->mConnectedApi, api); in connect()
1165 int delta = mCore->getMaxBufferCountLocked(mCore->mAsyncMode, in connect()
1167 mCore->mConsumerControlledByApp && producerControlledByApp : false, in connect()
1168 mCore->mMaxBufferCount) - in connect()
1169 mCore->getMaxBufferCountLocked(); in connect()
1170 if (!mCore->adjustAvailableSlotsLocked(delta)) { in connect()
1182 mCore->mConnectedApi = api; in connect()
1184 output->width = mCore->mDefaultWidth; in connect()
1185 output->height = mCore->mDefaultHeight; in connect()
1186 output->transformHint = mCore->mTransformHint; in connect()
1188 static_cast<uint32_t>(mCore->mQueue.size()); in connect()
1189 output->nextFrameNumber = mCore->mFrameCounter + 1; in connect()
1202 mCore->mLinkedToDeath = listener; in connect()
1205 mCore->mConnectedProducerListener = listener; in connect()
1214 mCore->mConnectedPid = IPCThreadState::self()->getCallingPid(); in connect()
1215 mCore->mBufferHasBeenQueued = false; in connect()
1216 mCore->mDequeueBufferCannotBlock = false; in connect()
1218 mCore->mDequeueBufferCannotBlock = in connect()
1219 mCore->mConsumerControlledByApp && producerControlledByApp; in connect()
1222 mCore->mAllowAllocation = true; in connect()
1234 Mutex::Autolock lock(mCore->mMutex); in disconnect()
1237 if (IPCThreadState::self()->getCallingPid() != mCore->mConnectedPid) { in disconnect()
1243 mCore->waitWhileAllocatingLocked(); in disconnect()
1245 if (mCore->mIsAbandoned) { in disconnect()
1252 if (mCore->mConnectedApi == NATIVE_WINDOW_API_MEDIA) { in disconnect()
1255 api = mCore->mConnectedApi; in disconnect()
1268 if (mCore->mConnectedApi == api) { in disconnect()
1269 mCore->freeAllBuffersLocked(); in disconnect()
1272 if (mCore->mLinkedToDeath != NULL) { in disconnect()
1274 IInterface::asBinder(mCore->mLinkedToDeath); in disconnect()
1280 mCore->mSharedBufferSlot = in disconnect()
1282 mCore->mLinkedToDeath = NULL; in disconnect()
1283 mCore->mConnectedProducerListener = NULL; in disconnect()
1284 mCore->mConnectedApi = BufferQueueCore::NO_CONNECTED_API; in disconnect()
1285 mCore->mConnectedPid = -1; in disconnect()
1286 mCore->mSidebandStream.clear(); in disconnect()
1287 mCore->mDequeueCondition.broadcast(); in disconnect()
1288 listener = mCore->mConsumerListener; in disconnect()
1289 } else if (mCore->mConnectedApi == BufferQueueCore::NO_CONNECTED_API) { in disconnect()
1294 "(cur=%d req=%d)", mCore->mConnectedApi, api); in disconnect()
1317 Mutex::Autolock _l(mCore->mMutex); in setSidebandStream()
1318 mCore->mSidebandStream = stream; in setSidebandStream()
1319 listener = mCore->mConsumerListener; in setSidebandStream()
1339 Mutex::Autolock lock(mCore->mMutex); in allocateBuffers()
1340 mCore->waitWhileAllocatingLocked(); in allocateBuffers()
1342 if (!mCore->mAllowAllocation) { in allocateBuffers()
1348 newBufferCount = mCore->mFreeSlots.size(); in allocateBuffers()
1353 allocWidth = width > 0 ? width : mCore->mDefaultWidth; in allocateBuffers()
1354 allocHeight = height > 0 ? height : mCore->mDefaultHeight; in allocateBuffers()
1355 allocFormat = format != 0 ? format : mCore->mDefaultBufferFormat; in allocateBuffers()
1356 allocUsage = usage | mCore->mConsumerUsageBits; in allocateBuffers()
1357 allocName.assign(mCore->mConsumerName.string(), mCore->mConsumerName.size()); in allocateBuffers()
1359 mCore->mIsAllocating = true; in allocateBuffers()
1373 Mutex::Autolock lock(mCore->mMutex); in allocateBuffers()
1374 mCore->mIsAllocating = false; in allocateBuffers()
1375 mCore->mIsAllocatingCondition.broadcast(); in allocateBuffers()
1382 Mutex::Autolock lock(mCore->mMutex); in allocateBuffers()
1383 uint32_t checkWidth = width > 0 ? width : mCore->mDefaultWidth; in allocateBuffers()
1384 uint32_t checkHeight = height > 0 ? height : mCore->mDefaultHeight; in allocateBuffers()
1386 format : mCore->mDefaultBufferFormat; in allocateBuffers()
1387 uint64_t checkUsage = usage | mCore->mConsumerUsageBits; in allocateBuffers()
1392 mCore->mIsAllocating = false; in allocateBuffers()
1393 mCore->mIsAllocatingCondition.broadcast(); in allocateBuffers()
1398 if (mCore->mFreeSlots.empty()) { in allocateBuffers()
1403 auto slot = mCore->mFreeSlots.begin(); in allocateBuffers()
1404 mCore->clearBufferSlotLocked(*slot); // Clean up the slot first in allocateBuffers()
1410 mCore->mFreeBuffers.push_front(*slot); in allocateBuffers()
1417 mCore->mFreeSlots.erase(slot); in allocateBuffers()
1420 mCore->mIsAllocating = false; in allocateBuffers()
1421 mCore->mIsAllocatingCondition.broadcast(); in allocateBuffers()
1431 Mutex::Autolock lock(mCore->mMutex); in allowAllocation()
1432 mCore->mAllowAllocation = allow; in allowAllocation()
1440 Mutex::Autolock lock(mCore->mMutex); in setGenerationNumber()
1441 mCore->mGenerationNumber = generationNumber; in setGenerationNumber()
1447 Mutex::Autolock lock(mCore->mMutex); in getConsumerName()
1456 Mutex::Autolock lock(mCore->mMutex); in setSharedBufferMode()
1458 mCore->mSharedBufferSlot = BufferQueueCore::INVALID_BUFFER_SLOT; in setSharedBufferMode()
1460 mCore->mSharedBufferMode = sharedBufferMode; in setSharedBufferMode()
1468 Mutex::Autolock lock(mCore->mMutex); in setAutoRefresh()
1470 mCore->mAutoRefresh = autoRefresh; in setAutoRefresh()
1478 Mutex::Autolock lock(mCore->mMutex); in setDequeueTimeout()
1479 int delta = mCore->getMaxBufferCountLocked(mCore->mAsyncMode, false, in setDequeueTimeout()
1480 mCore->mMaxBufferCount) - mCore->getMaxBufferCountLocked(); in setDequeueTimeout()
1481 if (!mCore->adjustAvailableSlotsLocked(delta)) { in setDequeueTimeout()
1488 mCore->mDequeueBufferCannotBlock = false; in setDequeueTimeout()
1499 Mutex::Autolock lock(mCore->mMutex); in getLastQueuedBuffer()
1500 if (mCore->mLastQueuedSlot == BufferItem::INVALID_BUFFER_SLOT) { in getLastQueuedBuffer()
1506 *outBuffer = mSlots[mCore->mLastQueuedSlot].mGraphicBuffer; in getLastQueuedBuffer()
1514 mSlots[mCore->mLastQueuedSlot].mGraphicBuffer, mLastQueuedCrop, in getLastQueuedBuffer()
1535 Mutex::Autolock lock(mCore->mMutex); in addAndGetFrameTimestamps()
1536 listener = mCore->mConsumerListener; in addAndGetFrameTimestamps()
1548 int api = mCore->mConnectedApi; in binderDied()
1555 *outId = mCore->mUniqueId; in getUniqueId()
1562 Mutex::Autolock lock(mCore->mMutex); in getConsumerUsage()
1563 *outUsage = mCore->mConsumerUsageBits; in getConsumerUsage()