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

Commit c82e879e authored by Doris Liu's avatar Doris Liu
Browse files

Put VD animators on paused list when RT stops drawing

When we stop scheduling for new frames on RenderThread, we should
put the running animations on pause, rather than purge the list
of the running animations, such that in the next full
sync, the animations that were paused will continue to run.

BUG: 30226711
Change-Id: I36ff6f5d26ffa7999f60ca0ff676a35157577dc2
parent 7dd40cd4
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -242,6 +242,16 @@ public:
        mPausedVDAnimators.clear();
    }

    // Move all the animators to the paused list, and send a delayed message to notify the finished
    // listener.
    void pauseAnimators() {
        mPausedVDAnimators.insert(mRunningVDAnimators.begin(), mRunningVDAnimators.end());
        for (auto& anim : mRunningVDAnimators) {
            detachVectorDrawableAnimator(anim.get());
        }
        mRunningVDAnimators.clear();
    }

    void doAttachAnimatingNodes(AnimationContext* context) {
        for (size_t i = 0; i < mPendingAnimatingRenderNodes.size(); i++) {
            RenderNode* node = mPendingAnimatingRenderNodes[i].get();
@@ -415,8 +425,8 @@ public:
        postOnFinishedEvents();
    }

    virtual void detachAnimators() override {
        mRootNode->detachAnimators();
    virtual void pauseAnimators() override {
        mRootNode->pauseAnimators();
    }

    virtual void callOnFinished(BaseRenderNodeAnimator* animator, AnimationListener* listener) {
@@ -426,7 +436,7 @@ public:

    virtual void destroy() {
        AnimationContext::destroy();
        detachAnimators();
        mRootNode->detachAnimators();
        postOnFinishedEvents();
    }

+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ public:

    ANDROID_API virtual void destroy();

    ANDROID_API virtual void detachAnimators() {}
    ANDROID_API virtual void pauseAnimators() {}

private:
    friend class AnimationHandle;
+1 −1
Original line number Diff line number Diff line
@@ -326,7 +326,7 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo,

void CanvasContext::stopDrawing() {
    mRenderThread.removeFrameCallback(this);
    mAnimationContext->detachAnimators();
    mAnimationContext->pauseAnimators();
}

void CanvasContext::notifyFramePending() {