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

Commit 5ce4e2e7 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Avoid reentrance on ClipArea APIs" into nyc-dev

parents 2344c6a2 bf27b995
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -253,7 +253,9 @@ void ClipArea::clipPathWithTransform(const SkPath& path, const mat4* transform,
    path.transform(skTransform, &transformed);
    SkRegion region;
    regionFromPath(transformed, region);
    clipRegion(region, op);
    enterRegionMode();
    mClipRegion.op(region, op);
    onClipRegionUpdated();
}

/*
+15 −0
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@ TEST(ClipArea, serializeClip) {
        auto serializedClip = area.serializeClip(allocator);
        ASSERT_NE(nullptr, serializedClip);
        ASSERT_EQ(ClipMode::Rectangle, serializedClip->mode);
        ASSERT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot";
        EXPECT_EQ(Rect(200, 200), serializedClip->rect);
        EXPECT_EQ(serializedClip, area.serializeClip(allocator))
                << "Requery of clip on unmodified ClipArea must return same pointer.";
@@ -145,6 +146,7 @@ TEST(ClipArea, serializeClip) {
        auto serializedClip = area.serializeClip(allocator);
        ASSERT_NE(nullptr, serializedClip);
        ASSERT_EQ(ClipMode::RectangleList, serializedClip->mode);
        ASSERT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot";
        auto clipRectList = reinterpret_cast<const ClipRectList*>(serializedClip);
        EXPECT_EQ(2, clipRectList->rectList.getTransformedRectanglesCount());
        EXPECT_EQ(Rect(37, 54, 145, 163), clipRectList->rect);
@@ -160,6 +162,7 @@ TEST(ClipArea, serializeClip) {
        auto serializedClip = area.serializeClip(allocator);
        ASSERT_NE(nullptr, serializedClip);
        ASSERT_EQ(ClipMode::Region, serializedClip->mode);
        ASSERT_TRUE(serializedClip->intersectWithRoot) << "Replace op, so expect intersectWithRoot";
        auto clipRegion = reinterpret_cast<const ClipRegion*>(serializedClip);
        EXPECT_EQ(SkIRect::MakeWH(200, 200), clipRegion->region.getBounds())
                << "Clip region should be 200x200";
@@ -169,6 +172,18 @@ TEST(ClipArea, serializeClip) {
    }
}

TEST(ClipArea, serializeClip_pathIntersectWithRoot) {
    ClipArea area(createClipArea());
    LinearAllocator allocator;
    SkPath circlePath;
    circlePath.addCircle(100, 100, 100);
    area.clipPathWithTransform(circlePath, &Matrix4::identity(), SkRegion::kIntersect_Op);

    auto serializedClip = area.serializeClip(allocator);
    ASSERT_NE(nullptr, serializedClip);
    EXPECT_FALSE(serializedClip->intersectWithRoot) << "No replace, so no intersectWithRoot";
}

TEST(ClipArea, serializeIntersectedClip) {
    ClipArea area(createClipArea());
    LinearAllocator allocator;