Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aef1de99 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

BlastBufferQueue: Handle onFrameReplaced

If a buffer is replaced, we should not call onFrameAvailable
which will incorrectly increase the number of buffers BBQ
expects to acquire.

Test: manual tests, atest CtsWindowManagerDeviceTestCases, check that we are not stuck in onFrameAvailable
Change-Id: Ib6fc3b11905fbf24c2528e14b1fb2409d1f43ff6
parent e0a064b6
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -302,13 +302,13 @@ Rect BLASTBufferQueue::computeCrop(const BufferItem& item) {
    return item.mCrop;
}

void BLASTBufferQueue::onFrameAvailable(const BufferItem& /*item*/) {
void BLASTBufferQueue::onFrameAvailable(const BufferItem& item) {
    ATRACE_CALL();
    std::unique_lock _lock{mMutex};

    const bool nextTransactionSet = mNextTransaction != nullptr;
    BQA_LOGV("onFrameAvailable nextTransactionSet=%s mFlushShadowQueue=%s",
             toString(nextTransactionSet), toString(mFlushShadowQueue));
    BQA_LOGV("onFrameAvailable framenumber=%" PRIu64 " nextTransactionSet=%s mFlushShadowQueue=%s",
             item.mFrameNumber, toString(nextTransactionSet), toString(mFlushShadowQueue));

    if (nextTransactionSet || mFlushShadowQueue) {
        while (mNumFrameAvailable > 0 || maxBuffersAcquired()) {
@@ -322,6 +322,11 @@ void BLASTBufferQueue::onFrameAvailable(const BufferItem& /*item*/) {
    processNextBufferLocked(true);
}

void BLASTBufferQueue::onFrameReplaced(const BufferItem& item) {
    BQA_LOGV("onFrameReplaced framenumber=%" PRIu64, item.mFrameNumber);
    // Do nothing since we are not storing unacquired buffer items locally.
}

void BLASTBufferQueue::setNextTransaction(SurfaceComposerClient::Transaction* t) {
    std::lock_guard _lock{mMutex};
    mNextTransaction = t;
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ public:
    sp<Surface> getSurface();

    void onBufferFreed(const wp<GraphicBuffer>&/* graphicBuffer*/) override { /* TODO */ }
    void onFrameReplaced(const BufferItem& item) override {onFrameAvailable(item);}
    void onFrameReplaced(const BufferItem& item) override;
    void onFrameAvailable(const BufferItem& item) override;

    void transactionCallback(nsecs_t latchTime, const sp<Fence>& presentFence,