Changeset 224796 in webkit
- Timestamp:
- Nov 13, 2017 6:01:40 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 17 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r224794 r224796 1 2017-11-13 Simon Fraser <simon.fraser@apple.com> 2 3 When navigating back to a page, compositing layers may not use accelerated drawing 4 https://bugs.webkit.org/show_bug.cgi?id=178749 5 rdar://problem/35158946 6 7 Reviewed by Dean Jackson. 8 9 Moved iframes/resources/page-cache-helper.html up to compositing/resources/go-back.html. 10 11 * compositing/accelerated-layers-after-back-expected.txt: Added. 12 * compositing/accelerated-layers-after-back.html: Added. 13 * compositing/iframes/page-cache-layer-tree.html: 14 * compositing/page-cache-back-crash.html: 15 * compositing/resources/go-back.html: Renamed from LayoutTests/compositing/iframes/resources/page-cache-helper.html. 16 * platform/ios/compositing/accelerated-layers-after-back-expected.txt: Added. 17 1 18 2017-11-13 Ryan Haddad <ryanhaddad@apple.com> 2 19 -
trunk/LayoutTests/compositing/iframes/page-cache-layer-tree.html
r224198 r224796 74 74 window.addEventListener("load", function(event) { 75 75 setTimeout(function() { 76 window.location.href = " resources/page-cache-helper.html";76 window.location.href = "../resources/go-back.html"; 77 77 }, 0); 78 78 }, false); -
trunk/LayoutTests/compositing/page-cache-back-crash.html
r224198 r224796 20 20 setTimeout(function() { 21 21 // Navigate to a helper page that will immediately navigate back here after loading. 22 window.location.href = " iframes/resources/page-cache-helper.html";22 window.location.href = "resources/go-back.html"; 23 23 }, 0); 24 24 }); -
trunk/LayoutTests/compositing/tiling/tiled-drawing-async-frame-scrolling.html
r224198 r224796 10 10 testRunner.dumpAsText(); 11 11 testRunner.waitUntilDone(); 12 12 } 13 13 14 14 function doTest() -
trunk/Source/WebCore/ChangeLog
r224792 r224796 1 2017-11-13 Simon Fraser <simon.fraser@apple.com> 2 3 When navigating back to a page, compositing layers may not use accelerated drawing 4 https://bugs.webkit.org/show_bug.cgi?id=178749 5 rdar://problem/35158946 6 7 Reviewed by Dean Jackson. 8 9 There were two issues with setting GraphicsLayerCA's "acceleratesDrawing" state which 10 occurred on back navigation, related to the ordering of style recalcs and layout. 11 12 First, at style recalc time, we created a RenderLayerCompositor but hadn't yet called 13 its cacheAcceleratedCompositingFlags(), so any layers created during style update 14 didn't get accelerated drawing. Fix by making cacheAcceleratedCompositingFlags() internal 15 to RenderLayerCompositor and calling it from willRecalcStyle() and updateCompositingLayers(). 16 17 We have to be careful to avoid m_forceCompositingMode flip-flopping between cacheAcceleratedCompositingFlags() 18 and cacheAcceleratedCompositingFlagsAfterLayout(), since, for subframes, it depends on layout. 19 20 Secondly, GraphicsLayerCA::commitLayerChangesBeforeSublayers() needs to updateAcceleratesDrawing() 21 before updating tiles, so that new tiles fetch the right acceleratesDrawing state from 22 the TileController. 23 24 Test: compositing/accelerated-layers-after-back.html 25 26 * page/FrameView.cpp: 27 (WebCore::FrameView::updateCompositingLayersAfterLayout): 28 * platform/graphics/ca/GraphicsLayerCA.cpp: 29 (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): 30 * rendering/RenderLayerCompositor.cpp: 31 (WebCore::RenderLayerCompositor::willRecalcStyle): 32 (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout): 33 (WebCore::RenderLayerCompositor::updateCompositingLayers): 34 * rendering/RenderLayerCompositor.h: 35 1 36 2017-11-13 Youenn Fablet <youenn@apple.com> 2 37 -
trunk/Source/WebCore/page/FrameView.cpp
r224789 r224796 800 800 return; 801 801 802 // This call will make sure the cached hasAcceleratedCompositing is updated from the pref803 renderView->compositor().cacheAcceleratedCompositingFlags();804 802 renderView->compositor().updateCompositingLayers(CompositingUpdateType::AfterLayout); 805 803 } -
trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
r224510 r224796 1759 1759 updateCoverage(commitState); 1760 1760 1761 if (m_uncommittedChanges & AcceleratesDrawingChanged) // Needs to happen before TilingAreaChanged. 1762 updateAcceleratesDrawing(); 1763 1761 1764 if (m_uncommittedChanges & TilingAreaChanged) // Needs to happen after CoverageRectChanged, ContentsScaleChanged 1762 1765 updateTiles(); … … 1781 1784 updateContentsNeedsDisplay(); 1782 1785 1783 if (m_uncommittedChanges & AcceleratesDrawingChanged)1784 updateAcceleratesDrawing();1785 1786 1786 if (m_uncommittedChanges & SupportsSubpixelAntialiasedTextChanged) 1787 1787 updateSupportsSubpixelAntialiasedText(); -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r224712 r224796 300 300 void RenderLayerCompositor::cacheAcceleratedCompositingFlags() 301 301 { 302 bool hasAcceleratedCompositing = false;303 bool showDebugBorders = false;304 bool showRepaintCounter = false;305 bool forceCompositingMode = false;306 bool acceleratedDrawingEnabled = false;307 bool displayListDrawingEnabled = false;308 309 302 auto& settings = m_renderView.settings(); 310 hasAcceleratedCompositing = settings.acceleratedCompositingEnabled();303 bool hasAcceleratedCompositing = settings.acceleratedCompositingEnabled(); 311 304 312 305 // We allow the chrome to override the settings, in case the page is rendered … … 317 310 } 318 311 319 showDebugBorders = settings.showDebugBorders();320 showRepaintCounter = settings.showRepaintCounter();321 forceCompositingMode = settings.forceCompositingMode() && hasAcceleratedCompositing;322 323 if (forceCompositingMode && !isMainFrameCompositor()) 324 forceCompositingMode = requiresCompositingForScrollableFrame();325 326 acceleratedDrawingEnabled = settings.acceleratedDrawingEnabled();327 displayListDrawingEnabled = settings.displayListDrawingEnabled();312 bool showDebugBorders = settings.showDebugBorders(); 313 bool showRepaintCounter = settings.showRepaintCounter(); 314 bool acceleratedDrawingEnabled = settings.acceleratedDrawingEnabled(); 315 bool displayListDrawingEnabled = settings.displayListDrawingEnabled(); 316 317 // forceCompositingMode for subframes can only be computed after layout. 318 bool forceCompositingMode = m_forceCompositingMode; 319 if (isMainFrameCompositor()) 320 forceCompositingMode = m_renderView.settings().forceCompositingMode() && hasAcceleratedCompositing; 328 321 329 322 if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter || forceCompositingMode != m_forceCompositingMode) … … 332 325 bool debugBordersChanged = m_showDebugBorders != showDebugBorders; 333 326 m_hasAcceleratedCompositing = hasAcceleratedCompositing; 327 m_forceCompositingMode = forceCompositingMode; 334 328 m_showDebugBorders = showDebugBorders; 335 329 m_showRepaintCounter = showRepaintCounter; 336 m_forceCompositingMode = forceCompositingMode;337 330 m_acceleratedDrawingEnabled = acceleratedDrawingEnabled; 338 331 m_displayListDrawingEnabled = displayListDrawingEnabled; … … 350 343 } 351 344 345 void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout() 346 { 347 cacheAcceleratedCompositingFlags(); 348 349 if (isMainFrameCompositor()) 350 return; 351 352 bool forceCompositingMode = m_hasAcceleratedCompositing && m_renderView.settings().forceCompositingMode() && requiresCompositingForScrollableFrame(); 353 if (forceCompositingMode != m_forceCompositingMode) { 354 m_forceCompositingMode = forceCompositingMode; 355 setCompositingLayersNeedRebuild(); 356 } 357 } 358 352 359 bool RenderLayerCompositor::canRender3DTransforms() const 353 360 { … … 364 371 { 365 372 m_layerNeedsCompositingUpdate = false; 373 cacheAcceleratedCompositingFlags(); 366 374 } 367 375 … … 371 379 return false; 372 380 373 cacheAcceleratedCompositingFlags();374 381 return updateCompositingLayers(CompositingUpdateType::AfterStyleChange); 375 382 } … … 631 638 { 632 639 LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " updateCompositingLayers " << updateType << " root " << updateRoot); 640 641 if (updateType == CompositingUpdateType::AfterStyleChange || updateType == CompositingUpdateType::AfterLayout) 642 cacheAcceleratedCompositingFlagsAfterLayout(); // Some flags (e.g. forceCompositingMode) depend on layout. 633 643 634 644 m_updateCompositingLayersTimer.stop(); -
trunk/Source/WebCore/rendering/RenderLayerCompositor.h
r224712 r224796 111 111 bool canRender3DTransforms() const; 112 112 113 // Copy the accelerated compositing related flags from Settings114 void cacheAcceleratedCompositingFlags();115 116 113 // Called when the layer hierarchy needs to be updated (compositing layers have been 117 114 // created, destroyed or re-parented). … … 346 343 // GraphicsLayerUpdaterClient implementation 347 344 void flushLayersSoon(GraphicsLayerUpdater&) override; 345 346 // Copy the accelerated compositing related flags from Settings 347 void cacheAcceleratedCompositingFlags(); 348 void cacheAcceleratedCompositingFlagsAfterLayout(); 348 349 349 350 // Whether the given RL needs a compositing layer. -
trunk/Source/WebKit/ChangeLog
r224792 r224796 1 2017-11-13 Simon Fraser <simon.fraser@apple.com> 2 3 When navigating back to a page, compositing layers may not use accelerated drawing 4 https://bugs.webkit.org/show_bug.cgi?id=178749 5 rdar://problem/35158946 6 7 Reviewed by Dean Jackson. 8 9 Avoid assertions when a test enables accelerated drawing (which we can't support 10 in the iOS simulator). 11 12 * Shared/RemoteLayerTree/RemoteLayerBackingStore.mm: 13 (WebKit::RemoteLayerBackingStore::ensureBackingStore): 14 1 15 2017-11-13 Youenn Fablet <youenn@apple.com> 2 16 -
trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm
r224198 r224796 73 73 void RemoteLayerBackingStore::ensureBackingStore(FloatSize size, float scale, bool acceleratesDrawing, bool deepColor, bool isOpaque) 74 74 { 75 #if !USE(IOSURFACE) 76 acceleratesDrawing = false; 77 #endif 75 78 if (m_size == size && m_scale == scale && m_deepColor == deepColor && m_acceleratesDrawing == acceleratesDrawing && m_isOpaque == isOpaque) 76 79 return; -
trunk/Tools/ChangeLog
r224795 r224796 1 2017-11-13 Simon Fraser <simon.fraser@apple.com> 2 3 When navigating back to a page, compositing layers may not use accelerated drawing 4 https://bugs.webkit.org/show_bug.cgi?id=178749 5 rdar://problem/35158946 6 7 Reviewed by Dean Jackson. 8 9 Fix WTR and DRT to parse "useAcceleratedDrawing" out of "webkit-test-runner" options 10 and use it to set the state of the web view. 11 12 * DumpRenderTree/TestOptions.h: 13 * DumpRenderTree/TestOptions.mm: 14 (TestOptions::TestOptions): 15 * DumpRenderTree/mac/DumpRenderTree.mm: 16 (setWebPreferencesForTestOptions): 17 * WebKitTestRunner/TestController.cpp: 18 (WTR::TestController::resetPreferencesToConsistentValues): 19 (WTR::updateTestOptionsFromTestHeader): 20 * WebKitTestRunner/TestOptions.h: 21 (WTR::TestOptions::hasSameInitializationOptions const): 22 1 23 2017-11-13 Basuke Suzuki <Basuke.Suzuki@sony.com> 2 24 -
trunk/Tools/DumpRenderTree/TestOptions.h
r224457 r224796 31 31 struct TestOptions { 32 32 bool enableAttachmentElement { false }; 33 bool useAcceleratedDrawing { false }; 33 34 bool enableIntersectionObserver { false }; 34 35 bool enableMenuItemElement { false }; -
trunk/Tools/DumpRenderTree/TestOptions.mm
r224457 r224796 81 81 if (key == "enableAttachmentElement") 82 82 this->enableAttachmentElement = parseBooleanTestHeaderValue(value); 83 if (key == "useAcceleratedDrawing") 84 this->useAcceleratedDrawing = parseBooleanTestHeaderValue(value); 83 85 else if (key == "enableIntersectionObserver") 84 86 this->enableIntersectionObserver = parseBooleanTestHeaderValue(value); -
trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm
r224457 r224796 983 983 984 984 preferences.attachmentElementEnabled = options.enableAttachmentElement; 985 preferences.acceleratedDrawingEnabled = options.useAcceleratedDrawing; 985 986 preferences.intersectionObserverEnabled = options.enableIntersectionObserver; 986 987 preferences.menuItemElementEnabled = options.enableMenuItemElement; -
trunk/Tools/WebKitTestRunner/TestController.cpp
r224457 r224796 722 722 WKPreferencesSetHiddenPageCSSAnimationSuspensionEnabled(preferences, false); 723 723 724 WKPreferencesSetAcceleratedDrawingEnabled(preferences, m_shouldUseAcceleratedDrawing );724 WKPreferencesSetAcceleratedDrawingEnabled(preferences, m_shouldUseAcceleratedDrawing || options.useAcceleratedDrawing); 725 725 // FIXME: We should be testing the default. 726 726 WKPreferencesSetStorageBlockingPolicy(preferences, kWKAllowAllStorage); … … 1026 1026 if (key == "useThreadedScrolling") 1027 1027 testOptions.useThreadedScrolling = parseBooleanTestHeaderValue(value); 1028 if (key == "useAcceleratedDrawing") 1029 testOptions.useAcceleratedDrawing = parseBooleanTestHeaderValue(value); 1028 1030 if (key == "useFlexibleViewport") 1029 1031 testOptions.useFlexibleViewport = parseBooleanTestHeaderValue(value); -
trunk/Tools/WebKitTestRunner/TestOptions.h
r224457 r224796 34 34 struct TestOptions { 35 35 bool useThreadedScrolling { false }; 36 bool useAcceleratedDrawing { false }; 36 37 bool useRemoteLayerTree { false }; 37 38 bool shouldShowWebView { false }; … … 67 68 { 68 69 if (useThreadedScrolling != options.useThreadedScrolling 70 || useAcceleratedDrawing != options.useAcceleratedDrawing 69 71 || overrideLanguages != options.overrideLanguages 70 72 || useMockScrollbars != options.useMockScrollbars
Note: See TracChangeset
for help on using the changeset viewer.