| Index: third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| index f771914735ad8c3ee0384b3ae817d7ab303c9d0d..970035ccfa8e219c507df07b7b5cb23ce93b23a0 100644
|
| --- a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| @@ -59,6 +59,9 @@ class BoxPaintInvalidatorTest : public ::testing::WithParamInterface<bool>,
|
| " .gradient {"
|
| " background-image: linear-gradient(blue, yellow)"
|
| " }"
|
| + " .transform {"
|
| + " transform: scale(2);"
|
| + " }"
|
| "</style>"
|
| "<div id='target' class='border'></div>");
|
| }
|
| @@ -116,64 +119,98 @@ TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
|
|
|
| Element* target = document().getElementById("target");
|
|
|
| - // Should do full invalidation if new geometry has subpixels.
|
| document().view()->setTracksPaintInvalidations(true);
|
| target->setAttribute(HTMLNames::styleAttr, "width: 100.6px; height: 70.3px");
|
| document().view()->updateAllLifecyclePhases();
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| ASSERT_EQ(2u, rasterInvalidations->size());
|
| - EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(IntRect(60, 0, 61, 111), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
|
| + EXPECT_EQ(IntRect(0, 90, 70, 50), (*rasterInvalidations)[1].rect);
|
| + EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + target->setAttribute(HTMLNames::styleAttr, "width: 50px; height: 100px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + rasterInvalidations =
|
| + &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| + ASSERT_EQ(2u, rasterInvalidations->size());
|
| + EXPECT_EQ(IntRect(60, 0, 61, 111), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
|
| + EXPECT_EQ(IntRect(0, 90, 70, 50), (*rasterInvalidations)[1].rect);
|
| + EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| +TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChangeWithTransform) {
|
| + ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
| +
|
| + Element* target = document().getElementById("target");
|
| + target->setAttribute(HTMLNames::classAttr, "border transform");
|
| + document().view()->updateAllLifecyclePhases();
|
| +
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + target->setAttribute(HTMLNames::styleAttr, "width: 100.6px; height: 70.3px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + const auto* rasterInvalidations =
|
| + &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| + ASSERT_EQ(2u, rasterInvalidations->size());
|
| + EXPECT_EQ(IntRect(0, 0, 140, 280), (*rasterInvalidations)[0].rect);
|
| EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| - EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[1].rect);
|
| + EXPECT_EQ(IntRect(0, 0, 242, 222), (*rasterInvalidations)[1].rect);
|
| EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
|
|
| - // Should do full invalidation if old geometry has subpixels.
|
| document().view()->setTracksPaintInvalidations(true);
|
| target->setAttribute(HTMLNames::styleAttr, "width: 50px; height: 100px");
|
| document().view()->updateAllLifecyclePhases();
|
| rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| ASSERT_EQ(2u, rasterInvalidations->size());
|
| - EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(IntRect(0, 0, 242, 222), (*rasterInvalidations)[0].rect);
|
| EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| - EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[1].rect);
|
| + EXPECT_EQ(IntRect(0, 0, 140, 280), (*rasterInvalidations)[1].rect);
|
| EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
| -TEST_P(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| +TEST_P(BoxPaintInvalidatorTest, SubpixelWithinPixelsChange) {
|
| ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
|
|
| Element* target = document().getElementById("target");
|
| LayoutObject* targetObject = target->layoutObject();
|
| EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
|
|
|
| - // Should do full invalidation if new geometry has subpixels even if the paint
|
| - // invalidation rect doesn't change.
|
| document().view()->setTracksPaintInvalidations(true);
|
| target->setAttribute(HTMLNames::styleAttr,
|
| "margin-top: 0.6px; width: 50px; height: 99.3px");
|
| document().view()->updateAllLifecyclePhases();
|
| - EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
|
| + EXPECT_EQ(LayoutRect(LayoutUnit(), LayoutUnit(0.6), LayoutUnit(70),
|
| + LayoutUnit(139.3)),
|
| + targetObject->previousVisualRect());
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| ASSERT_EQ(1u, rasterInvalidations->size());
|
| EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
|
| - EXPECT_EQ(PaintInvalidationLocationChange, (*rasterInvalidations)[0].reason);
|
| + EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
|
|
| document().view()->setTracksPaintInvalidations(true);
|
| target->setAttribute(HTMLNames::styleAttr,
|
| "margin-top: 0.6px; width: 49.3px; height: 98.5px");
|
| document().view()->updateAllLifecyclePhases();
|
| - EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
|
| + EXPECT_EQ(LayoutRect(LayoutUnit(), LayoutUnit(0.6), LayoutUnit(69.3),
|
| + LayoutUnit(138.5)),
|
| + targetObject->previousVisualRect());
|
| rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - ASSERT_EQ(1u, rasterInvalidations->size());
|
| - EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
|
| - EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| + ASSERT_EQ(2u, rasterInvalidations->size());
|
| + EXPECT_EQ(IntRect(59, 0, 11, 140), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[0].reason);
|
| + EXPECT_EQ(IntRect(0, 119, 70, 21), (*rasterInvalidations)[1].rect);
|
| + EXPECT_EQ(PaintInvalidationIncremental, (*rasterInvalidations)[1].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
|
|