diff options
author | John Reck <jreck@google.com> | 2014-08-08 13:21:00 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2014-08-08 20:24:34 +0000 |
commit | a7c2ea20c43ab797bef5801530687e22e83def8f (patch) | |
tree | a5456b7d3cf8fb9f49a330bb626d490ba3de3742 /libs/hwui/AnimatorManager.cpp | |
parent | 5c8ea2c369deab75719fe7c7301846a8ef955702 (diff) |
Fix damage for layers for projection receivers
Bug: 16880228
Change-Id: I59ab760a21f49cc2cac0d8936b173cff292e6114
Diffstat (limited to 'libs/hwui/AnimatorManager.cpp')
-rw-r--r-- | libs/hwui/AnimatorManager.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libs/hwui/AnimatorManager.cpp b/libs/hwui/AnimatorManager.cpp index 27b089364434..7221295a4c84 100644 --- a/libs/hwui/AnimatorManager.cpp +++ b/libs/hwui/AnimatorManager.cpp @@ -66,22 +66,26 @@ void AnimatorManager::pushStaging(TreeInfo& info) { class AnimateFunctor { public: AnimateFunctor(RenderNode& target, TreeInfo& info) - : mTarget(target), mInfo(info) {} + : dirtyMask(0), mTarget(target), mInfo(info) {} bool operator() (BaseRenderNodeAnimator* animator) { + dirtyMask |= animator->dirtyMask(); bool remove = animator->animate(mInfo); if (remove) { animator->decStrong(0); } return remove; } + + uint32_t dirtyMask; + private: RenderNode& mTarget; TreeInfo& mInfo; }; -void AnimatorManager::animate(TreeInfo& info) { - if (!mAnimators.size()) return; +uint32_t AnimatorManager::animate(TreeInfo& info) { + if (!mAnimators.size()) return 0; // TODO: Can we target this better? For now treat it like any other staging // property push and just damage self before and after animators are run @@ -97,6 +101,8 @@ void AnimatorManager::animate(TreeInfo& info) { mParent.mProperties.updateMatrix(); info.damageAccumulator->pushTransform(&mParent); mParent.damageSelf(info); + + return functor.dirtyMask; } } /* namespace uirenderer */ |