| 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 6b76eb142bb48b4d0531fad3b9e899acb4c7dbd2..2e1c700fab6d95e1ef05905cc46ff442232bf319 100644
|
| --- a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| @@ -36,6 +36,7 @@ class BoxPaintInvalidatorTest : public RenderingTest {
|
| " border-width: 20px 10px;"
|
| " border-style: solid;"
|
| " border-color: red;"
|
| + " transform-origin: 0 0"
|
| " }"
|
| "</style>"
|
| "<div id='target'></div>");
|
| @@ -91,35 +92,31 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
|
| ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
|
|
| Element* target = document().getElementById("target");
|
| - LayoutObject* targetObject = target->layoutObject();
|
| - EXPECT_FALSE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
|
|
|
| // 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();
|
| - EXPECT_TRUE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| EXPECT_EQ(2u, rasterInvalidations->size());
|
| EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
|
| - EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].reason);
|
| + EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[1].rect);
|
| - EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[1].reason);
|
| + 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();
|
| - EXPECT_FALSE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
|
| rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| EXPECT_EQ(2u, rasterInvalidations->size());
|
| EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[0].rect);
|
| - EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[0].reason);
|
| + EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[1].rect);
|
| - EXPECT_EQ(PaintInvalidationBoundsChange, (*rasterInvalidations)[1].reason);
|
| + EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[1].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
| @@ -130,7 +127,6 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| LayoutObject* targetObject = target->layoutObject();
|
| EXPECT_EQ(LayoutRect(0, 0, 70, 140),
|
| targetObject->previousPaintInvalidationRect());
|
| - EXPECT_FALSE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
|
|
|
| // Should do full invalidation if new geometry has subpixels even if the paint
|
| // invalidation rect doesn't change.
|
| @@ -140,7 +136,6 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| document().view()->updateAllLifecyclePhases();
|
| EXPECT_EQ(LayoutRect(0, 0, 70, 140),
|
| targetObject->previousPaintInvalidationRect());
|
| - EXPECT_TRUE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| EXPECT_EQ(1u, rasterInvalidations->size());
|
| @@ -148,22 +143,62 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| EXPECT_EQ(PaintInvalidationLocationChange, (*rasterInvalidations)[0].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
|
|
| - // When changing size in subpixels keeping the paint invalidation rect
|
| - // unchanged, incremental incremental should cover all the changed pixels.
|
| 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->previousPaintInvalidationRect());
|
| - EXPECT_TRUE(targetObject->previousPaintInvalidationRectCoversExtraPixels());
|
| rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_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);
|
| + EXPECT_EQ(1u, rasterInvalidations->size());
|
| + EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| +TEST_F(BoxPaintInvalidatorTest, ResizeRotated) {
|
| + ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
| +
|
| + Element* target = document().getElementById("target");
|
| + target->setAttribute(HTMLNames::styleAttr, "transform: rotate(45deg)");
|
| + document().view()->updateAllLifecyclePhases();
|
| +
|
| + // Should do full invalidation a rotated object is resized.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + target->setAttribute(HTMLNames::styleAttr,
|
| + "transform: rotate(45deg); width: 200px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + const auto* rasterInvalidations =
|
| + &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| + EXPECT_EQ(1u, rasterInvalidations->size());
|
| + EXPECT_EQ(IntRect(-99, 0, 255, 255), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| +TEST_F(BoxPaintInvalidatorTest, ResizeRotatedChild) {
|
| + ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
| +
|
| + Element* target = document().getElementById("target");
|
| + target->setAttribute(HTMLNames::styleAttr,
|
| + "transform: rotate(45deg); width: 200px");
|
| + target->setInnerHTML(
|
| + "<div id=child style='width: 50px; height: 50px; background: red'></div>",
|
| + ASSERT_NO_EXCEPTION);
|
| + document().view()->updateAllLifecyclePhases();
|
| + Element* child = document().getElementById("child");
|
| +
|
| + // Should do full invalidation a rotated object is resized.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + child->setAttribute(HTMLNames::styleAttr,
|
| + "width: 100px; height: 50px; background: red");
|
| + document().view()->updateAllLifecyclePhases();
|
| + const auto* rasterInvalidations =
|
| + &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| + EXPECT_EQ(1u, rasterInvalidations->size());
|
| + EXPECT_EQ(IntRect(-43, 21, 107, 107), (*rasterInvalidations)[0].rect);
|
| + EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
|
|