haikuwebkit/LayoutTests/tiled-drawing/background-transparency-tog...

65 lines
1.5 KiB
HTML
Raw Permalink Normal View History

Fix updating of tiled backing opaquenss when the page background color changes https://bugs.webkit.org/show_bug.cgi?id=144600 rdar://problem/20723035 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor makes the page tiles opaque or not based on the result of viewHasTransparentBackground(), which consults the view transparency, and FrameView::documentBackgroundColor(). documentBackgroundColor() in turn is based on the root and/or body background colors. We thus need to re-evaluate whether page tiles are opaque when any of these inputs change, but were failing to do so for the FrameView's baseBackgroundColor, and the page root background color. Fix by having FrameView::setBaseBackgroundColor(), and RenderBox::styleDidChange() (for the root) trigger a compositing update when necessary. Added setViewBaseBackgroundColor() on Internals for testing. Test: platform/mac-wk2/tiled-drawing/background-transparency-toggle.html * page/FrameView.cpp: (WebCore::FrameView::setTransparent): Use the isViewForDocumentInFrame() helper. (WebCore::FrameView::setBaseBackgroundColor): Bail if we're not the view for the frame's document, and trigger a compositing update check if the alpha changed. (WebCore::FrameView::isViewForDocumentInFrame): Helper that checks to see if this FrameView is associated with the Document being displayed in the FrameView's Frame. This returns false when we're setting up a new FrameView (its Frame still points to the old document, so renderView() returns the RenderView for the Frame's existing Document). * page/FrameView.h: * rendering/RenderBox.cpp: (WebCore::RenderBox::styleDidChange): Have the compositor check to see if it needs to do an update. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::rootBackgroundTransparencyChanged): If the result of documentBackgroundColor() changed in alpha since the last time, trigger a compositing update. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::Internals::setViewBaseBackgroundColor): * testing/Internals.h: * testing/Internals.idl: LayoutTests: Test that dumps layers with various baseBackgroundColor and body background color combinations. * platform/mac-wk2/tiled-drawing/background-transparency-toggle-expected.txt: Added. * platform/mac-wk2/tiled-drawing/background-transparency-toggle.html: Added. Canonical link: https://commits.webkit.org/162610@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183775 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-05-04 22:53:10 +00:00
<!DOCTYPE html>
<html>
<head>
<style>
body {
background-color: white;
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
height: 1000px;
Fix updating of tiled backing opaquenss when the page background color changes https://bugs.webkit.org/show_bug.cgi?id=144600 rdar://problem/20723035 Reviewed by Tim Horton. Source/WebCore: RenderLayerCompositor makes the page tiles opaque or not based on the result of viewHasTransparentBackground(), which consults the view transparency, and FrameView::documentBackgroundColor(). documentBackgroundColor() in turn is based on the root and/or body background colors. We thus need to re-evaluate whether page tiles are opaque when any of these inputs change, but were failing to do so for the FrameView's baseBackgroundColor, and the page root background color. Fix by having FrameView::setBaseBackgroundColor(), and RenderBox::styleDidChange() (for the root) trigger a compositing update when necessary. Added setViewBaseBackgroundColor() on Internals for testing. Test: platform/mac-wk2/tiled-drawing/background-transparency-toggle.html * page/FrameView.cpp: (WebCore::FrameView::setTransparent): Use the isViewForDocumentInFrame() helper. (WebCore::FrameView::setBaseBackgroundColor): Bail if we're not the view for the frame's document, and trigger a compositing update check if the alpha changed. (WebCore::FrameView::isViewForDocumentInFrame): Helper that checks to see if this FrameView is associated with the Document being displayed in the FrameView's Frame. This returns false when we're setting up a new FrameView (its Frame still points to the old document, so renderView() returns the RenderView for the Frame's existing Document). * page/FrameView.h: * rendering/RenderBox.cpp: (WebCore::RenderBox::styleDidChange): Have the compositor check to see if it needs to do an update. * rendering/RenderLayerCompositor.cpp: (WebCore::RenderLayerCompositor::rootBackgroundTransparencyChanged): If the result of documentBackgroundColor() changed in alpha since the last time, trigger a compositing update. * rendering/RenderLayerCompositor.h: * testing/Internals.cpp: (WebCore::Internals::setViewBaseBackgroundColor): * testing/Internals.h: * testing/Internals.idl: LayoutTests: Test that dumps layers with various baseBackgroundColor and body background color combinations. * platform/mac-wk2/tiled-drawing/background-transparency-toggle-expected.txt: Added. * platform/mac-wk2/tiled-drawing/background-transparency-toggle.html: Added. Canonical link: https://commits.webkit.org/162610@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183775 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-05-04 22:53:10 +00:00
}
body.transparent {
background-color: rgba(0, 0, 0, 0.2);
}
</style>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function documentLoaded()
{
window.setTimeout(doTest, 0);
}
function appendLayerDump()
{
if (window.internals)
document.getElementById('output').textContent += window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_TILE_CACHES);
}
function doTest()
{
if (window.internals)
internals.setViewBaseBackgroundColor('transparent');
appendLayerDump();
document.body.classList.add('transparent');
appendLayerDump();
document.body.classList.remove('transparent');
appendLayerDump();
if (window.internals)
internals.setViewBaseBackgroundColor('white');
document.body.classList.add('transparent');
appendLayerDump();
if (window.testRunner)
testRunner.notifyDone();
}
window.addEventListener('load', documentLoaded, false);
</script>
</head>
<body>
<p>Page tiles should be transparent if the body's background has alpha.</p>
<div id="test"></div>
<pre id="output"></pre>
</body>
</html>