diff options
| -rw-r--r-- | libs/hwui/FrameBuilder.cpp | 2 | ||||
| -rw-r--r-- | libs/hwui/tests/unit/FrameBuilderTests.cpp | 29 | 
2 files changed, 30 insertions, 1 deletions
diff --git a/libs/hwui/FrameBuilder.cpp b/libs/hwui/FrameBuilder.cpp index 17ad0e36fa90..dbb66d933c01 100644 --- a/libs/hwui/FrameBuilder.cpp +++ b/libs/hwui/FrameBuilder.cpp @@ -591,7 +591,7 @@ void FrameBuilder::deferArcOp(const ArcOp& op) {  }  static bool hasMergeableClip(const BakedOpState& state) { -    return state.computedState.clipState +    return !state.computedState.clipState              || state.computedState.clipState->mode == ClipMode::Rectangle;  } diff --git a/libs/hwui/tests/unit/FrameBuilderTests.cpp b/libs/hwui/tests/unit/FrameBuilderTests.cpp index 259686b11c81..347d4a5ce7ba 100644 --- a/libs/hwui/tests/unit/FrameBuilderTests.cpp +++ b/libs/hwui/tests/unit/FrameBuilderTests.cpp @@ -477,6 +477,35 @@ RENDERTHREAD_TEST(FrameBuilder, clippedMerging) {      EXPECT_EQ(4, renderer.getIndex());  } +RENDERTHREAD_TEST(FrameBuilder, regionClipStopsMerge) { +    class RegionClipStopsMergeTestRenderer : public TestRendererBase { +    public: +        void onTextOp(const TextOp& op, const BakedOpState& state) override { mIndex++; } +    }; +    auto node = TestUtils::createNode<RecordingCanvas>(0, 0, 400, 400, +            [](RenderProperties& props, RecordingCanvas& canvas) { +        SkPath path; +        path.addCircle(200, 200, 200, SkPath::kCW_Direction); +        canvas.save(SaveFlags::MatrixClip); +        canvas.clipPath(&path, SkRegion::kIntersect_Op); +        SkPaint paint; +        paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); +        paint.setAntiAlias(true); +        paint.setTextSize(50); +        TestUtils::drawUtf8ToCanvas(&canvas, "Test string1", paint, 100, 100); +        TestUtils::drawUtf8ToCanvas(&canvas, "Test string1", paint, 100, 200); +        canvas.restore(); +    }); + +    FrameBuilder frameBuilder(SkRect::MakeWH(400, 400), 400, 400, +            sLightGeometry, Caches::getInstance()); +    frameBuilder.deferRenderNode(*TestUtils::getSyncedNode(node)); + +    RegionClipStopsMergeTestRenderer renderer; +    frameBuilder.replayBakedOps<TestDispatcher>(renderer); +    EXPECT_EQ(2, renderer.getIndex()); +} +  RENDERTHREAD_TEST(FrameBuilder, textMerging) {      class TextMergingTestRenderer : public TestRendererBase {      public:  |