Loading libs/gui/BLASTBufferQueue.cpp +15 −7 Original line number Original line Diff line number Diff line Loading @@ -360,11 +360,12 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence } } } } for (const auto& staleRelease : staleReleases) { for (const auto& staleRelease : staleReleases) { BQA_LOGE("Faking releaseBufferCallback from transactionCompleteCallback"); BBQ_TRACE("FakeReleaseCallback"); releaseBufferCallbackLocked(staleRelease, releaseBufferCallbackLocked(staleRelease, stat.previousReleaseFence ? stat.previousReleaseFence : Fence::NO_FENCE, stat.previousReleaseFence stat.currentMaxAcquiredBufferCount); ? stat.previousReleaseFence : Fence::NO_FENCE, stat.currentMaxAcquiredBufferCount, true /* fakeRelease */); } } } else { } else { BQA_LOGE("Failed to find matching SurfaceControl in transactionCallback"); BQA_LOGE("Failed to find matching SurfaceControl in transactionCallback"); Loading Loading @@ -408,11 +409,13 @@ void BLASTBufferQueue::releaseBufferCallback( BBQ_TRACE(); BBQ_TRACE(); std::unique_lock _lock{mMutex}; std::unique_lock _lock{mMutex}; releaseBufferCallbackLocked(id, releaseFence, currentMaxAcquiredBufferCount); releaseBufferCallbackLocked(id, releaseFence, currentMaxAcquiredBufferCount, false /* fakeRelease */); } } void BLASTBufferQueue::releaseBufferCallbackLocked(const ReleaseCallbackId& id, void BLASTBufferQueue::releaseBufferCallbackLocked( const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount) { const ReleaseCallbackId& id, const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount, bool fakeRelease) { ATRACE_CALL(); ATRACE_CALL(); BQA_LOGV("releaseBufferCallback %s", id.to_string().c_str()); BQA_LOGV("releaseBufferCallback %s", id.to_string().c_str()); Loading @@ -435,6 +438,11 @@ void BLASTBufferQueue::releaseBufferCallbackLocked(const ReleaseCallbackId& id, auto rb = ReleasedBuffer{id, releaseFence}; auto rb = ReleasedBuffer{id, releaseFence}; if (std::find(mPendingRelease.begin(), mPendingRelease.end(), rb) == mPendingRelease.end()) { if (std::find(mPendingRelease.begin(), mPendingRelease.end(), rb) == mPendingRelease.end()) { mPendingRelease.emplace_back(rb); mPendingRelease.emplace_back(rb); if (fakeRelease) { BQA_LOGE("Faking releaseBufferCallback from transactionCompleteCallback %" PRIu64, id.framenumber); BBQ_TRACE("FakeReleaseCallback"); } } } // Release all buffers that are beyond the ones that we need to hold // Release all buffers that are beyond the ones that we need to hold Loading libs/gui/include/gui/BLASTBufferQueue.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -93,7 +93,8 @@ public: void releaseBufferCallback(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, void releaseBufferCallback(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount); std::optional<uint32_t> currentMaxAcquiredBufferCount); void releaseBufferCallbackLocked(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, void releaseBufferCallbackLocked(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount); std::optional<uint32_t> currentMaxAcquiredBufferCount, bool fakeRelease); void syncNextTransaction(std::function<void(SurfaceComposerClient::Transaction*)> callback, void syncNextTransaction(std::function<void(SurfaceComposerClient::Transaction*)> callback, bool acquireSingleBuffer = true); bool acquireSingleBuffer = true); void stopContinuousSyncTransaction(); void stopContinuousSyncTransaction(); Loading Loading
libs/gui/BLASTBufferQueue.cpp +15 −7 Original line number Original line Diff line number Diff line Loading @@ -360,11 +360,12 @@ void BLASTBufferQueue::transactionCallback(nsecs_t /*latchTime*/, const sp<Fence } } } } for (const auto& staleRelease : staleReleases) { for (const auto& staleRelease : staleReleases) { BQA_LOGE("Faking releaseBufferCallback from transactionCompleteCallback"); BBQ_TRACE("FakeReleaseCallback"); releaseBufferCallbackLocked(staleRelease, releaseBufferCallbackLocked(staleRelease, stat.previousReleaseFence ? stat.previousReleaseFence : Fence::NO_FENCE, stat.previousReleaseFence stat.currentMaxAcquiredBufferCount); ? stat.previousReleaseFence : Fence::NO_FENCE, stat.currentMaxAcquiredBufferCount, true /* fakeRelease */); } } } else { } else { BQA_LOGE("Failed to find matching SurfaceControl in transactionCallback"); BQA_LOGE("Failed to find matching SurfaceControl in transactionCallback"); Loading Loading @@ -408,11 +409,13 @@ void BLASTBufferQueue::releaseBufferCallback( BBQ_TRACE(); BBQ_TRACE(); std::unique_lock _lock{mMutex}; std::unique_lock _lock{mMutex}; releaseBufferCallbackLocked(id, releaseFence, currentMaxAcquiredBufferCount); releaseBufferCallbackLocked(id, releaseFence, currentMaxAcquiredBufferCount, false /* fakeRelease */); } } void BLASTBufferQueue::releaseBufferCallbackLocked(const ReleaseCallbackId& id, void BLASTBufferQueue::releaseBufferCallbackLocked( const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount) { const ReleaseCallbackId& id, const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount, bool fakeRelease) { ATRACE_CALL(); ATRACE_CALL(); BQA_LOGV("releaseBufferCallback %s", id.to_string().c_str()); BQA_LOGV("releaseBufferCallback %s", id.to_string().c_str()); Loading @@ -435,6 +438,11 @@ void BLASTBufferQueue::releaseBufferCallbackLocked(const ReleaseCallbackId& id, auto rb = ReleasedBuffer{id, releaseFence}; auto rb = ReleasedBuffer{id, releaseFence}; if (std::find(mPendingRelease.begin(), mPendingRelease.end(), rb) == mPendingRelease.end()) { if (std::find(mPendingRelease.begin(), mPendingRelease.end(), rb) == mPendingRelease.end()) { mPendingRelease.emplace_back(rb); mPendingRelease.emplace_back(rb); if (fakeRelease) { BQA_LOGE("Faking releaseBufferCallback from transactionCompleteCallback %" PRIu64, id.framenumber); BBQ_TRACE("FakeReleaseCallback"); } } } // Release all buffers that are beyond the ones that we need to hold // Release all buffers that are beyond the ones that we need to hold Loading
libs/gui/include/gui/BLASTBufferQueue.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -93,7 +93,8 @@ public: void releaseBufferCallback(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, void releaseBufferCallback(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount); std::optional<uint32_t> currentMaxAcquiredBufferCount); void releaseBufferCallbackLocked(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, void releaseBufferCallbackLocked(const ReleaseCallbackId& id, const sp<Fence>& releaseFence, std::optional<uint32_t> currentMaxAcquiredBufferCount); std::optional<uint32_t> currentMaxAcquiredBufferCount, bool fakeRelease); void syncNextTransaction(std::function<void(SurfaceComposerClient::Transaction*)> callback, void syncNextTransaction(std::function<void(SurfaceComposerClient::Transaction*)> callback, bool acquireSingleBuffer = true); bool acquireSingleBuffer = true); void stopContinuousSyncTransaction(); void stopContinuousSyncTransaction(); Loading