From 52846cd871a8e89bc1d42427e87d53936331f351 Mon Sep 17 00:00:00 2001 From: Vishnu Nair Date: Thu, 5 Aug 2021 16:12:48 -0700 Subject: Blast: Fix missing release callbacks for shared buffers Fixes an issue where buffers were compared only using the buffer id. In shared buffer mode, the client will queue up the same buffer id multiple times so we need to distinguish using the frame number as well. Test: https://buganizer.corp.google.com/issues/195447981#comment18 Fixes: 195447981 Change-Id: I2a2d02a0d7e67ee9577857a210cb6157683e5598 --- services/surfaceflinger/BufferStateLayer.cpp | 19 ++----------------- services/surfaceflinger/BufferStateLayer.h | 1 - services/surfaceflinger/Layer.h | 6 ------ 3 files changed, 2 insertions(+), 24 deletions(-) diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp index 6253036c41..8bc51dfa5d 100644 --- a/services/surfaceflinger/BufferStateLayer.cpp +++ b/services/surfaceflinger/BufferStateLayer.cpp @@ -425,7 +425,8 @@ bool BufferStateLayer::setBuffer(const std::shared_ptr& newBuffer) { - if (mDrawingState.buffer != nullptr && - (!mBufferInfo.mBuffer || - mDrawingState.buffer->getBuffer() != mBufferInfo.mBuffer->getBuffer()) && - newBuffer != mDrawingState.buffer->getBuffer()) { - // If we are about to update mDrawingState.buffer but it has not yet latched - // then we will drop a buffer and should decrement the pending buffer count and - // call any release buffer callbacks if set. - callReleaseBufferCallback(mDrawingState.releaseBufferListener, - mDrawingState.buffer->getBuffer(), mDrawingState.frameNumber, - mDrawingState.acquireFence, mTransformHint, - mFlinger->getMaxAcquiredBufferCountForCurrentRefreshRate( - mOwnerUid)); - decrementPendingBufferCount(); - } -} /* * We don't want to send the layer's transform to input, but rather the diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h index e5674785af..cab48994b3 100644 --- a/services/surfaceflinger/BufferStateLayer.h +++ b/services/surfaceflinger/BufferStateLayer.h @@ -97,7 +97,6 @@ public: // See mPendingBufferTransactions void decrementPendingBufferCount(); - void bufferMayChange(const sp& newBuffer) override; std::atomic* getPendingBufferCounter() override { return &mPendingBufferTransactions; } std::string getPendingBufferCounterName() override { return mBlastTransactionName; } diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index c5cb17ffc7..8eb7e7d613 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -702,12 +702,6 @@ public: */ virtual uint32_t doTransaction(uint32_t transactionFlags); - /* - * Called before updating the drawing state buffer. Used by BufferStateLayer to release any - * unlatched buffers in the drawing state. - */ - virtual void bufferMayChange(const sp& /* newBuffer */){}; - /* * Remove relative z for the layer if its relative parent is not part of the * provided layer tree. -- cgit v1.2.3