Loading include/gui/IGraphicBufferConsumer.h +2 −0 Original line number Diff line number Diff line Loading @@ -267,6 +267,8 @@ public: // discardFreeBuffers releases all currently-free buffers held by the BufferQueue, in order to // reduce the memory consumption of the BufferQueue to the minimum possible without // discarding data. // The consumer invoking this method is responsible for calling getReleasedBuffers() after this // call to free up any of its locally cached buffers. virtual status_t discardFreeBuffers() = 0; // dump state into a string Loading libs/gui/BufferQueueProducer.cpp +34 −26 Original line number Diff line number Diff line Loading @@ -629,6 +629,8 @@ status_t BufferQueueProducer::detachNextBuffer(sp<GraphicBuffer>* outBuffer, return BAD_VALUE; } sp<IConsumerListener> listener; { Mutex::Autolock lock(mCore->mMutex); if (mCore->mIsAbandoned) { Loading Loading @@ -663,6 +665,12 @@ status_t BufferQueueProducer::detachNextBuffer(sp<GraphicBuffer>* outBuffer, *outFence = mSlots[found].mFence; mCore->clearBufferSlotLocked(found); VALIDATE_CONSISTENCY(); listener = mCore->mConsumerListener; } if (listener != NULL) { listener->onBuffersReleased(); } return NO_ERROR; } Loading libs/gui/ConsumerBase.cpp +12 −1 Original line number Diff line number Diff line Loading @@ -253,7 +253,18 @@ status_t ConsumerBase::discardFreeBuffers() { CB_LOGE("discardFreeBuffers: ConsumerBase is abandoned!"); return NO_INIT; } return mConsumer->discardFreeBuffers(); status_t err = mConsumer->discardFreeBuffers(); if (err != OK) { return err; } uint64_t mask; mConsumer->getReleasedBuffers(&mask); for (int i = 0; i < BufferQueue::NUM_BUFFER_SLOTS; i++) { if (mask & (1ULL << i)) { freeBufferLocked(i); } } return OK; } void ConsumerBase::dumpState(String8& result) const { Loading Loading
include/gui/IGraphicBufferConsumer.h +2 −0 Original line number Diff line number Diff line Loading @@ -267,6 +267,8 @@ public: // discardFreeBuffers releases all currently-free buffers held by the BufferQueue, in order to // reduce the memory consumption of the BufferQueue to the minimum possible without // discarding data. // The consumer invoking this method is responsible for calling getReleasedBuffers() after this // call to free up any of its locally cached buffers. virtual status_t discardFreeBuffers() = 0; // dump state into a string Loading
libs/gui/BufferQueueProducer.cpp +34 −26 Original line number Diff line number Diff line Loading @@ -629,6 +629,8 @@ status_t BufferQueueProducer::detachNextBuffer(sp<GraphicBuffer>* outBuffer, return BAD_VALUE; } sp<IConsumerListener> listener; { Mutex::Autolock lock(mCore->mMutex); if (mCore->mIsAbandoned) { Loading Loading @@ -663,6 +665,12 @@ status_t BufferQueueProducer::detachNextBuffer(sp<GraphicBuffer>* outBuffer, *outFence = mSlots[found].mFence; mCore->clearBufferSlotLocked(found); VALIDATE_CONSISTENCY(); listener = mCore->mConsumerListener; } if (listener != NULL) { listener->onBuffersReleased(); } return NO_ERROR; } Loading
libs/gui/ConsumerBase.cpp +12 −1 Original line number Diff line number Diff line Loading @@ -253,7 +253,18 @@ status_t ConsumerBase::discardFreeBuffers() { CB_LOGE("discardFreeBuffers: ConsumerBase is abandoned!"); return NO_INIT; } return mConsumer->discardFreeBuffers(); status_t err = mConsumer->discardFreeBuffers(); if (err != OK) { return err; } uint64_t mask; mConsumer->getReleasedBuffers(&mask); for (int i = 0; i < BufferQueue::NUM_BUFFER_SLOTS; i++) { if (mask & (1ULL << i)) { freeBufferLocked(i); } } return OK; } void ConsumerBase::dumpState(String8& result) const { Loading