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

Commit a6bfd8d1 authored by Chris Craik's avatar Chris Craik Committed by android-build-merger
Browse files

Fix complex clipping on mergeable ops DO NOT MERGE

am: d183e0b9

Change-Id: Icb357a11cb8a4be473aa8b0acdb4d799973ff54a
parents 4a6e2466 d183e0b9
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -591,7 +591,7 @@ void FrameBuilder::deferArcOp(const ArcOp& op) {
}
}


static bool hasMergeableClip(const BakedOpState& state) {
static bool hasMergeableClip(const BakedOpState& state) {
    return state.computedState.clipState
    return !state.computedState.clipState
            || state.computedState.clipState->mode == ClipMode::Rectangle;
            || state.computedState.clipState->mode == ClipMode::Rectangle;
}
}


+29 −0
Original line number Original line Diff line number Diff line
@@ -477,6 +477,35 @@ RENDERTHREAD_TEST(FrameBuilder, clippedMerging) {
    EXPECT_EQ(4, renderer.getIndex());
    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(0, 0, 400, 400,
            [](RenderProperties& props, TestCanvas& 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) {
RENDERTHREAD_TEST(FrameBuilder, textMerging) {
    class TextMergingTestRenderer : public TestRendererBase {
    class TextMergingTestRenderer : public TestRendererBase {
    public:
    public: