| Index: Source/core/paint/ViewDisplayListTest.cpp
|
| diff --git a/Source/core/paint/ViewDisplayListTest.cpp b/Source/core/paint/ViewDisplayListTest.cpp
|
| index 7f1e3b1d01c81e6f2607f24bacb6a19948f679fe..26301ecbbeffd370b6f7056c8e6ce47f950a192a 100644
|
| --- a/Source/core/paint/ViewDisplayListTest.cpp
|
| +++ b/Source/core/paint/ViewDisplayListTest.cpp
|
| @@ -7,6 +7,7 @@
|
| #include "core/paint/LayerClipRecorder.h"
|
| #include "core/paint/LayerPainter.h"
|
| #include "core/paint/RenderDrawingRecorder.h"
|
| +#include "core/paint/SubtreeInfoRecorder.h"
|
| #include "core/rendering/RenderView.h"
|
| #include "core/rendering/RenderingTestHelper.h"
|
| #include "core/rendering/compositing/RenderLayerCompositor.h"
|
| @@ -42,7 +43,6 @@ private:
|
| virtual void TearDown() override
|
| {
|
| RuntimeEnabledFeatures::setSlimmingPaintEnabled(false);
|
| - RuntimeEnabledFeatures::setSlimmingPaintDisplayItemCacheEnabled(false);
|
| }
|
|
|
| RenderView* m_renderView;
|
| @@ -60,8 +60,8 @@ public:
|
| };
|
|
|
| #ifndef NDEBUG
|
| -#define TRACE_DISPLAY_ITEMS(expected, actual) \
|
| - String trace = "Expected: " + (expected).asDebugString() + " Actual: " + (actual).asDebugString(); \
|
| +#define TRACE_DISPLAY_ITEMS(i, expected, actual) \
|
| + String trace = String::format("%d: ", (int)i) + "Expected: " + (expected).asDebugString() + " Actual: " + (actual).asDebugString(); \
|
| SCOPED_TRACE(trace.utf8().data());
|
| #else
|
| #define TRACE_DISPLAY_ITEMS(expected, actual)
|
| @@ -71,7 +71,7 @@ public:
|
| EXPECT_EQ((size_t)expectedSize, actual.size()); \
|
| const TestDisplayItem expected[] = { __VA_ARGS__ }; \
|
| for (size_t index = 0; index < std::min<size_t>(actual.size(), expectedSize); index++) { \
|
| - TRACE_DISPLAY_ITEMS(expected[index], *actual[index]); \
|
| + TRACE_DISPLAY_ITEMS(index, expected[index], *actual[index]); \
|
| EXPECT_EQ(expected[index].client(), actual[index]->client()); \
|
| EXPECT_EQ(expected[index].type(), actual[index]->type()); \
|
| } \
|
| @@ -94,7 +94,7 @@ void drawClippedRect(GraphicsContext* context, RenderLayerModelObject* renderer,
|
| drawRect(context, renderer, phase, bound);
|
| }
|
|
|
| -TEST_F(ViewDisplayListTest, ViewDisplayListTest_NestedRecorders)
|
| +TEST_F(ViewDisplayListTest, NestedRecorders)
|
| {
|
| GraphicsContext context(nullptr, &rootDisplayItemList());
|
| FloatRect bound = renderView()->viewRect();
|
| @@ -108,7 +108,7 @@ TEST_F(ViewDisplayListTest, ViewDisplayListTest_NestedRecorders)
|
| TestDisplayItem(renderView(), DisplayItem::EndClip));
|
| }
|
|
|
| -TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateBasic)
|
| +TEST_F(ViewDisplayListTest, UpdateBasic)
|
| {
|
| setBodyInnerHTML("<div id='first'><div id='second'></div></div>");
|
| RenderObject* first = document().body()->firstChild()->renderer();
|
| @@ -135,7 +135,7 @@ TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateBasic)
|
| TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
|
| }
|
|
|
| -TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateSwapOrder)
|
| +TEST_F(ViewDisplayListTest, UpdateSwapOrder)
|
| {
|
| setBodyInnerHTML("<div id='first'><div id='second'></div></div><div id='unaffected'></div>");
|
| RenderObject* first = document().body()->firstChild()->renderer();
|
| @@ -165,7 +165,7 @@ TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateSwapOrder)
|
| TestDisplayItem(unaffected, DisplayItem::DrawingPaintPhaseBlockBackground));
|
| }
|
|
|
| -TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateNewItemInMiddle)
|
| +TEST_F(ViewDisplayListTest, UpdateNewItemInMiddle)
|
| {
|
| setBodyInnerHTML("<div id='first'><div id='second'><div id='third'></div></div></div>");
|
| RenderObject* first = document().body()->firstChild()->renderer();
|
| @@ -193,7 +193,7 @@ TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateNewItemInMiddle)
|
| TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground));
|
| }
|
|
|
| -TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateInvalidationWithPhases)
|
| +TEST_F(ViewDisplayListTest, UpdateInvalidationWithPhases)
|
| {
|
| setBodyInnerHTML("<div id='first'><div id='second'></div></div><div id='third'></div>");
|
| RenderObject* first = document().body()->firstChild()->renderer();
|
| @@ -260,40 +260,7 @@ TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateInvalidationWithPhases)
|
| #endif
|
| }
|
|
|
| -// This test is only applicable when we support incremental paint.
|
| -TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddFirstNoOverlap)
|
| -{
|
| - setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
|
| - RenderObject* first = document().body()->firstChild()->renderer();
|
| - RenderObject* second = document().body()->firstChild()->nextSibling()->renderer();
|
| - GraphicsContext context(nullptr, &rootDisplayItemList());
|
| -
|
| - drawRect(&context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
|
| - drawRect(&context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
|
| -
|
| - EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
|
| -
|
| - rootDisplayItemList().invalidate(first->displayItemClient());
|
| - drawRect(&context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 50));
|
| - drawRect(&context, first, PaintPhaseOutline, FloatRect(100, 100, 50, 50));
|
| -
|
| - EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 4,
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline),
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
|
| -
|
| - rootDisplayItemList().invalidate(first->displayItemClient());
|
| -
|
| - EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
|
| -}
|
| -
|
| -// This test is only applicable when we support incremental paint.
|
| -TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddFirstOverlap)
|
| +TEST_F(ViewDisplayListTest, UpdateAddFirstOverlap)
|
| {
|
| setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
|
| RenderObject* first = document().body()->firstChild()->renderer();
|
| @@ -302,6 +269,7 @@ TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddFirstOverlap)
|
|
|
| drawRect(&context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
|
| drawRect(&context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
|
| + rootDisplayItemList().endNewPaints();
|
|
|
| EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| @@ -313,6 +281,7 @@ TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddFirstOverlap)
|
| drawRect(&context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
|
| drawRect(&context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
|
| drawRect(&context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
|
| + rootDisplayItemList().endNewPaints();
|
|
|
| EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 4,
|
| TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| @@ -323,46 +292,14 @@ TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddFirstOverlap)
|
| rootDisplayItemList().invalidate(first->displayItemClient());
|
| drawRect(&context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
|
| drawRect(&context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
|
| + rootDisplayItemList().endNewPaints();
|
|
|
| EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline));
|
| }
|
|
|
| -// This test is only applicable when we support incremental paint.
|
| -TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddLastNoOverlap)
|
| -{
|
| - setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
|
| - RenderObject* first = document().body()->firstChild()->renderer();
|
| - RenderObject* second = document().body()->firstChild()->nextSibling()->renderer();
|
| - GraphicsContext context(nullptr, &rootDisplayItemList());
|
| -
|
| - drawRect(&context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 50));
|
| - drawRect(&context, first, PaintPhaseOutline, FloatRect(100, 100, 50, 50));
|
| -
|
| - EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
|
| -
|
| - rootDisplayItemList().invalidate(second->displayItemClient());
|
| - drawRect(&context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
|
| - drawRect(&context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
|
| -
|
| - EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 4,
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(second, DisplayItem::DrawingPaintPhaseOutline),
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
|
| -
|
| - rootDisplayItemList().invalidate(second->displayItemClient());
|
| -
|
| - EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
|
| -}
|
| -
|
| -// This test is only applicable when we support incremental paint.
|
| -TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddLastOverlap)
|
| +TEST_F(ViewDisplayListTest, UpdateAddLastOverlap)
|
| {
|
| setBodyInnerHTML("<div id='first'></div><div id='second'></div>");
|
| RenderObject* first = document().body()->firstChild()->renderer();
|
| @@ -371,6 +308,7 @@ TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddLastOverlap)
|
|
|
| drawRect(&context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150));
|
| drawRect(&context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
|
| + rootDisplayItemList().endNewPaints();
|
|
|
| EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| @@ -382,6 +320,7 @@ TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddLastOverlap)
|
| drawRect(&context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
|
| drawRect(&context, second, PaintPhaseBlockBackground, FloatRect(200, 200, 50, 50));
|
| drawRect(&context, second, PaintPhaseOutline, FloatRect(200, 200, 50, 50));
|
| + rootDisplayItemList().endNewPaints();
|
|
|
| EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 4,
|
| TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| @@ -393,13 +332,14 @@ TEST_F(ViewDisplayListTest, DISABLED_ViewDisplayListTest_UpdateAddLastOverlap)
|
| rootDisplayItemList().invalidate(second->displayItemClient());
|
| drawRect(&context, first, PaintPhaseBlockBackground, FloatRect(100, 100, 150, 150));
|
| drawRect(&context, first, PaintPhaseOutline, FloatRect(100, 100, 150, 150));
|
| + rootDisplayItemList().endNewPaints();
|
|
|
| EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| TestDisplayItem(first, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| TestDisplayItem(first, DisplayItem::DrawingPaintPhaseOutline));
|
| }
|
|
|
| -TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateClip)
|
| +TEST_F(ViewDisplayListTest, UpdateClip)
|
| {
|
| setBodyInnerHTML("<div id='first'><div id='second'></div></div>");
|
| RenderLayerModelObject* firstRenderer = toRenderLayerModelObject(document().body()->firstChild()->renderer());
|
| @@ -447,8 +387,6 @@ TEST_F(ViewDisplayListTest, ViewDisplayListTest_UpdateClip)
|
|
|
| TEST_F(ViewDisplayListTest, CachedDisplayItems)
|
| {
|
| - RuntimeEnabledFeatures::setSlimmingPaintDisplayItemCacheEnabled(true);
|
| -
|
| setBodyInnerHTML("<div id='first'><div id='second'></div></div>");
|
| RenderLayerModelObject* firstRenderer = toRenderLayerModelObject(document().body()->firstChild()->renderer());
|
| RenderLayerModelObject* secondRenderer = toRenderLayerModelObject(document().body()->firstChild()->firstChild()->renderer());
|
| @@ -495,6 +433,8 @@ TEST_F(ViewDisplayListTest, FullDocumentPaintingWithCaret)
|
| RenderView* renderView = document().renderView();
|
| RenderLayer* rootLayer = renderView->layer();
|
| RenderObject* htmlRenderer = document().documentElement()->renderer();
|
| + showRenderTree(htmlRenderer);
|
| + RenderObject* bodyRenderer = document().body()->renderer();
|
| Element* div = toElement(document().body()->firstChild());
|
| RenderObject* divRenderer = document().body()->firstChild()->renderer();
|
| RenderObject* textRenderer = div->firstChild()->renderer();
|
| @@ -505,9 +445,25 @@ TEST_F(ViewDisplayListTest, FullDocumentPaintingWithCaret)
|
| LayerPainter(*rootLayer).paintLayerContents(&context, paintingInfo, PaintLayerPaintingCompositingAllPhases);
|
| rootDisplayItemList().endNewPaints();
|
|
|
| - EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 2,
|
| + EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 17,
|
| + TestDisplayItem(renderView, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| TestDisplayItem(htmlRenderer, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| - TestDisplayItem(textRenderer, DisplayItem::DrawingPaintPhaseForeground));
|
| + TestDisplayItem(bodyRenderer, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(divRenderer, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(divRenderer, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(bodyRenderer, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(htmlRenderer, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(renderView, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| +
|
| + TestDisplayItem(renderView, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(htmlRenderer, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(bodyRenderer, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(divRenderer, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(textRenderer, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(divRenderer, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(bodyRenderer, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(htmlRenderer, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(renderView, DisplayItem::DrawingPaintPhaseForeground));
|
|
|
| div->focus();
|
| document().view()->updateLayoutAndStyleForPainting();
|
| @@ -520,5 +476,160 @@ TEST_F(ViewDisplayListTest, FullDocumentPaintingWithCaret)
|
| TestDisplayItem(divRenderer, DisplayItem::DrawingPaintPhaseCaret));
|
| }
|
|
|
| +TEST_F(ViewDisplayListTest, ComplexUpdateSwapOrder)
|
| +{
|
| + setBodyInnerHTML("<div id='container1'><div id='content1'></div></div>"
|
| + "<div id='container2'><div id='content2'></div></div>");
|
| + RenderObject* container1 = document().body()->firstChild()->renderer();
|
| + RenderObject* content1 = document().body()->firstChild()->firstChild()->renderer();
|
| + RenderObject* container2 = document().body()->firstChild()->nextSibling()->renderer();
|
| + RenderObject* content2 = document().body()->firstChild()->nextSibling()->firstChild()->renderer();
|
| + GraphicsContext context(nullptr, &rootDisplayItemList());
|
| +
|
| + drawRect(&context, container1, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
|
| + drawRect(&context, content1, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
|
| + drawRect(&context, content1, PaintPhaseForeground, FloatRect(100, 100, 50, 200));
|
| + drawRect(&context, container1, PaintPhaseForeground, FloatRect(100, 100, 100, 100));
|
| + drawRect(&context, container2, PaintPhaseBlockBackground, FloatRect(100, 200, 100, 100));
|
| + drawRect(&context, content2, PaintPhaseBlockBackground, FloatRect(100, 200, 50, 200));
|
| + drawRect(&context, content2, PaintPhaseForeground, FloatRect(100, 200, 50, 200));
|
| + drawRect(&context, container2, PaintPhaseForeground, FloatRect(100, 200, 100, 100));
|
| + rootDisplayItemList().endNewPaints();
|
| +
|
| + EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 8,
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground));
|
| +
|
| + // Simulate the situation when container1 e.g. gets a z-index that is now greater than container2.
|
| + rootDisplayItemList().invalidate(container1->displayItemClient());
|
| + drawRect(&context, container2, PaintPhaseBlockBackground, FloatRect(100, 200, 100, 100));
|
| + drawRect(&context, content2, PaintPhaseBlockBackground, FloatRect(100, 200, 50, 200));
|
| + drawRect(&context, content2, PaintPhaseForeground, FloatRect(100, 200, 50, 200));
|
| + drawRect(&context, container2, PaintPhaseForeground, FloatRect(100, 200, 100, 100));
|
| + drawRect(&context, container1, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
|
| + drawRect(&context, content1, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
|
| + drawRect(&context, content1, PaintPhaseForeground, FloatRect(100, 100, 50, 200));
|
| + drawRect(&context, container1, PaintPhaseForeground, FloatRect(100, 100, 100, 100));
|
| + rootDisplayItemList().endNewPaints();
|
| +
|
| + EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 8,
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground));
|
| +}
|
| +
|
| +TEST_F(ViewDisplayListTest, CachedSubtreeSwapOrder)
|
| +{
|
| + setBodyInnerHTML("<div id='container1'><div id='content1'></div></div>"
|
| + "<div id='container2'><div id='content2'></div></div>");
|
| + RenderObject* container1 = document().body()->firstChild()->renderer();
|
| + RenderObject* content1 = document().body()->firstChild()->firstChild()->renderer();
|
| + RenderObject* container2 = document().body()->firstChild()->nextSibling()->renderer();
|
| + RenderObject* content2 = document().body()->firstChild()->nextSibling()->firstChild()->renderer();
|
| + GraphicsContext context(nullptr, &rootDisplayItemList());
|
| +
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container1, PaintPhaseBlockBackground);
|
| + r.begin();
|
| + drawRect(&context, container1, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
|
| + drawRect(&context, content1, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
|
| + }
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container1, PaintPhaseForeground);
|
| + r.begin();
|
| + drawRect(&context, content1, PaintPhaseForeground, FloatRect(100, 100, 50, 200));
|
| + drawRect(&context, container1, PaintPhaseForeground, FloatRect(100, 100, 100, 100));
|
| + }
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container2, PaintPhaseBlockBackground);
|
| + r.begin();
|
| + drawRect(&context, container2, PaintPhaseBlockBackground, FloatRect(100, 200, 100, 100));
|
| + drawRect(&context, content2, PaintPhaseBlockBackground, FloatRect(100, 200, 50, 200));
|
| + }
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container2, PaintPhaseForeground);
|
| + r.begin();
|
| + drawRect(&context, content2, PaintPhaseForeground, FloatRect(100, 200, 50, 200));
|
| + drawRect(&context, container2, PaintPhaseForeground, FloatRect(100, 200, 100, 100));
|
| + }
|
| + rootDisplayItemList().endNewPaints();
|
| +
|
| + // FIXME: Too many empty BeginSubtree and EndSubtree pairs.
|
| + EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 16,
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground), // BeginSubtree
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground), // EndSubtree
|
| +
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground), // BeginSubtree
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground), // EndSubtree
|
| +
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground), // BeginSubtree
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground), // EndSubtree
|
| +
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground), // BeginSubtree
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground)); // EndSubtree
|
| +
|
| + // Simulate the situation when container1 e.g. gets a z-index that is now greater than container2,
|
| + // and at the same time container2 is scrolled out of viewport.
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container2, PaintPhaseBlockBackground);
|
| + }
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container2, PaintPhaseForeground);
|
| + }
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container1, PaintPhaseBlockBackground);
|
| + r.begin();
|
| + drawRect(&context, container1, PaintPhaseBlockBackground, FloatRect(100, 100, 100, 100));
|
| + drawRect(&context, content1, PaintPhaseBlockBackground, FloatRect(100, 100, 50, 200));
|
| + }
|
| + {
|
| + SubtreeInfoRecorder r(&context, *container1, PaintPhaseForeground);
|
| + r.begin();
|
| + drawRect(&context, content1, PaintPhaseForeground, FloatRect(100, 100, 50, 200));
|
| + drawRect(&context, container1, PaintPhaseForeground, FloatRect(100, 100, 100, 100));
|
| + }
|
| + rootDisplayItemList().endNewPaints();
|
| +
|
| + EXPECT_DISPLAY_LIST(rootDisplayItemList().paintList(), 16,
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground), // BeginSubtree
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseBlockBackground), // EndSubtree
|
| +
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground), // BeginSubtree
|
| + TestDisplayItem(content2, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container2, DisplayItem::DrawingPaintPhaseForeground), // EndSubtree
|
| +
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground), // BeginSubtree
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseBlockBackground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseBlockBackground), // EndSubtree
|
| +
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground), // BeginSubtree
|
| + TestDisplayItem(content1, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground),
|
| + TestDisplayItem(container1, DisplayItem::DrawingPaintPhaseForeground)); // EndSubtree
|
| +}
|
| +
|
| } // anonymous namespace
|
| } // namespace blink
|
|
|