diff options
| author | 2021-06-08 17:53:51 +0000 | |
|---|---|---|
| committer | 2021-06-08 17:53:51 +0000 | |
| commit | 9d7aee1d786b01942e90cb6972b2bc1e06920aef (patch) | |
| tree | 350af9d02b023ebabe0572ed7a605858533f86b1 /libs/gui | |
| parent | 57aa9a97c886a7e39446fbf1fc545af88cbca530 (diff) | |
| parent | 97e7cc0ce23e417a2355a4559d43fd9c9ccb4efa (diff) | |
Merge "SF: Pass transformHint with releaseBuffer" into sc-dev
Diffstat (limited to 'libs/gui')
| -rw-r--r-- | libs/gui/BLASTBufferQueue.cpp | 12 | ||||
| -rw-r--r-- | libs/gui/ITransactionCompletedListener.cpp | 5 | ||||
| -rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 8 | ||||
| -rw-r--r-- | libs/gui/include/gui/BLASTBufferQueue.h | 3 | ||||
| -rw-r--r-- | libs/gui/include/gui/ITransactionCompletedListener.h | 3 | ||||
| -rw-r--r-- | libs/gui/include/gui/SurfaceComposerClient.h | 6 |
6 files changed, 23 insertions, 14 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index a2868c6143..b9a293f4c3 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -302,23 +302,25 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence // So we pass in a weak pointer to the BBQ and if it still alive, then we release the buffer. // Otherwise, this is a no-op. static void releaseBufferCallbackThunk(wp<BLASTBufferQueue> context, uint64_t graphicBufferId, - const sp<Fence>& releaseFence) { + const sp<Fence>& releaseFence, uint32_t transformHint) { sp<BLASTBufferQueue> blastBufferQueue = context.promote(); ALOGV("releaseBufferCallbackThunk graphicBufferId=%" PRIu64 " blastBufferQueue=%s", graphicBufferId, blastBufferQueue ? "alive" : "dead"); if (blastBufferQueue) { - blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence); + blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence, transformHint); } } void BLASTBufferQueue::releaseBufferCallback(uint64_t graphicBufferId, - const sp<Fence>& releaseFence) { + const sp<Fence>& releaseFence, + uint32_t transformHint) { ATRACE_CALL(); std::unique_lock _lock{mMutex}; BQA_LOGV("releaseBufferCallback graphicBufferId=%" PRIu64, graphicBufferId); if (mSurfaceControl != nullptr) { - mTransformHint = mSurfaceControl->getTransformHint(); + mTransformHint = transformHint; + mSurfaceControl->setTransformHint(transformHint); mBufferItemConsumer->setTransformHint(mTransformHint); } @@ -412,7 +414,7 @@ void BLASTBufferQueue::processNextBufferLocked(bool useNextTransaction) { auto releaseBufferCallback = std::bind(releaseBufferCallbackThunk, wp<BLASTBufferQueue>(this) /* callbackContext */, - std::placeholders::_1, std::placeholders::_2); + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); t->setBuffer(mSurfaceControl, buffer, releaseBufferCallback); t->setDataspace(mSurfaceControl, static_cast<ui::Dataspace>(bufferItem.mDataSpace)); t->setHdrMetadata(mSurfaceControl, bufferItem.mHdrMetadata); diff --git a/libs/gui/ITransactionCompletedListener.cpp b/libs/gui/ITransactionCompletedListener.cpp index f74f91e034..63d07ba1fb 100644 --- a/libs/gui/ITransactionCompletedListener.cpp +++ b/libs/gui/ITransactionCompletedListener.cpp @@ -251,10 +251,11 @@ public: stats); } - void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence) override { + void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence, + uint32_t transformHint) override { callRemoteAsync<decltype( &ITransactionCompletedListener::onReleaseBuffer)>(Tag::ON_RELEASE_BUFFER, - graphicBufferId, releaseFence); + graphicBufferId, releaseFence, transformHint); } }; diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 371454a3de..96104376d1 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -331,7 +331,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener callback(surfaceStats.previousBufferId, surfaceStats.previousReleaseFence ? surfaceStats.previousReleaseFence - : Fence::NO_FENCE); + : Fence::NO_FENCE, + surfaceStats.transformHint); } } } @@ -357,7 +358,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener } void TransactionCompletedListener::onReleaseBuffer(uint64_t graphicBufferId, - sp<Fence> releaseFence) { + sp<Fence> releaseFence, + uint32_t transformHint) { ReleaseBufferCallback callback; { std::scoped_lock<std::mutex> lock(mMutex); @@ -367,7 +369,7 @@ void TransactionCompletedListener::onReleaseBuffer(uint64_t graphicBufferId, ALOGE("Could not call release buffer callback, buffer not found %" PRIu64, graphicBufferId); return; } - callback(graphicBufferId, releaseFence); + callback(graphicBufferId, releaseFence, transformHint); } ReleaseBufferCallback TransactionCompletedListener::popReleaseBufferCallbackLocked( diff --git a/libs/gui/include/gui/BLASTBufferQueue.h b/libs/gui/include/gui/BLASTBufferQueue.h index c4ca399e37..3ab1ee103d 100644 --- a/libs/gui/include/gui/BLASTBufferQueue.h +++ b/libs/gui/include/gui/BLASTBufferQueue.h @@ -89,7 +89,8 @@ public: void transactionCallback(nsecs_t latchTime, const sp<Fence>& presentFence, const std::vector<SurfaceControlStats>& stats); - void releaseBufferCallback(uint64_t graphicBufferId, const sp<Fence>& releaseFence); + void releaseBufferCallback(uint64_t graphicBufferId, const sp<Fence>& releaseFence, + uint32_t transformHint); void setNextTransaction(SurfaceComposerClient::Transaction *t); void mergeWithNextTransaction(SurfaceComposerClient::Transaction* t, uint64_t frameNumber); void setTransactionCompleteCallback(uint64_t frameNumber, diff --git a/libs/gui/include/gui/ITransactionCompletedListener.h b/libs/gui/include/gui/ITransactionCompletedListener.h index 2d71194f70..3bfeef1922 100644 --- a/libs/gui/include/gui/ITransactionCompletedListener.h +++ b/libs/gui/include/gui/ITransactionCompletedListener.h @@ -158,7 +158,8 @@ public: virtual void onTransactionCompleted(ListenerStats stats) = 0; - virtual void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence) = 0; + virtual void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence, + uint32_t transformHint) = 0; }; class BnTransactionCompletedListener : public SafeBnInterface<ITransactionCompletedListener> { diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h index 2582882c85..62a782fd3e 100644 --- a/libs/gui/include/gui/SurfaceComposerClient.h +++ b/libs/gui/include/gui/SurfaceComposerClient.h @@ -82,7 +82,8 @@ using TransactionCompletedCallback = std::function<void(nsecs_t /*latchTime*/, const sp<Fence>& /*presentFence*/, const std::vector<SurfaceControlStats>& /*stats*/)>; using ReleaseBufferCallback = - std::function<void(uint64_t /* graphicsBufferId */, const sp<Fence>& /*releaseFence*/)>; + std::function<void(uint64_t /* graphicsBufferId */, const sp<Fence>& /*releaseFence*/, + uint32_t transformHint)>; using SurfaceStatsCallback = std::function<void(void* /*context*/, nsecs_t /*latchTime*/, @@ -716,7 +717,8 @@ public: // BnTransactionCompletedListener overrides void onTransactionCompleted(ListenerStats stats) override; - void onReleaseBuffer(uint64_t /* graphicsBufferId */, sp<Fence> releaseFence) override; + void onReleaseBuffer(uint64_t /* graphicsBufferId */, sp<Fence> releaseFence, + uint32_t transformHint) override; private: ReleaseBufferCallback popReleaseBufferCallbackLocked(uint64_t /* graphicsBufferId */); |