Loading libs/hwui/Android.mk +3 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,9 @@ ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_CFLAGS += -fno-omit-frame-pointer -marm -mapcs endif # Defaults for ATRACE_TAG and LOG_TAG for libhwui LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\" include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) Loading libs/hwui/Animator.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,10 @@ void CanvasPropertyPrimitiveAnimator::setValue(RenderNode* target, float value) mProperty->value = value; } uint32_t CanvasPropertyPrimitiveAnimator::dirtyMask() { return RenderNode::DISPLAY_LIST; } /************************************************************ * CanvasPropertySkPaintAnimator ************************************************************/ Loading Loading @@ -288,6 +292,10 @@ void CanvasPropertyPaintAnimator::setValue(RenderNode* target, float value) { LOG_ALWAYS_FATAL("Unknown field %d", (int) mField); } uint32_t CanvasPropertyPaintAnimator::dirtyMask() { return RenderNode::DISPLAY_LIST; } RevealAnimator::RevealAnimator(int centerX, int centerY, float startValue, float finalValue) : BaseRenderNodeAnimator(finalValue) Loading @@ -305,5 +313,9 @@ void RevealAnimator::setValue(RenderNode* target, float value) { mCenterX, mCenterY, value); } uint32_t RevealAnimator::dirtyMask() { return RenderNode::GENERIC; } } /* namespace uirenderer */ } /* namespace android */ libs/hwui/Animator.h +10 −2 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ public: bool isFinished() { return mPlayState == FINISHED; } float finalValue() { return mFinalValue; } ANDROID_API virtual uint32_t dirtyMask() { return 0; } ANDROID_API virtual uint32_t dirtyMask() = 0; protected: BaseRenderNodeAnimator(float finalValue); Loading Loading @@ -145,6 +145,9 @@ class CanvasPropertyPrimitiveAnimator : public BaseRenderNodeAnimator { public: ANDROID_API CanvasPropertyPrimitiveAnimator(CanvasPropertyPrimitive* property, float finalValue); ANDROID_API virtual uint32_t dirtyMask(); protected: virtual float getValue(RenderNode* target) const; virtual void setValue(RenderNode* target, float value); Loading @@ -161,6 +164,9 @@ public: ANDROID_API CanvasPropertyPaintAnimator(CanvasPropertyPaint* property, PaintField field, float finalValue); ANDROID_API virtual uint32_t dirtyMask(); protected: virtual float getValue(RenderNode* target) const; virtual void setValue(RenderNode* target, float value); Loading @@ -173,13 +179,15 @@ class RevealAnimator : public BaseRenderNodeAnimator { public: ANDROID_API RevealAnimator(int centerX, int centerY, float startValue, float finalValue); ANDROID_API virtual uint32_t dirtyMask(); protected: virtual float getValue(RenderNode* target) const; virtual void setValue(RenderNode* target, float value); private: int mCenterX, mCenterY; bool mInverseClip; }; } /* namespace uirenderer */ Loading libs/hwui/AnimatorManager.cpp +9 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -97,6 +101,8 @@ void AnimatorManager::animate(TreeInfo& info) { mParent.mProperties.updateMatrix(); info.damageAccumulator->pushTransform(&mParent); mParent.damageSelf(info); return functor.dirtyMask; } } /* namespace uirenderer */ Loading libs/hwui/AnimatorManager.h +2 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,8 @@ public: void addAnimator(const sp<BaseRenderNodeAnimator>& animator); void pushStaging(TreeInfo& info); void animate(TreeInfo& info); // Returns the combined dirty mask of all animators run uint32_t animate(TreeInfo& info); private: RenderNode& mParent; Loading Loading
libs/hwui/Android.mk +3 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,9 @@ ifeq ($(USE_OPENGL_RENDERER),true) LOCAL_CFLAGS += -fno-omit-frame-pointer -marm -mapcs endif # Defaults for ATRACE_TAG and LOG_TAG for libhwui LOCAL_CFLAGS += -DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\" include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) Loading
libs/hwui/Animator.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,10 @@ void CanvasPropertyPrimitiveAnimator::setValue(RenderNode* target, float value) mProperty->value = value; } uint32_t CanvasPropertyPrimitiveAnimator::dirtyMask() { return RenderNode::DISPLAY_LIST; } /************************************************************ * CanvasPropertySkPaintAnimator ************************************************************/ Loading Loading @@ -288,6 +292,10 @@ void CanvasPropertyPaintAnimator::setValue(RenderNode* target, float value) { LOG_ALWAYS_FATAL("Unknown field %d", (int) mField); } uint32_t CanvasPropertyPaintAnimator::dirtyMask() { return RenderNode::DISPLAY_LIST; } RevealAnimator::RevealAnimator(int centerX, int centerY, float startValue, float finalValue) : BaseRenderNodeAnimator(finalValue) Loading @@ -305,5 +313,9 @@ void RevealAnimator::setValue(RenderNode* target, float value) { mCenterX, mCenterY, value); } uint32_t RevealAnimator::dirtyMask() { return RenderNode::GENERIC; } } /* namespace uirenderer */ } /* namespace android */
libs/hwui/Animator.h +10 −2 Original line number Diff line number Diff line Loading @@ -62,7 +62,7 @@ public: bool isFinished() { return mPlayState == FINISHED; } float finalValue() { return mFinalValue; } ANDROID_API virtual uint32_t dirtyMask() { return 0; } ANDROID_API virtual uint32_t dirtyMask() = 0; protected: BaseRenderNodeAnimator(float finalValue); Loading Loading @@ -145,6 +145,9 @@ class CanvasPropertyPrimitiveAnimator : public BaseRenderNodeAnimator { public: ANDROID_API CanvasPropertyPrimitiveAnimator(CanvasPropertyPrimitive* property, float finalValue); ANDROID_API virtual uint32_t dirtyMask(); protected: virtual float getValue(RenderNode* target) const; virtual void setValue(RenderNode* target, float value); Loading @@ -161,6 +164,9 @@ public: ANDROID_API CanvasPropertyPaintAnimator(CanvasPropertyPaint* property, PaintField field, float finalValue); ANDROID_API virtual uint32_t dirtyMask(); protected: virtual float getValue(RenderNode* target) const; virtual void setValue(RenderNode* target, float value); Loading @@ -173,13 +179,15 @@ class RevealAnimator : public BaseRenderNodeAnimator { public: ANDROID_API RevealAnimator(int centerX, int centerY, float startValue, float finalValue); ANDROID_API virtual uint32_t dirtyMask(); protected: virtual float getValue(RenderNode* target) const; virtual void setValue(RenderNode* target, float value); private: int mCenterX, mCenterY; bool mInverseClip; }; } /* namespace uirenderer */ Loading
libs/hwui/AnimatorManager.cpp +9 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -97,6 +101,8 @@ void AnimatorManager::animate(TreeInfo& info) { mParent.mProperties.updateMatrix(); info.damageAccumulator->pushTransform(&mParent); mParent.damageSelf(info); return functor.dirtyMask; } } /* namespace uirenderer */ Loading
libs/hwui/AnimatorManager.h +2 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,8 @@ public: void addAnimator(const sp<BaseRenderNodeAnimator>& animator); void pushStaging(TreeInfo& info); void animate(TreeInfo& info); // Returns the combined dirty mask of all animators run uint32_t animate(TreeInfo& info); private: RenderNode& mParent; Loading