haikuwebkit/LayoutTests/tiled-drawing/tile-size-horizontally-scro...

16 lines
299 B
Plaintext
Raw Permalink Normal View History

Use larger tiles when possible to reduce per-tile painting overhead https://bugs.webkit.org/show_bug.cgi?id=154985 rdar://problem/23635219 Reviewed by Tim Horton. Source/WebCore: There's no reason to use lots of 512x512 tiles on a non-scrollable page. We can reduce per-tile painting overhead by using one big tile. On vertically scrolling pages, we can also use wide tiles to reduce tile-crossing when painting. Have FrameView tell the TiledBacking about scrollability, allowing TileController to make tile size decisions. Change the "giant tile" code path to just return whether Settings says we're in giant tile mode, so that tile size decisions can be made in TileController. TileController now stores a single margin size, and a per-edge margin flag rather than a size per edge. It computes tile size based on scrollability, but adjusts tile size with some hysteresis to avoid size thrashing for content that frequently resizes the document (e.g. some performance tests). TileGrid stores a copy of the tile size, so that it remains unchanged from one revalidate to the next, and the grid can detect when the tile size changes, since it needs to throw away all tiles in that case. Tests: tiled-drawing/tile-size-both-scrollable.html tiled-drawing/tile-size-horizontally-scrollable.html tiled-drawing/tile-size-unscrollable.html tiled-drawing/tile-size-vertically-scrollable.html * WebCore.xcodeproj/project.pbxproj: * page/FrameView.cpp: (WebCore::FrameView::addedOrRemovedScrollbar): (WebCore::FrameView::willStartLiveResize): Tell the tile backing when live resize starts and stops. (WebCore::FrameView::willEndLiveResize): * platform/graphics/EdgeSet.h: Added. Template class that just stores some value per edge. (WebCore::EdgeSet::EdgeSet): (WebCore::EdgeSet::top): (WebCore::EdgeSet::setTop): (WebCore::EdgeSet::right): (WebCore::EdgeSet::setRight): (WebCore::EdgeSet::bottom): (WebCore::EdgeSet::setBottom): (WebCore::EdgeSet::left): (WebCore::EdgeSet::setLeft): (WebCore::EdgeSet::operator==): (WebCore::EdgeSet::operator!=): * platform/graphics/GraphicsLayerClient.h: Rather than have the client return the tile size, have it return whether we're in giant tile mode. (WebCore::GraphicsLayerClient::useGiantTiles): (WebCore::GraphicsLayerClient::tileSize): Deleted. * platform/graphics/TiledBacking.h: (WebCore::defaultTileSize): Deleted. * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::platformCALayerUseGiantTiles): (WebCore::GraphicsLayerCA::platformCALayerTileSize): Deleted. * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/ca/PlatformCALayerClient.h: (WebCore::PlatformCALayerClient::platformCALayerUseGiantTiles): (WebCore::PlatformCALayerClient::platformCALayerTileSize): Deleted. * platform/graphics/ca/TileController.cpp: (WebCore::TileController::TileController): (WebCore::TileController::setScrollability): (WebCore::TileController::willStartLiveResize): (WebCore::TileController::didEndLiveResize): (WebCore::TileController::tileSize): (WebCore::TileController::setHasMargins): (WebCore::TileController::setMarginSize): (WebCore::TileController::hasMargins): (WebCore::TileController::hasHorizontalMargins): (WebCore::TileController::hasVerticalMargins): (WebCore::TileController::topMarginHeight): (WebCore::TileController::bottomMarginHeight): (WebCore::TileController::leftMarginWidth): (WebCore::TileController::rightMarginWidth): (WebCore::TileController::setTileMargins): Deleted. * platform/graphics/ca/TileController.h: * platform/graphics/ca/TileGrid.cpp: (WebCore::TileGrid::TileGrid): (WebCore::TileGrid::setNeedsDisplayInRect): (WebCore::TileGrid::rectForTileIndex): (WebCore::TileGrid::getTileIndexRangeForRect): (WebCore::TileGrid::removeAllTiles): (WebCore::TileGrid::revalidateTiles): * platform/graphics/ca/TileGrid.h: (WebCore::TileGrid::tileSize): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::setTiledBackingHasMargins): (WebCore::RenderLayerBacking::useGiantTiles): (WebCore::RenderLayerBacking::tileSize): Deleted. * rendering/RenderLayerBacking.h: Source/WebKit2: Do a bit of #include cleanup. * Shared/mac/RemoteLayerBackingStore.mm: * WebProcess/WebPage/mac/PlatformCALayerRemote.h: * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp: * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h: LayoutTests: Rebaseline tests with new tile sizes. Add new tests that explicitly test tile size on pages with different scrollability. * tiled-drawing/background-transparency-toggle-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-body-layer-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-opacity-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-positioned-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-html-background-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-non-propagated-body-background-expected.txt: * tiled-drawing/tile-coverage-after-scroll-expected.txt: * tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt: * tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt: * tiled-drawing/tile-coverage-slow-scrolling-expected.txt: * tiled-drawing/tile-coverage-speculative-expected.txt: * tiled-drawing/tile-size-both-scrollable-expected.txt: Copied from LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt. * tiled-drawing/tile-size-both-scrollable.html: Added. * tiled-drawing/tile-size-horizontally-scrollable-expected.txt: Copied from LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt. * tiled-drawing/tile-size-horizontally-scrollable.html: Added. * tiled-drawing/tile-size-unscrollable-expected.txt: Added. * tiled-drawing/tile-size-unscrollable.html: Added. * tiled-drawing/tile-size-vertically-scrollable-expected.txt: Copied from LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt. * tiled-drawing/tile-size-vertically-scrollable.html: Added. * tiled-drawing/visible-rect-content-inset-expected.txt: Canonical link: https://commits.webkit.org/173084@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@197541 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-03-04 02:26:49 +00:00
(GraphicsLayer
(anchor 0.00 0.00)
(bounds 2008.00 585.00)
(children 1
(GraphicsLayer
(bounds 2008.00 585.00)
(contentsOpaque 1)
(tile cache coverage 0, 0 1024 x 585)
(tile size 512 x 512)
(top left tile 0, 0 tiles grid 2 x 2)
Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic https://bugs.webkit.org/show_bug.cgi?id=167774 Reviewed by Tim Horton. Source/WebCore: RenderLayerBacking had some very confusing "usingTiledCacheLayer" uses. Its member variable, m_usingTiledCacheLayer, really meant "m_isMainFrameLayerWithTiledBacking" so make it so. It had a usingTiledBacking(), which returned the same thing, which this patch replaces with isMainFrameLayerWithTiledBacking(). The fact that usingTiledBacking() was only true for the page tiled layer tripped up RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants(), which would only ever call setIsInWindow() on the page tiled layer. These changes fix that. Also make a way for tests to unparent the web view via UIScriptController, and dump out the "in window" status of TileBackings when dumping tile caches. Test: tiled-drawing/tiled-backing-in-window.html * platform/graphics/TiledBacking.h: * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::dumpAdditionalProperties): * platform/graphics/ca/TileController.h: * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::RenderLayerBacking): (WebCore::computePageTiledBackingCoverage): (WebCore::RenderLayerBacking::adjustTiledBackingCoverage): (WebCore::RenderLayerBacking::setTiledBackingHasMargins): (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): (WebCore::RenderLayerBacking::shouldClipCompositedBounds): (WebCore::RenderLayerBacking::updateDescendantClippingLayer): (WebCore::RenderLayerBacking::updateRootLayerConfiguration): (WebCore::RenderLayerBacking::paintsIntoWindow): (WebCore::computeTileCoverage): Deleted. * rendering/RenderLayerBacking.h: * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::flushPendingLayerChanges): (WebCore::RenderLayerCompositor::rootFixedBackgroundsChanged): (WebCore::RenderLayerCompositor::setIsInWindowForLayerIncludingDescendants): (WebCore::RenderLayerCompositor::supportsFixedRootBackgroundCompositing): (WebCore::RenderLayerCompositor::documentUsesTiledBacking): Tools: Implement UIScriptController removeViewFromWindow() and addViewToWindow(), and hook up for Mac WK1 and WK2, and iOS WK2. It takes a callback because view state updates to the web process are async, so the callback fires after the web process gets the new state. * DumpRenderTree/ios/UIScriptControllerIOS.mm: (WTR::UIScriptController::removeViewFromWindow): (WTR::UIScriptController::addViewToWindow): * DumpRenderTree/mac/DumpRenderTree.mm: (createWebViewAndOffscreenWindow): (resetWebViewToConsistentStateBeforeTesting): * DumpRenderTree/mac/DumpRenderTreeMac.h: * DumpRenderTree/mac/UIScriptControllerMac.mm: (WTR::UIScriptController::removeViewFromWindow): (WTR::UIScriptController::addViewToWindow): * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: * TestRunnerShared/UIScriptContext/UIScriptController.cpp: (WTR::UIScriptController::removeViewFromWindow): (WTR::UIScriptController::addViewToWindow): * TestRunnerShared/UIScriptContext/UIScriptController.h: * WebKitTestRunner/PlatformWebView.h: * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetStateToConsistentValues): * WebKitTestRunner/ios/PlatformWebViewIOS.mm: (WTR::PlatformWebView::removeFromWindow): (WTR::PlatformWebView::addToWindow): * WebKitTestRunner/ios/UIScriptControllerIOS.mm: (WTR::UIScriptController::removeViewFromWindow): (WTR::UIScriptController::addViewToWindow): * WebKitTestRunner/mac/PlatformWebViewMac.mm: (WTR::PlatformWebView::removeFromWindow): (WTR::PlatformWebView::addToWindow): * WebKitTestRunner/mac/UIScriptControllerMac.mm: (WTR::UIScriptController::removeViewFromWindow): (WTR::UIScriptController::addViewToWindow): LayoutTests: Rebase to include the "in window" output. tiled-drawing/background-transparency-toggle.html was sensitive to the length of the output, so give the body a fixed size. * compositing/tiling/offscreen-tiled-layer-expected.txt: * compositing/tiling/transform-origin-tiled-expected.txt: * platform/mac-wk1/compositing/tiling/offscreen-tiled-layer-expected.txt: * platform/mac-wk1/compositing/tiling/transform-origin-tiled-expected.txt: * platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt: * platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt: * platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt: * platform/mac-wk2/compositing/tiling/tiled-layer-resize-expected.txt: * platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt: * platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt: * platform/mac/compositing/tiling/tiled-layer-resize-expected.txt: * tiled-drawing/background-transparency-toggle-expected.txt: * tiled-drawing/background-transparency-toggle.html: * tiled-drawing/scrolling/fast-scroll-div-latched-div-expected.txt: * tiled-drawing/scrolling/fast-scroll-div-latched-div-with-handler-expected.txt: * tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt: * tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-select-latched-mainframe-with-handler-expected.txt: * tiled-drawing/scrolling/fast-scroll-select-latched-select-expected.txt: * tiled-drawing/scrolling/fast-scroll-select-latched-select-with-handler-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-body-layer-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-opacity-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-positioned-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-transformed-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-zoomed-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-html-background-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-non-propagated-body-background-expected.txt: * tiled-drawing/scrolling/fixed/four-bars-zoomed-expected.txt: * tiled-drawing/simple-document-with-margin-tiles-expected.txt: * tiled-drawing/tile-coverage-after-scroll-expected.txt: * tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt: * tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt: * tiled-drawing/tile-coverage-slow-scrolling-expected.txt: * tiled-drawing/tile-coverage-speculative-expected.txt: * tiled-drawing/tile-coverage-view-exposed-rect-expected.txt: * tiled-drawing/tile-size-both-scrollable-expected.txt: * tiled-drawing/tile-size-horizontally-scrollable-expected.txt: * tiled-drawing/tile-size-slow-zoomed-expected.txt: * tiled-drawing/tile-size-unscrollable-expected.txt: * tiled-drawing/tile-size-vertically-scrollable-expected.txt: * tiled-drawing/tile-size-view-exposed-rect-expected.txt: * tiled-drawing/tiled-backing-in-window-expected.txt: Added. * tiled-drawing/tiled-backing-in-window.html: Added. * tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt: * tiled-drawing/tiled-drawing-zoom-expected.txt: * tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt: * tiled-drawing/use-tiled-drawing-expected.txt: * tiled-drawing/visible-rect-content-inset-expected.txt: Canonical link: https://commits.webkit.org/184865@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211662 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-02-04 01:53:38 +00:00
(in window 1)
Use larger tiles when possible to reduce per-tile painting overhead https://bugs.webkit.org/show_bug.cgi?id=154985 rdar://problem/23635219 Reviewed by Tim Horton. Source/WebCore: There's no reason to use lots of 512x512 tiles on a non-scrollable page. We can reduce per-tile painting overhead by using one big tile. On vertically scrolling pages, we can also use wide tiles to reduce tile-crossing when painting. Have FrameView tell the TiledBacking about scrollability, allowing TileController to make tile size decisions. Change the "giant tile" code path to just return whether Settings says we're in giant tile mode, so that tile size decisions can be made in TileController. TileController now stores a single margin size, and a per-edge margin flag rather than a size per edge. It computes tile size based on scrollability, but adjusts tile size with some hysteresis to avoid size thrashing for content that frequently resizes the document (e.g. some performance tests). TileGrid stores a copy of the tile size, so that it remains unchanged from one revalidate to the next, and the grid can detect when the tile size changes, since it needs to throw away all tiles in that case. Tests: tiled-drawing/tile-size-both-scrollable.html tiled-drawing/tile-size-horizontally-scrollable.html tiled-drawing/tile-size-unscrollable.html tiled-drawing/tile-size-vertically-scrollable.html * WebCore.xcodeproj/project.pbxproj: * page/FrameView.cpp: (WebCore::FrameView::addedOrRemovedScrollbar): (WebCore::FrameView::willStartLiveResize): Tell the tile backing when live resize starts and stops. (WebCore::FrameView::willEndLiveResize): * platform/graphics/EdgeSet.h: Added. Template class that just stores some value per edge. (WebCore::EdgeSet::EdgeSet): (WebCore::EdgeSet::top): (WebCore::EdgeSet::setTop): (WebCore::EdgeSet::right): (WebCore::EdgeSet::setRight): (WebCore::EdgeSet::bottom): (WebCore::EdgeSet::setBottom): (WebCore::EdgeSet::left): (WebCore::EdgeSet::setLeft): (WebCore::EdgeSet::operator==): (WebCore::EdgeSet::operator!=): * platform/graphics/GraphicsLayerClient.h: Rather than have the client return the tile size, have it return whether we're in giant tile mode. (WebCore::GraphicsLayerClient::useGiantTiles): (WebCore::GraphicsLayerClient::tileSize): Deleted. * platform/graphics/TiledBacking.h: (WebCore::defaultTileSize): Deleted. * platform/graphics/ca/GraphicsLayerCA.cpp: (WebCore::GraphicsLayerCA::platformCALayerUseGiantTiles): (WebCore::GraphicsLayerCA::platformCALayerTileSize): Deleted. * platform/graphics/ca/GraphicsLayerCA.h: * platform/graphics/ca/PlatformCALayerClient.h: (WebCore::PlatformCALayerClient::platformCALayerUseGiantTiles): (WebCore::PlatformCALayerClient::platformCALayerTileSize): Deleted. * platform/graphics/ca/TileController.cpp: (WebCore::TileController::TileController): (WebCore::TileController::setScrollability): (WebCore::TileController::willStartLiveResize): (WebCore::TileController::didEndLiveResize): (WebCore::TileController::tileSize): (WebCore::TileController::setHasMargins): (WebCore::TileController::setMarginSize): (WebCore::TileController::hasMargins): (WebCore::TileController::hasHorizontalMargins): (WebCore::TileController::hasVerticalMargins): (WebCore::TileController::topMarginHeight): (WebCore::TileController::bottomMarginHeight): (WebCore::TileController::leftMarginWidth): (WebCore::TileController::rightMarginWidth): (WebCore::TileController::setTileMargins): Deleted. * platform/graphics/ca/TileController.h: * platform/graphics/ca/TileGrid.cpp: (WebCore::TileGrid::TileGrid): (WebCore::TileGrid::setNeedsDisplayInRect): (WebCore::TileGrid::rectForTileIndex): (WebCore::TileGrid::getTileIndexRangeForRect): (WebCore::TileGrid::removeAllTiles): (WebCore::TileGrid::revalidateTiles): * platform/graphics/ca/TileGrid.h: (WebCore::TileGrid::tileSize): * rendering/RenderLayerBacking.cpp: (WebCore::RenderLayerBacking::setTiledBackingHasMargins): (WebCore::RenderLayerBacking::useGiantTiles): (WebCore::RenderLayerBacking::tileSize): Deleted. * rendering/RenderLayerBacking.h: Source/WebKit2: Do a bit of #include cleanup. * Shared/mac/RemoteLayerBackingStore.mm: * WebProcess/WebPage/mac/PlatformCALayerRemote.h: * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp: * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h: LayoutTests: Rebaseline tests with new tile sizes. Add new tests that explicitly test tile size on pages with different scrollability. * tiled-drawing/background-transparency-toggle-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-iframe-with-handler-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-expected.txt: * tiled-drawing/scrolling/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-body-layer-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-opacity-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-body-background-positioned-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-html-background-expected.txt: * tiled-drawing/scrolling/fixed-background/fixed-non-propagated-body-background-expected.txt: * tiled-drawing/tile-coverage-after-scroll-expected.txt: * tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt: * tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt: * tiled-drawing/tile-coverage-slow-scrolling-expected.txt: * tiled-drawing/tile-coverage-speculative-expected.txt: * tiled-drawing/tile-size-both-scrollable-expected.txt: Copied from LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt. * tiled-drawing/tile-size-both-scrollable.html: Added. * tiled-drawing/tile-size-horizontally-scrollable-expected.txt: Copied from LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt. * tiled-drawing/tile-size-horizontally-scrollable.html: Added. * tiled-drawing/tile-size-unscrollable-expected.txt: Added. * tiled-drawing/tile-size-unscrollable.html: Added. * tiled-drawing/tile-size-vertically-scrollable-expected.txt: Copied from LayoutTests/tiled-drawing/scrolling/fixed-background/fixed-background-no-image-expected.txt. * tiled-drawing/tile-size-vertically-scrollable.html: Added. * tiled-drawing/visible-rect-content-inset-expected.txt: Canonical link: https://commits.webkit.org/173084@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@197541 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-03-04 02:26:49 +00:00
)
)
)