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

Commit b2069eba authored by Rob Carr's avatar Rob Carr Committed by Android (Google) Code Review
Browse files

Merge "SurfaceFlinger: Rework buffer latching when removing from current state"

parents 9718343d a0629234
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -237,10 +237,14 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t
                    getProducerStickyTransform() != 0, mName.string(), mOverrideScalingMode,
                    getTransformToDisplayInverse(), mFreezeGeometryUpdates);

    const nsecs_t expectedPresentTime = mFlinger->mUseScheduler
    nsecs_t expectedPresentTime = mFlinger->mUseScheduler
            ? mFlinger->mScheduler->expectedPresentTime()
            : mFlinger->mPrimaryDispSync->expectedPresentTime();

    if (isRemovedFromCurrentState()) {
        expectedPresentTime = 0;
    }

    // updateTexImage() below might drop the some buffers at the head of the queue if there is a
    // buffer behind them which is timely to be presented. However this buffer may not be signaled
    // yet. The code below makes sure that this wouldn't happen by setting maxFrameNumber to the
@@ -259,6 +263,7 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t
    }
    const uint64_t maxFrameNumberToAcquire =
            std::min(mLastFrameNumberReceived.load(), lastSignaledFrameNumber);

    status_t updateResult =
            mConsumer->updateTexImage(&r, expectedPresentTime, &mAutoRefresh, &queuedBuffer,
                                      maxFrameNumberToAcquire, releaseFence);
+2 −10
Original line number Diff line number Diff line
@@ -3156,17 +3156,9 @@ void SurfaceFlinger::updateCursorAsync()

void SurfaceFlinger::latchAndReleaseBuffer(const sp<Layer>& layer) {
    if (layer->hasReadyFrame()) {
        nsecs_t expectedPresentTime;
        if (mUseScheduler) {
            expectedPresentTime = mScheduler->expectedPresentTime();
        } else {
            expectedPresentTime = mPrimaryDispSync->expectedPresentTime();
        }
        if (layer->shouldPresentNow(expectedPresentTime)) {
        bool ignored = false;
        layer->latchBuffer(ignored, systemTime(), Fence::NO_FENCE);
    }
    }
    layer->releasePendingBuffer(systemTime());
}