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

Commit 8f50f52e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add test for first draw blend behavior in HWUI pipeline" into oc-mr1-dev

parents 9352329e 01ed792a
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -40,6 +40,14 @@ public:
            GLenum* outSrc, GLenum* outDst);
    void setFactors(GLenum src, GLenum dst);

    bool  getEnabled() {
        return mEnabled;
    }
    void getFactors(GLenum* src, GLenum* dst) {
        *src = mSrcMode;
        *dst = mDstMode;
    }

    void dump();
private:
    Blend();
+51 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <gtest/gtest.h>

#include <BakedOpRenderer.h>
#include <GlopBuilder.h>
#include <tests/common/TestUtils.h>

using namespace android::uirenderer;
@@ -53,3 +54,53 @@ RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, startRepaintLayer_clear) {
        renderer.endLayer();
    }
}

static void drawFirstOp(RenderState& renderState, int color, SkBlendMode mode) {
    BakedOpRenderer renderer(Caches::getInstance(), renderState, true, false, sLightInfo);

    renderer.startFrame(100, 100, Rect(100, 100));
    SkPaint paint;
    paint.setColor(color);
    paint.setBlendMode(mode);

    Rect dest(0, 0, 100, 100);
    Glop glop;
    GlopBuilder(renderState, Caches::getInstance(), &glop)
            .setRoundRectClipState(nullptr)
            .setMeshUnitQuad()
            .setFillPaint(paint, 1.0f)
            .setTransform(Matrix4::identity(), TransformFlags::None)
            .setModelViewMapUnitToRectSnap(dest)
            .build();
    renderer.renderGlop(nullptr, nullptr, glop);
    renderer.endFrame(Rect(100, 100));
}

static void verifyBlend(RenderState& renderState, GLenum expectedSrc, GLenum expectedDst) {
    EXPECT_TRUE(renderState.blend().getEnabled());
    GLenum src;
    GLenum dst;
    renderState.blend().getFactors(&src, &dst);
    EXPECT_EQ(expectedSrc, src);
    EXPECT_EQ(expectedDst, dst);
}

static void verifyBlendDisabled(RenderState& renderState) {
    EXPECT_FALSE(renderState.blend().getEnabled());
}

RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, firstDrawBlend_clear) {
    // initialize blend state to nonsense value
    renderThread.renderState().blend().setFactors(GL_ONE, GL_ONE);

    drawFirstOp(renderThread.renderState(), 0xfeff0000, SkBlendMode::kClear);
    verifyBlend(renderThread.renderState(), GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
}

RENDERTHREAD_OPENGL_PIPELINE_TEST(BakedOpRenderer, firstDrawBlend_srcover) {
    // initialize blend state to nonsense value
    renderThread.renderState().blend().setFactors(GL_ONE, GL_ONE);

    drawFirstOp(renderThread.renderState(), 0xfeff0000, SkBlendMode::kSrcOver);
    verifyBlendDisabled(renderThread.renderState());
}