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

Commit a7c2ea20 authored by John Reck's avatar John Reck
Browse files

Fix damage for layers for projection receivers

 Bug: 16880228

Change-Id: I59ab760a21f49cc2cac0d8936b173cff292e6114
parent 5c8ea2c3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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))
+12 −0
Original line number Diff line number Diff line
@@ -249,6 +249,10 @@ void CanvasPropertyPrimitiveAnimator::setValue(RenderNode* target, float value)
    mProperty->value = value;
}

uint32_t CanvasPropertyPrimitiveAnimator::dirtyMask() {
    return RenderNode::DISPLAY_LIST;
}

/************************************************************
 *  CanvasPropertySkPaintAnimator
 ************************************************************/
@@ -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)
@@ -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 */
+10 −2
Original line number Diff line number Diff line
@@ -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);
@@ -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);
@@ -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);
@@ -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 */
+9 −3
Original line number Diff line number Diff line
@@ -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 */
+2 −1
Original line number Diff line number Diff line
@@ -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