| 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 b200d66ab0fe4491a7d43d6b9f1b9c9fffd11a19..d048ae45ba271c566601ead55af6f48e0e298915 100644
|
| --- a/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/BoxPaintInvalidatorTest.cpp
|
| @@ -13,13 +13,20 @@
|
|
|
| namespace blink {
|
|
|
| -class BoxPaintInvalidatorTest : public RenderingTest {
|
| +class BoxPaintInvalidatorTest : public ::testing::WithParamInterface<bool>,
|
| + private ScopedRootLayerScrollingForTest,
|
| + public RenderingTest {
|
| + public:
|
| + BoxPaintInvalidatorTest()
|
| + : ScopedRootLayerScrollingForTest(GetParam()),
|
| + RenderingTest(SingleChildFrameLoaderClient::create()) {}
|
| +
|
| protected:
|
| const RasterInvalidationTracking* getRasterInvalidationTracking() const {
|
| // TODO(wangxianzhu): Test SPv2.
|
| return layoutView()
|
| .layer()
|
| - ->graphicsLayerBacking()
|
| + ->graphicsLayerBackingForScrolling()
|
| ->getRasterInvalidationTracking();
|
| }
|
|
|
| @@ -30,27 +37,37 @@ class BoxPaintInvalidatorTest : public RenderingTest {
|
| setBodyInnerHTML(
|
| "<style>"
|
| " body { margin: 0 }"
|
| + " ::-webkit-scrollbar { display: none }"
|
| " #target {"
|
| " width: 50px;"
|
| " height: 100px;"
|
| " border-width: 20px 10px;"
|
| " border-style: solid;"
|
| " border-color: red;"
|
| - " transform-origin: 0 0"
|
| + " transform-origin: 0 0;"
|
| + " }"
|
| + " #target.local-background {"
|
| + " background-attachment: local;"
|
| + " overflow: scroll;"
|
| + " }"
|
| + " #target.gradient {"
|
| + " background-image: linear-gradient(blue, yellow)"
|
| " }"
|
| "</style>"
|
| "<div id='target'></div>");
|
| }
|
| };
|
|
|
| -TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationExpand) {
|
| +INSTANTIATE_TEST_CASE_P(All, BoxPaintInvalidatorTest, ::testing::Bool());
|
| +
|
| +TEST_P(BoxPaintInvalidatorTest, IncrementalInvalidationExpand) {
|
| document().view()->setTracksPaintInvalidations(true);
|
| Element* target = document().getElementById("target");
|
| target->setAttribute(HTMLNames::styleAttr, "width: 100px; height: 200px");
|
| document().view()->updateAllLifecyclePhases();
|
| const auto& rasterInvalidations =
|
| getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(2u, rasterInvalidations.size());
|
| + ASSERT_EQ(2u, rasterInvalidations.size());
|
| EXPECT_EQ(IntRect(60, 0, 60, 240), rasterInvalidations[0].rect);
|
| EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
|
| EXPECT_EQ(IntRect(0, 120, 120, 120), rasterInvalidations[1].rect);
|
| @@ -58,14 +75,14 @@ TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationExpand) {
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
| -TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationShrink) {
|
| +TEST_P(BoxPaintInvalidatorTest, IncrementalInvalidationShrink) {
|
| document().view()->setTracksPaintInvalidations(true);
|
| Element* target = document().getElementById("target");
|
| target->setAttribute(HTMLNames::styleAttr, "width: 20px; height: 80px");
|
| document().view()->updateAllLifecyclePhases();
|
| const auto& rasterInvalidations =
|
| getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(2u, rasterInvalidations.size());
|
| + ASSERT_EQ(2u, rasterInvalidations.size());
|
| EXPECT_EQ(IntRect(30, 0, 40, 140), rasterInvalidations[0].rect);
|
| EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
|
| EXPECT_EQ(IntRect(0, 100, 70, 40), rasterInvalidations[1].rect);
|
| @@ -73,14 +90,14 @@ TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationShrink) {
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
| -TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationMixed) {
|
| +TEST_P(BoxPaintInvalidatorTest, IncrementalInvalidationMixed) {
|
| document().view()->setTracksPaintInvalidations(true);
|
| Element* target = document().getElementById("target");
|
| target->setAttribute(HTMLNames::styleAttr, "width: 100px; height: 80px");
|
| document().view()->updateAllLifecyclePhases();
|
| const auto& rasterInvalidations =
|
| getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(2u, rasterInvalidations.size());
|
| + ASSERT_EQ(2u, rasterInvalidations.size());
|
| EXPECT_EQ(IntRect(60, 0, 60, 120), rasterInvalidations[0].rect);
|
| EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
|
| EXPECT_EQ(IntRect(0, 100, 70, 40), rasterInvalidations[1].rect);
|
| @@ -88,7 +105,7 @@ TEST_F(BoxPaintInvalidatorTest, IncrementalInvalidationMixed) {
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
| -TEST_F(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
|
| +TEST_P(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
|
| ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
|
|
| Element* target = document().getElementById("target");
|
| @@ -99,7 +116,7 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
|
| document().view()->updateAllLifecyclePhases();
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(2u, rasterInvalidations->size());
|
| + ASSERT_EQ(2u, rasterInvalidations->size());
|
| EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
|
| EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[1].rect);
|
| @@ -112,7 +129,7 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
|
| document().view()->updateAllLifecyclePhases();
|
| rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(2u, rasterInvalidations->size());
|
| + ASSERT_EQ(2u, rasterInvalidations->size());
|
| EXPECT_EQ(IntRect(0, 0, 121, 111), (*rasterInvalidations)[0].rect);
|
| EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[1].rect);
|
| @@ -120,7 +137,7 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelVisualRectChagne) {
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
| -TEST_F(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| +TEST_P(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
|
|
| Element* target = document().getElementById("target");
|
| @@ -136,7 +153,7 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(1u, rasterInvalidations->size());
|
| + ASSERT_EQ(1u, rasterInvalidations->size());
|
| EXPECT_EQ(IntRect(0, 0, 70, 140), (*rasterInvalidations)[0].rect);
|
| EXPECT_EQ(PaintInvalidationLocationChange, (*rasterInvalidations)[0].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
| @@ -148,13 +165,13 @@ TEST_F(BoxPaintInvalidatorTest, SubpixelChangeWithoutVisualRectChange) {
|
| EXPECT_EQ(LayoutRect(0, 0, 70, 140), targetObject->previousVisualRect());
|
| rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(1u, rasterInvalidations->size());
|
| + ASSERT_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) {
|
| +TEST_P(BoxPaintInvalidatorTest, ResizeRotated) {
|
| ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
|
|
| Element* target = document().getElementById("target");
|
| @@ -168,13 +185,13 @@ TEST_F(BoxPaintInvalidatorTest, ResizeRotated) {
|
| document().view()->updateAllLifecyclePhases();
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(1u, rasterInvalidations->size());
|
| + ASSERT_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) {
|
| +TEST_P(BoxPaintInvalidatorTest, ResizeRotatedChild) {
|
| ScopedSlimmingPaintInvalidationForTest scopedSlimmingPaintInvalidation(true);
|
|
|
| Element* target = document().getElementById("target");
|
| @@ -193,10 +210,250 @@ TEST_F(BoxPaintInvalidatorTest, ResizeRotatedChild) {
|
| document().view()->updateAllLifecyclePhases();
|
| const auto* rasterInvalidations =
|
| &getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| - EXPECT_EQ(1u, rasterInvalidations->size());
|
| + ASSERT_EQ(1u, rasterInvalidations->size());
|
| EXPECT_EQ(IntRect(-43, 21, 107, 107), (*rasterInvalidations)[0].rect);
|
| EXPECT_EQ(PaintInvalidationBorderBoxChange, (*rasterInvalidations)[0].reason);
|
| document().view()->setTracksPaintInvalidations(false);
|
| }
|
|
|
| +TEST_P(BoxPaintInvalidatorTest, CompositedLayoutViewResize) {
|
| + enableCompositing();
|
| + Element* target = document().getElementById("target");
|
| + target->setAttribute(HTMLNames::styleAttr, "height: 2000px");
|
| + document().view()->updateAllLifecyclePhases();
|
| +
|
| + // Resize the content.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + target->setAttribute(HTMLNames::styleAttr, "height: 3000px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + const auto& rasterInvalidations =
|
| + getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| + if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
|
| + // TODO(skobes): Treat LayoutView in the same way as normal objects having
|
| + // background-attachment: local. crbug.com/568847.
|
| + EXPECT_EQ(1u, rasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 2020, 70, 1020), rasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
|
| + rasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
|
| + } else {
|
| + EXPECT_EQ(2u, rasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 2040, 800, 1000), rasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(&layoutView()),
|
| + rasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
|
| + EXPECT_EQ(IntRect(0, 2020, 70, 1020), rasterInvalidations[1].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
|
| + rasterInvalidations[1].client);
|
| + EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[1].reason);
|
| + }
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +
|
| + // Resize the viewport. No paint invalidation.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + document().view()->resize(800, 1000);
|
| + document().view()->updateAllLifecyclePhases();
|
| + EXPECT_FALSE(getRasterInvalidationTracking());
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| +TEST_P(BoxPaintInvalidatorTest, NonCompositedLayoutViewResize) {
|
| + setBodyInnerHTML(
|
| + "<style>"
|
| + " body { margin: 0 }"
|
| + " iframe { display: block; width: 100px; height: 100px; border: none; }"
|
| + "</style>"
|
| + "<iframe id='iframe'></iframe>");
|
| + Document& frameDocument = setupChildIframe(
|
| + "iframe",
|
| + "<style>"
|
| + " ::-webkit-scrollbar { display: none }"
|
| + " body { margin: 0; background: green; height: 0 }"
|
| + "</style>"
|
| + "<div id='content' style='width: 200px; height: 200px'></div>");
|
| + document().view()->updateAllLifecyclePhases();
|
| + Element* iframe = document().getElementById("iframe");
|
| + Element* content = frameDocument.getElementById("content");
|
| + EXPECT_EQ(layoutView(),
|
| + content->layoutObject()->containerForPaintInvalidation());
|
| +
|
| + // Resize the content.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + content->setAttribute(HTMLNames::styleAttr, "height: 500px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + // No invalidation because the changed part of layout overflow is clipped.
|
| + EXPECT_FALSE(getRasterInvalidationTracking());
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +
|
| + // Resize the iframe.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + iframe->setAttribute(HTMLNames::styleAttr, "height: 200px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + const auto& rasterInvalidations =
|
| + getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| + ASSERT_EQ(2u, rasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 100, 100, 100), rasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(iframe->layoutObject()),
|
| + rasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
|
| + EXPECT_EQ(
|
| + static_cast<const DisplayItemClient*>(content->layoutObject()->view()),
|
| + rasterInvalidations[1].client);
|
| + if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
|
| + // TODO(skobes): Treat LayoutView in the same way as normal objects having
|
| + // background-attachment: local. crbug.com/568847.
|
| + EXPECT_EQ(IntRect(0, 0, 100, 200), rasterInvalidations[1].rect);
|
| + EXPECT_EQ(PaintInvalidationFull, rasterInvalidations[1].reason);
|
| + } else {
|
| + EXPECT_EQ(IntRect(0, 100, 100, 100), rasterInvalidations[1].rect);
|
| + EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[1].reason);
|
| + }
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| +TEST_P(BoxPaintInvalidatorTest, CompositedBackgroundAttachmentLocalResize) {
|
| + enableCompositing();
|
| +
|
| + Element* target = document().getElementById("target");
|
| + target->setAttribute(HTMLNames::classAttr, "local-background");
|
| + target->setAttribute(HTMLNames::styleAttr, "will-change: transform");
|
| + target->setInnerHTML(
|
| + "<div id=child style='width: 500px; height: 500px'></div>",
|
| + ASSERT_NO_EXCEPTION);
|
| + Element* child = document().getElementById("child");
|
| + document().view()->updateAllLifecyclePhases();
|
| +
|
| + // Resize the content.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + child->setAttribute(HTMLNames::styleAttr, "width: 500px; height: 1000px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + GraphicsLayer* containerLayer = toLayoutBoxModelObject(target->layoutObject())
|
| + ->layer()
|
| + ->graphicsLayerBacking();
|
| + GraphicsLayer* contentsLayer = toLayoutBoxModelObject(target->layoutObject())
|
| + ->layer()
|
| + ->graphicsLayerBackingForScrolling();
|
| + // No invalidation on the container layer.
|
| + EXPECT_FALSE(containerLayer->getRasterInvalidationTracking());
|
| + // Incremental invalidation of background on contents layer.
|
| + const auto& contentsRasterInvalidations =
|
| + contentsLayer->getRasterInvalidationTracking()
|
| + ->trackedRasterInvalidations;
|
| + ASSERT_EQ(1u, contentsRasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 500, 500, 500), contentsRasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
|
| + contentsRasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationBackgroundOnScrollingContentsLayer,
|
| + contentsRasterInvalidations[0].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +
|
| + // Resize the container.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + target->setAttribute(HTMLNames::styleAttr,
|
| + "will-change: transform; height: 200px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + // No invalidation on the contents layer.
|
| + EXPECT_FALSE(contentsLayer->getRasterInvalidationTracking());
|
| + // Incremental invalidation on the container layer.
|
| + const auto& containerRasterInvalidations =
|
| + containerLayer->getRasterInvalidationTracking()
|
| + ->trackedRasterInvalidations;
|
| + ASSERT_EQ(1u, containerRasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 120, 70, 120), containerRasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
|
| + containerRasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationIncremental,
|
| + containerRasterInvalidations[0].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| +TEST_P(BoxPaintInvalidatorTest,
|
| + CompositedBackgroundAttachmentLocalGradientResize) {
|
| + enableCompositing();
|
| +
|
| + Element* target = document().getElementById("target");
|
| + target->setAttribute(HTMLNames::classAttr, "local-background gradient");
|
| + target->setAttribute(HTMLNames::styleAttr, "will-change: transform");
|
| + target->setInnerHTML(
|
| + "<div id='child' style='width: 500px; height: 500px'></div>",
|
| + ASSERT_NO_EXCEPTION);
|
| + Element* child = document().getElementById("child");
|
| + document().view()->updateAllLifecyclePhases();
|
| +
|
| + // Resize the content.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + child->setAttribute(HTMLNames::styleAttr, "width: 500px; height: 1000px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + GraphicsLayer* containerLayer = toLayoutBoxModelObject(target->layoutObject())
|
| + ->layer()
|
| + ->graphicsLayerBacking();
|
| + GraphicsLayer* contentsLayer = toLayoutBoxModelObject(target->layoutObject())
|
| + ->layer()
|
| + ->graphicsLayerBackingForScrolling();
|
| + // No invalidation on the container layer.
|
| + EXPECT_FALSE(containerLayer->getRasterInvalidationTracking());
|
| + // Full invalidation of background on contents layer because the gradient
|
| + // background is resized.
|
| + const auto& contentsRasterInvalidations =
|
| + contentsLayer->getRasterInvalidationTracking()
|
| + ->trackedRasterInvalidations;
|
| + ASSERT_EQ(1u, contentsRasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 0, 500, 1000), contentsRasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
|
| + contentsRasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationBackgroundOnScrollingContentsLayer,
|
| + contentsRasterInvalidations[0].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +
|
| + // Resize the container.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + target->setAttribute(HTMLNames::styleAttr,
|
| + "will-change: transform; height: 200px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + EXPECT_FALSE(contentsLayer->getRasterInvalidationTracking());
|
| + // Full invalidation on the container layer.
|
| + const auto& containerRasterInvalidations =
|
| + containerLayer->getRasterInvalidationTracking()
|
| + ->trackedRasterInvalidations;
|
| + ASSERT_EQ(1u, containerRasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 0, 70, 240), containerRasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
|
| + containerRasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationBorderBoxChange,
|
| + containerRasterInvalidations[0].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| +TEST_P(BoxPaintInvalidatorTest, NonCompositedBackgroundAttachmentLocalResize) {
|
| + Element* target = document().getElementById("target");
|
| + target->setAttribute(HTMLNames::classAttr, "local-background");
|
| + target->setInnerHTML(
|
| + "<div id=child style='width: 500px; height: 500px'></div>",
|
| + ASSERT_NO_EXCEPTION);
|
| + Element* child = document().getElementById("child");
|
| + document().view()->updateAllLifecyclePhases();
|
| + EXPECT_EQ(&layoutView(),
|
| + &target->layoutObject()->containerForPaintInvalidation());
|
| +
|
| + // Resize the content.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + child->setAttribute(HTMLNames::styleAttr, "width: 500px; height: 1000px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + // No invalidation because the changed part is invisible.
|
| + EXPECT_FALSE(getRasterInvalidationTracking());
|
| +
|
| + // Resize the container.
|
| + document().view()->setTracksPaintInvalidations(true);
|
| + target->setAttribute(HTMLNames::styleAttr, "height: 200px");
|
| + document().view()->updateAllLifecyclePhases();
|
| + const auto& rasterInvalidations =
|
| + getRasterInvalidationTracking()->trackedRasterInvalidations;
|
| + ASSERT_EQ(1u, rasterInvalidations.size());
|
| + EXPECT_EQ(IntRect(0, 120, 70, 120), rasterInvalidations[0].rect);
|
| + EXPECT_EQ(static_cast<const DisplayItemClient*>(target->layoutObject()),
|
| + rasterInvalidations[0].client);
|
| + EXPECT_EQ(PaintInvalidationIncremental, rasterInvalidations[0].reason);
|
| + document().view()->setTracksPaintInvalidations(false);
|
| +}
|
| +
|
| } // namespace blink
|
|
|