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

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

Merge "Fix complex clipping on mergeable ops"

parents e60cb323 f8f56cbb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
}

+29 −0
Original line number Diff line number Diff line
@@ -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: