diff options
Diffstat (limited to 'libs/hwui/tests/unit/RenderNodeDrawableTests.cpp')
-rw-r--r-- | libs/hwui/tests/unit/RenderNodeDrawableTests.cpp | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp b/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp index 15c0ab1ad8d2..2c73940b9b9c 100644 --- a/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp +++ b/libs/hwui/tests/unit/RenderNodeDrawableTests.cpp @@ -18,13 +18,13 @@ #include <gtest/gtest.h> #include <SkClipStack.h> -#include <SkLiteRecorder.h> #include <SkSurface_Base.h> #include <string.h> #include "AnimationContext.h" #include "DamageAccumulator.h" #include "FatalTestCanvas.h" #include "IContextFactory.h" +#include "RecordingCanvas.h" #include "SkiaCanvas.h" #include "pipeline/skia/SkiaDisplayList.h" #include "pipeline/skia/SkiaOpenGLPipeline.h" @@ -32,6 +32,7 @@ #include "pipeline/skia/SkiaRecordingCanvas.h" #include "renderthread/CanvasContext.h" #include "tests/common/TestUtils.h" +#include "utils/Color.h" using namespace android; using namespace android::uirenderer; @@ -44,8 +45,8 @@ TEST(RenderNodeDrawable, create) { canvas.drawColor(Color::Red_500, SkBlendMode::kSrcOver); }); - SkLiteDL skLiteDL; - SkLiteRecorder canvas; + DisplayListData skLiteDL; + RecordingCanvas canvas; canvas.reset(&skLiteDL, SkIRect::MakeWH(1, 1)); canvas.translate(100, 100); RenderNodeDrawable drawable(rootNode.get(), &canvas); @@ -537,7 +538,7 @@ RENDERTHREAD_SKIA_PIPELINE_TEST(RenderNodeDrawable, projectionHwLayer) { layerUpdateQueue.enqueueLayerWithDamage(child.get(), android::uirenderer::Rect(LAYER_WIDTH, LAYER_HEIGHT)); auto pipeline = std::make_unique<SkiaOpenGLPipeline>(renderThread); - pipeline->renderLayersImpl(layerUpdateQueue, true, false); + pipeline->renderLayersImpl(layerUpdateQueue, true); EXPECT_EQ(1, drawCounter); // assert index 0 is drawn on the layer RenderNodeDrawable drawable(parent.get(), surfaceLayer1->getCanvas(), true); @@ -1094,7 +1095,7 @@ TEST(ReorderBarrierDrawable, testShadowMatrix) { class ShadowTestCanvas : public SkCanvas { public: ShadowTestCanvas(int width, int height) : SkCanvas(width, height) {} - int getIndex() { return mDrawCounter; } + int getDrawCounter() { return mDrawCounter; } virtual void onDrawDrawable(SkDrawable* drawable, const SkMatrix* matrix) override { // expect to draw 2 RenderNodeDrawable, 1 StartReorderBarrierDrawable, @@ -1109,17 +1110,36 @@ TEST(ReorderBarrierDrawable, testShadowMatrix) { EXPECT_EQ(dy, TRANSLATE_Y); } + virtual void didSetMatrix(const SkMatrix& matrix) override { + mDrawCounter++; + // First invocation is EndReorderBarrierDrawable::drawShadow to apply shadow matrix. + // Second invocation is preparing the matrix for an elevated RenderNodeDrawable. + EXPECT_TRUE(matrix.isIdentity()); + EXPECT_TRUE(getTotalMatrix().isIdentity()); + } + virtual void didConcat(const SkMatrix& matrix) override { - // This function is invoked by EndReorderBarrierDrawable::drawShadow to apply shadow - // matrix. mDrawCounter++; - EXPECT_EQ(SkMatrix::MakeTrans(CASTER_X, CASTER_Y), matrix); - EXPECT_EQ(SkMatrix::MakeTrans(CASTER_X + TRANSLATE_X, CASTER_Y + TRANSLATE_Y), - getTotalMatrix()); + if (mFirstDidConcat) { + // First invocation is EndReorderBarrierDrawable::drawShadow to apply shadow matrix. + mFirstDidConcat = false; + EXPECT_EQ(SkMatrix::MakeTrans(CASTER_X + TRANSLATE_X, CASTER_Y + TRANSLATE_Y), + matrix); + EXPECT_EQ(SkMatrix::MakeTrans(CASTER_X + TRANSLATE_X, CASTER_Y + TRANSLATE_Y), + getTotalMatrix()); + } else { + // Second invocation is preparing the matrix for an elevated RenderNodeDrawable. + EXPECT_EQ(SkMatrix::MakeTrans(TRANSLATE_X, TRANSLATE_Y), + matrix); + EXPECT_EQ(SkMatrix::MakeTrans(TRANSLATE_X, TRANSLATE_Y), + getTotalMatrix()); + } } protected: int mDrawCounter = 0; + private: + bool mFirstDidConcat = true; }; auto parent = TestUtils::createSkiaNode( @@ -1143,7 +1163,7 @@ TEST(ReorderBarrierDrawable, testShadowMatrix) { ShadowTestCanvas canvas(CANVAS_WIDTH, CANVAS_HEIGHT); RenderNodeDrawable drawable(parent.get(), &canvas, false); canvas.drawDrawable(&drawable); - EXPECT_EQ(6, canvas.getIndex()); + EXPECT_EQ(9, canvas.getDrawCounter()); } // Draw a vector drawable twice but with different bounds and verify correct bounds are used. |