Loading libs/gui/BLASTBufferQueue.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); Loading libs/gui/ITransactionCompletedListener.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -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); } }; Loading libs/gui/SurfaceComposerClient.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -331,7 +331,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener callback(surfaceStats.previousBufferId, surfaceStats.previousReleaseFence ? surfaceStats.previousReleaseFence : Fence::NO_FENCE); : Fence::NO_FENCE, surfaceStats.transformHint); } } } Loading @@ -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); Loading @@ -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( Loading libs/gui/include/gui/BLASTBufferQueue.h +2 −1 Original line number Diff line number Diff line Loading @@ -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, Loading libs/gui/include/gui/ITransactionCompletedListener.h +2 −1 Original line number Diff line number Diff line Loading @@ -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> { Loading Loading
libs/gui/BLASTBufferQueue.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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); Loading
libs/gui/ITransactionCompletedListener.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -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); } }; Loading
libs/gui/SurfaceComposerClient.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -331,7 +331,8 @@ void TransactionCompletedListener::onTransactionCompleted(ListenerStats listener callback(surfaceStats.previousBufferId, surfaceStats.previousReleaseFence ? surfaceStats.previousReleaseFence : Fence::NO_FENCE); : Fence::NO_FENCE, surfaceStats.transformHint); } } } Loading @@ -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); Loading @@ -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( Loading
libs/gui/include/gui/BLASTBufferQueue.h +2 −1 Original line number Diff line number Diff line Loading @@ -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, Loading
libs/gui/include/gui/ITransactionCompletedListener.h +2 −1 Original line number Diff line number Diff line Loading @@ -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> { Loading