diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index 212bf579cfa7f..61a0bda17855a 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -255,7 +255,6 @@ public: void runVectorDrawableAnimators(AnimationContext* context) { for (auto it = mVectorDrawableAnimators.begin(); it != mVectorDrawableAnimators.end();) { - (*it)->pushStaging(*context); if ((*it)->animate(*context)) { it = mVectorDrawableAnimators.erase(it); } else { @@ -264,6 +263,12 @@ public: } } + void pushStagingVectorDrawableAnimators(AnimationContext* context) { + for (auto& anim : mVectorDrawableAnimators) { + anim->pushStaging(*context); + } + } + void destroy() { for (auto& renderNode : mPendingAnimatingRenderNodes) { renderNode->animators().endAllStagingAnimators(); @@ -328,6 +333,9 @@ public: // already ran in each RenderNode. Note that these animators don't damage the RenderNodes. // The damaging is done in prepareTree as needed after checking whether a VD has been // modified. + if (mode == TreeInfo::MODE_FULL) { + mRootNode->pushStagingVectorDrawableAnimators(this); + } mRootNode->runVectorDrawableAnimators(this); }