Loading libs/gui/BLASTBufferQueue.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -180,9 +180,9 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence } mPendingReleaseItem.item = std::move(mSubmitted.front()); mSubmitted.pop(); if (mNextTransaction == nullptr) { processNextBufferLocked(); } mCallbackCV.notify_all(); decStrong((void*)transactionCallbackThunk); } Loading @@ -201,7 +201,7 @@ void BLASTBufferQueue::processNextBufferLocked() { SurfaceComposerClient::Transaction localTransaction; bool applyTransaction = true; SurfaceComposerClient::Transaction* t = &localTransaction; if (mNextTransaction != nullptr) { if (mNextTransaction != nullptr && mUseNextTransaction) { t = mNextTransaction; mNextTransaction = nullptr; applyTransaction = false; Loading Loading @@ -263,9 +263,10 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& /*item*/) { std::unique_lock _lock{mMutex}; if (mNextTransaction != nullptr) { while (mNumFrameAvailable > 0 || mNumAcquired == MAX_ACQUIRED_BUFFERS) { while (mNumFrameAvailable > 0 || mNumAcquired == MAX_ACQUIRED_BUFFERS + 1) { mCallbackCV.wait(_lock); } mUseNextTransaction = true; } // add to shadow queue mNumFrameAvailable++; Loading @@ -274,6 +275,7 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& /*item*/) { void BLASTBufferQueue::setNextTransaction(SurfaceComposerClient::Transaction* t) { std::lock_guard _lock{mMutex}; mUseNextTransaction = false; mNextTransaction = t; } Loading libs/gui/include/gui/BLASTBufferQueue.h +2 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,8 @@ private: sp<BLASTBufferItemConsumer> mBufferItemConsumer; SurfaceComposerClient::Transaction* mNextTransaction GUARDED_BY(mMutex); bool mUseNextTransaction = false; }; } // namespace android Loading Loading
libs/gui/BLASTBufferQueue.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -180,9 +180,9 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence } mPendingReleaseItem.item = std::move(mSubmitted.front()); mSubmitted.pop(); if (mNextTransaction == nullptr) { processNextBufferLocked(); } mCallbackCV.notify_all(); decStrong((void*)transactionCallbackThunk); } Loading @@ -201,7 +201,7 @@ void BLASTBufferQueue::processNextBufferLocked() { SurfaceComposerClient::Transaction localTransaction; bool applyTransaction = true; SurfaceComposerClient::Transaction* t = &localTransaction; if (mNextTransaction != nullptr) { if (mNextTransaction != nullptr && mUseNextTransaction) { t = mNextTransaction; mNextTransaction = nullptr; applyTransaction = false; Loading Loading @@ -263,9 +263,10 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& /*item*/) { std::unique_lock _lock{mMutex}; if (mNextTransaction != nullptr) { while (mNumFrameAvailable > 0 || mNumAcquired == MAX_ACQUIRED_BUFFERS) { while (mNumFrameAvailable > 0 || mNumAcquired == MAX_ACQUIRED_BUFFERS + 1) { mCallbackCV.wait(_lock); } mUseNextTransaction = true; } // add to shadow queue mNumFrameAvailable++; Loading @@ -274,6 +275,7 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& /*item*/) { void BLASTBufferQueue::setNextTransaction(SurfaceComposerClient::Transaction* t) { std::lock_guard _lock{mMutex}; mUseNextTransaction = false; mNextTransaction = t; } Loading
libs/gui/include/gui/BLASTBufferQueue.h +2 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,8 @@ private: sp<BLASTBufferItemConsumer> mBufferItemConsumer; SurfaceComposerClient::Transaction* mNextTransaction GUARDED_BY(mMutex); bool mUseNextTransaction = false; }; } // namespace android Loading