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

Commit 4145919e authored by John Reck's avatar John Reck
Browse files

Fix wrong surfaceRequiresRedraw check

We only need to redraw if the size /changed/ not
if it was the same. Also fix damageId to not use
frameNumber as repeated redraws of the same frame
would toggle.

Bug: 143711430
Test: systrace
Change-Id: I8ac4629c9ff4fd51de33d1be7aa46ccc995ba342
parent c1661db6
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ TreeInfo::TreeInfo(TraversalMode mode, renderthread::CanvasContext& canvasContex
        : mode(mode)
        , prepareTextures(mode == MODE_FULL)
        , canvasContext(canvasContext)
        , damageGenerationId(canvasContext.getFrameNumber())
        , disableForceDark(canvasContext.useForceDark() ? 0 : 1)
        , screenSize(canvasContext.getNextFrameSize()) {}

+2 −1
Original line number Diff line number Diff line
@@ -303,6 +303,7 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo, int64_t sy

    info.damageAccumulator = &mDamageAccumulator;
    info.layerUpdateQueue = &mLayerUpdateQueue;
    info.damageGenerationId = mDamageId++;
    info.out.canDrawThisFrame = true;

    mAnimationContext->startFrame(info.mode);
@@ -702,7 +703,7 @@ bool CanvasContext::surfaceRequiresRedraw() {
    surface->query(NATIVE_WINDOW_WIDTH, &width);
    surface->query(NATIVE_WINDOW_HEIGHT, &height);

    return width == mLastFrameWidth && height == mLastFrameHeight;
    return width != mLastFrameWidth || height != mLastFrameHeight;
}

void CanvasContext::setRenderAheadDepth(int renderAhead) {
+1 −0
Original line number Diff line number Diff line
@@ -245,6 +245,7 @@ private:
    // Need at least 4 because we do quad buffer. Add a 5th for good measure.
    RingBuffer<SwapHistory, 5> mSwapHistory;
    int64_t mFrameNumber = -1;
    int64_t mDamageId = 0;

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