-
vollick@chromium.org authored
https://bugs.webkit.org/show_bug.cgi?id=107618 Reviewed by Simon Fraser. With composited scrolling, the scrolling contents layer paints the foreground and the main graphics layer paints the background. This causes a few problems: 1) If we create a foreground layer, we end up with two layers painting the foreground phase. 2) Focus rings / outlines paint into the foreground layer, so they end up moving around with the scrolling contents. 3) Neg z-order descendants paint in the the main graphics layer and will therefore not scroll. To deal with 1) we need to stop painting the foreground into both the foreground and scrolling contents layers. We also need to ensure that the foreground layer is the right size and has the right offset from renderer if we're on the composited scrolling path. To deal with 2) and 3), I have added a new graphics layer painting phase flag -- GraphicsLayerPaintCompositedScroll -- and applied it to two layers in the subtree created by RenderLayerBacking. This ultimately affects the paint phase passed to RenderLayer::paintLayerContents and allows us to paint the focus rings, outlines and negative z-order descendants into the proper layers. Source/WebCore: Tests: compositing/overflow/composited-scrolling-paint-phases.html compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html * page/Frame.h: Added a flag for including painting phases in the layer tree dump. (WebCore::GraphicsLayer::dumpProperties): Can now dump painting phase information, but only if requested. * platform/graphics/GraphicsLayerClient.h: Added a new entry to GraphicsLayerPaintingPhaseFlags for comp-scroll. (WebCore::RenderLayer::paintLayerContents): Updated the logic to account for the new comp-scroll-related paint phase flag. * rendering/RenderLayer.h: Added the RenderLayer painting phase counterpart to GraphicsLayerPaintCompositedScroll. * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Ensures that the foreground layer is sized correctly for comp-scroll. (WebCore::RenderLayerBacking::updateScrollingLayers): If we have a foreground layer, the scrolling contents layer no longer gets assigned the foreground painting phase. (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer): If we're comp-scrolling, then the primary layer gets the new phase. (WebCore::RenderLayerBacking::paintIntoLayer): Simply translates the new graphics layer painting phase to its render layer counterpart. (WebCore::RenderLayerCompositor::layerTreeAsText): * testing/Internals.cpp: (WebCore::Internals::layerTreeAsText): * testing/Internals.h: * testing/Internals.idl: The above changes are solely plumbing to allow layout tests to request that paint phase information be included in the layer tree dump. LayoutTests: * compositing/overflow/composited-scrolling-paint-phases-expected.txt: Added. * compositing/overflow/composited-scrolling-paint-phases.html: Added. * platform/mac/compositing/overflom/composited-scrolling-paint-phases-expected.txt: Added. This is a text-based test that checks that the graphics layer painting phases are correct with composited scrolling + foreground layers. * compositing/overflow/do-not-paint-outline-into-composited-scrolling-contents.html: Added. * compositing/overflow/paint-neg-z-order-descendants-into-scrolling-contents-layer.html: Added. These tests cover cases 2) and 3) above. * platform/chromium/TestExpectations: * platform/mac-wk2/TestExpectations: * platform/mac/TestExpectations: These have been updated to reflect the missing baselines. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@145067 268f45cc-cd09-0410-ab3c-d52691b4dbfc
0015c12a