Add test for first draw blend behavior in HWUI pipeline

Bug: 65077146
Test: BakedOpRendererTests
Change-Id: Ia3139a01fe25344a19f2b947069bd686303b9fd5
This commit is contained in:
Chris Craik
2017-09-01 14:39:18 -07:00
parent e47aadd9b8
commit 01ed792ade
2 changed files with 59 additions and 0 deletions

View File

@@ -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();

View File

@@ -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());
}