Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(593)

Unified Diff: third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp

Issue 1626623002: Skip PaintPhaseDescendantBlockBackgroundsOnly phase if possible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@FloatPhase
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp b/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
index bd2ecc4bf37ccfcf57fbd245eb81f81c30a870fd..6db7ba21a9d6c01bc3b8306f8c791e93b6784a45 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerPainterTest.cpp
@@ -284,8 +284,6 @@ TEST_P(PaintLayerPainterTest, PaintPhaseOutline)
EXPECT_TRUE(displayItemListContains(rootPaintController().displayItemList(), outlineDiv, DisplayItem::paintPhaseToDrawingType(PaintPhaseSelfOutlineOnly)));
}
-// TODO(wangxianzhu): This test weirdly caused memory leaks of a chromium content_browsertests test.
-// Figure out the issue and enable this test.
TEST_P(PaintLayerPainterTest, PaintPhaseFloat)
{
AtomicString styleWithoutFloat = "width: 50px; height: 50px; background-color: green";
@@ -321,4 +319,46 @@ TEST_P(PaintLayerPainterTest, PaintPhaseFloat)
EXPECT_TRUE(displayItemListContains(rootPaintController().displayItemList(), floatDiv, DisplayItem::BoxDecorationBackground));
}
+TEST_P(PaintLayerPainterTest, PaintPhaseBlockBackground)
+{
+ AtomicString styleWithoutBackground = "width: 50px; height: 50px";
+ AtomicString styleWithBackground = "background: blue; " + styleWithoutBackground;
+ setBodyInnerHTML(
+ "<div id='self-painting-layer' style='position: absolute'>"
+ " <div id='non-self-painting-layer' style='overflow: hidden'>"
+ " <div>"
+ " <div id='background'></div>"
+ " </div>"
+ " </div>"
+ "</div>");
+ LayoutObject& backgroundDiv = *document().getElementById("background")->layoutObject();
+ toHTMLElement(backgroundDiv.node())->setAttribute(HTMLNames::styleAttr, styleWithoutBackground);
+ document().view()->updateAllLifecyclePhases();
+
+ LayoutBlock& selfPaintingLayerObject = *toLayoutBlock(document().getElementById("self-painting-layer")->layoutObject());
+ PaintLayer& selfPaintingLayer = *selfPaintingLayerObject.layer();
+ ASSERT_TRUE(selfPaintingLayer.isSelfPaintingLayer());
+ PaintLayer& nonSelfPaintingLayer = *toLayoutBoxModelObject(document().getElementById("non-self-painting-layer")->layoutObject())->layer();
+ ASSERT_FALSE(nonSelfPaintingLayer.isSelfPaintingLayer());
+ ASSERT_TRUE(&nonSelfPaintingLayer == backgroundDiv.enclosingLayer());
+
+ EXPECT_FALSE(selfPaintingLayer.needsPaintPhaseDescendantBlockBackgrounds());
+ EXPECT_FALSE(nonSelfPaintingLayer.needsPaintPhaseDescendantBlockBackgrounds());
+
+ // Background on the self-painting-layer node itself doesn't affect PaintPhaseDescendantBlockBackgrounds.
+ toHTMLElement(selfPaintingLayerObject.node())->setAttribute(HTMLNames::styleAttr, "position: absolute; background: green");
+ document().view()->updateAllLifecyclePhases();
+ EXPECT_FALSE(selfPaintingLayer.needsPaintPhaseDescendantBlockBackgrounds());
+ EXPECT_FALSE(nonSelfPaintingLayer.needsPaintPhaseDescendantBlockBackgrounds());
+ EXPECT_TRUE(displayItemListContains(rootPaintController().displayItemList(), selfPaintingLayerObject, DisplayItem::BoxDecorationBackground));
+
+ // needsPaintPhaseDescendantBlockBackgrounds should be set when any descendant on the same layer has Background.
+ toHTMLElement(backgroundDiv.node())->setAttribute(HTMLNames::styleAttr, styleWithBackground);
+ updateLifecyclePhasesBeforePaint();
+ EXPECT_TRUE(selfPaintingLayer.needsPaintPhaseDescendantBlockBackgrounds());
+ EXPECT_FALSE(nonSelfPaintingLayer.needsPaintPhaseDescendantBlockBackgrounds());
+ paint();
+ EXPECT_TRUE(displayItemListContains(rootPaintController().displayItemList(), backgroundDiv, DisplayItem::BoxDecorationBackground));
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698