From c6ff79830b9126f948791f03164a58ad079e9e5d Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Tue, 13 Jun 2017 17:09:11 -0700 Subject: ConsumerBase: discardFreeBuffers() also needs to dump its own cache ConsumerBase has its own cached slots with graphic buffer references, so it's not enough to just ask the buffer queue consumer to free buffers. Add code equivalent to what happens in the onBuffersReleased callback. Test: Bug: 62593139 Change-Id: Ibc1444b868c6150aa2da1c209e06bdba42f1595d --- libs/gui/ConsumerBase.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'libs/gui/ConsumerBase.cpp') diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp index 5c6158c771..c2b10a91dd 100644 --- a/libs/gui/ConsumerBase.cpp +++ b/libs/gui/ConsumerBase.cpp @@ -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 { -- cgit v1.2.3-59-g8ed1b