// TODO(wangxianzhu): Create a version for slimming paint v2 when it supports interest rect TEST_F(TableCellPainterTest, TableCellBackgroundInterestRect) { setBodyInnerHTML( "<style>" " td { width: 200px; height: 200px; border: none; }" " tr { background-color: blue; }" " table { border: none; border-spacing: 0; border-collapse: collapse; }" "</style>" "<table>" " <tr><td id='cell1'></td></tr>" " <tr><td id='cell2'></td></tr>" "</table>"); LayoutView& layoutView = *document().layoutView(); PaintLayer& rootLayer = *layoutView.layer(); LayoutObject& cell1 = *document().getElementById("cell1")->layoutObject(); LayoutObject& cell2 = *document().getElementById("cell2")->layoutObject(); GraphicsContext context(&rootDisplayItemList()); PaintLayerPaintingInfo paintingInfo(&rootLayer, LayoutRect(0, 0, 200, 200), GlobalPaintNormalPhase, LayoutSize()); PaintLayerPainter(rootLayer).paintLayerContents(&context, paintingInfo, PaintLayerPaintingCompositingAllPhases); rootDisplayItemList().commitNewDisplayItems(); EXPECT_DISPLAY_LIST(rootDisplayItemList().displayItems(), 2, TestDisplayItem(layoutView, DisplayItem::BoxDecorationBackground), TestDisplayItem(cell1, DisplayItem::TableCellBackgroundFromRow)); PaintLayerPaintingInfo paintingInfo1(&rootLayer, LayoutRect(0, 300, 200, 200), GlobalPaintNormalPhase, LayoutSize()); PaintLayerPainter(rootLayer).paintLayerContents(&context, paintingInfo1, PaintLayerPaintingCompositingAllPhases); rootDisplayItemList().commitNewDisplayItems(); EXPECT_DISPLAY_LIST(rootDisplayItemList().displayItems(), 2, TestDisplayItem(layoutView, DisplayItem::BoxDecorationBackground), TestDisplayItem(cell2, DisplayItem::TableCellBackgroundFromRow)); }
TEST_P(PaintControllerPaintTestForSlimmingPaintV1AndV2, InlineRelayout) { setBodyInnerHTML("<div id='div' style='width:100px; height: 200px'>AAAAAAAAAA BBBBBBBBBB</div>"); PaintLayer& rootLayer = *layoutView().layer(); Element& div = *toElement(document().body()->firstChild()); LayoutBlock& divBlock = *toLayoutBlock(document().body()->firstChild()->layoutObject()); LayoutText& text = *toLayoutText(divBlock.firstChild()); InlineTextBox& firstTextBox = *text.firstTextBox(); if (RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled()) { EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 4, TestDisplayItem(rootLayer, DisplayItem::Subsequence), TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(firstTextBox, foregroundType), TestDisplayItem(rootLayer, DisplayItem::EndSubsequence)); } else { GraphicsContext context(rootPaintController()); PaintLayerPaintingInfo paintingInfo(&rootLayer, LayoutRect(0, 0, 800, 600), GlobalPaintNormalPhase, LayoutSize()); PaintLayerPainter(rootLayer).paintLayerContents(&context, paintingInfo, PaintLayerPaintingCompositingAllPhases); rootPaintController().commitNewDisplayItems(); EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 2, TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(firstTextBox, foregroundType)); } div.setAttribute(HTMLNames::styleAttr, "width: 10px; height: 200px"); document().view()->updateAllLifecyclePhases(); LayoutText& newText = *toLayoutText(divBlock.firstChild()); InlineTextBox& newFirstTextBox = *newText.firstTextBox(); InlineTextBox& secondTextBox = *newText.firstTextBox()->nextTextBox(); if (RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled()) { EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 5, TestDisplayItem(rootLayer, DisplayItem::Subsequence), TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(newFirstTextBox, foregroundType), TestDisplayItem(secondTextBox, foregroundType), TestDisplayItem(rootLayer, DisplayItem::EndSubsequence)); } else { GraphicsContext context(rootPaintController()); PaintLayerPaintingInfo paintingInfo(&rootLayer, LayoutRect(0, 0, 800, 600), GlobalPaintNormalPhase, LayoutSize()); PaintLayerPainter(rootLayer).paintLayerContents(&context, paintingInfo, PaintLayerPaintingCompositingAllPhases); rootPaintController().commitNewDisplayItems(); EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 3, TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(newFirstTextBox, foregroundType), TestDisplayItem(secondTextBox, foregroundType)); } }
TEST_P(PaintControllerPaintTestForSlimmingPaintV1AndV2, FullDocumentPaintingWithCaret) { setBodyInnerHTML("<div id='div' contentEditable='true' style='outline:none'>XYZ</div>"); document().page()->focusController().setActive(true); document().page()->focusController().setFocused(true); PaintLayer& rootLayer = *layoutView().layer(); Element& div = *toElement(document().body()->firstChild()); LayoutObject& divLayoutObject = *document().body()->firstChild()->layoutObject(); InlineTextBox& textInlineBox = *toLayoutText(div.firstChild()->layoutObject())->firstTextBox(); if (RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled()) { EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 4, TestDisplayItem(rootLayer, DisplayItem::Subsequence), TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(textInlineBox, foregroundType), TestDisplayItem(rootLayer, DisplayItem::EndSubsequence)); } else { GraphicsContext context(rootPaintController()); PaintLayerPaintingInfo paintingInfo(&rootLayer, LayoutRect(0, 0, 800, 600), GlobalPaintNormalPhase, LayoutSize()); PaintLayerPainter(rootLayer).paintLayerContents(&context, paintingInfo, PaintLayerPaintingCompositingAllPhases); rootPaintController().commitNewDisplayItems(); EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 2, TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(textInlineBox, foregroundType)); } div.focus(); document().view()->updateAllLifecyclePhases(); if (RuntimeEnabledFeatures::slimmingPaintSynchronizedPaintingEnabled()) { EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 5, TestDisplayItem(rootLayer, DisplayItem::Subsequence), TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(textInlineBox, foregroundType), TestDisplayItem(divLayoutObject, DisplayItem::Caret), // New! TestDisplayItem(rootLayer, DisplayItem::EndSubsequence)); } else { GraphicsContext context(rootPaintController()); PaintLayerPaintingInfo paintingInfo(&rootLayer, LayoutRect(0, 0, 800, 600), GlobalPaintNormalPhase, LayoutSize()); PaintLayerPainter(rootLayer).paintLayerContents(&context, paintingInfo, PaintLayerPaintingCompositingAllPhases); rootPaintController().commitNewDisplayItems(); EXPECT_DISPLAY_LIST(rootPaintController().displayItemList(), 3, TestDisplayItem(layoutView(), backgroundType), TestDisplayItem(textInlineBox, foregroundType), TestDisplayItem(divLayoutObject, DisplayItem::Caret)); // New! } }
void PaintLayerReflectionInfo::paint(GraphicsContext* context, const PaintLayerPaintingInfo& paintingInfo, PaintLayerFlags flags) { if (m_isPaintingInsideReflection) return; // Mark that we are now inside replica painting. m_isPaintingInsideReflection = true; PaintLayerPainter(*reflectionLayer()).paintLayer(context, paintingInfo, flags); m_isPaintingInsideReflection = false; }