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

Commit 3c374129 authored by Chris Craik's avatar Chris Craik Committed by android-build-merger
Browse files

Merge \"Change swap chain stuffed detection logic\" into nyc-mr1-dev

am: 433a19e8

Change-Id: I6942a7cef5c831a1be3ee0252c2f475594f3db39
parents 1230bfc9 433a19e8
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -217,9 +217,9 @@ bool CanvasContext::isSwapChainStuffed() {
    for (size_t i = 1; i < mSwapHistory.size(); i++) {
        auto& swapB = mSwapHistory[i];

        // If there's a frameInterval gap we effectively already dropped a frame,
        // If there's a multi-frameInterval gap we effectively already dropped a frame,
        // so consider the queue healthy.
        if (swapA.swapCompletedTime - swapB.swapCompletedTime > frameInterval) {
        if (swapA.swapCompletedTime - swapB.swapCompletedTime > frameInterval * 3) {
            return false;
        }

@@ -298,12 +298,17 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo,
            // Already drew for this vsync pulse, UI draw request missed
            // the deadline for RT animations
            info.out.canDrawThisFrame = false;
        } else if (vsyncDelta >= mRenderThread.timeLord().frameIntervalNanos()) {
            // It's been at least an entire frame interval, assume
            // the buffer queue is fine
        } else if (vsyncDelta >= mRenderThread.timeLord().frameIntervalNanos() * 3
                || (latestVsync - mLastDropVsync) < 500_ms) {
            // It's been several frame intervals, assume the buffer queue is fine
            // or the last drop was too recent
            info.out.canDrawThisFrame = true;
        } else {
            info.out.canDrawThisFrame = !isSwapChainStuffed();
            if (!info.out.canDrawThisFrame) {
                // dropping frame
                mLastDropVsync = mRenderThread.timeLord().latestVsync();
            }
        }
    } else {
        info.out.canDrawThisFrame = true;
+3 −0
Original line number Diff line number Diff line
@@ -208,6 +208,9 @@ private:
    RingBuffer<SwapHistory, 3> mSwapHistory;
    int64_t mFrameNumber = -1;

    // last vsync for a dropped frame due to stuffed queue
    nsecs_t mLastDropVsync = 0;

    bool mOpaque;
#if HWUI_NEW_OPS
    BakedOpRenderer::LightInfo mLightInfo;