diff options
author | chaviw <chaviw@google.com> | 2021-11-17 17:36:50 -0600 |
---|---|---|
committer | Chavi Weingarten <chaviw@google.com> | 2021-11-23 15:04:59 +0000 |
commit | 9d12adc77270be3215e3cd2b89b1b787493a11f6 (patch) | |
tree | 35b3055b999749ebe017b75351d8bbd17a4ee0e8 | |
parent | 4b26b7fb4604ded2ec4e2bb3e4f40a76c48c6fcf (diff) | |
download | native-9d12adc77270be3215e3cd2b89b1b787493a11f6.tar.gz |
Only add commit callback when using sync transaction
There's no need to add a commit callback when we're not syncing since
the callback won't actually do anything. Instead only add a commit
callback when a sync transaction has been requested.
Test: BLASTBufferQueueTest
Bug: 205278630
Change-Id: Ib7345f2581b6e4ce8923531aebcd457c14d86027
Merged-In: Ib7345f2581b6e4ce8923531aebcd457c14d86027
-rw-r--r-- | libs/gui/BLASTBufferQueue.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index 39dd5d9552..085a11a88e 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -529,7 +529,6 @@ void BLASTBufferQueue::acquireNextBufferLocked( // Ensure BLASTBufferQueue stays alive until we receive the transaction complete callback. incStrong((void*)transactionCallbackThunk); - incStrong((void*)transactionCommittedCallbackThunk); const bool sizeHasChanged = mRequestedSize != mSize; mSize = mRequestedSize; @@ -550,7 +549,7 @@ void BLASTBufferQueue::acquireNextBufferLocked( t->setAcquireFence(mSurfaceControl, bufferItem.mFence ? new Fence(bufferItem.mFence->dup()) : Fence::NO_FENCE); t->addTransactionCompletedCallback(transactionCallbackThunk, static_cast<void*>(this)); - t->addTransactionCommittedCallback(transactionCommittedCallbackThunk, static_cast<void*>(this)); + mSurfaceControlsWithPendingCallback.push(mSurfaceControl); if (updateDestinationFrame) { @@ -673,6 +672,13 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& item) { if (nextTransactionSet) { acquireNextBufferLocked(std::move(mNextTransaction)); + + // Only need a commit callback when syncing to ensure the buffer that's synced has been sent + // to SF + incStrong((void*)transactionCommittedCallbackThunk); + mNextTransaction->addTransactionCommittedCallback(transactionCommittedCallbackThunk, + static_cast<void*>(this)); + mNextTransaction = nullptr; mWaitForTransactionCallback = true; } else if (!mWaitForTransactionCallback) { |