Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Unified Diff: third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp

Issue 2736523002: Defer ChromeClient::attachRootGraphicsLayer until after compositing update. (Closed)
Patch Set: use updateLifecycleToCompositingCleanPlusScrolling Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
index 960e797a567a0e278c8e0bfb066efd0e17373b59..aa5ef52254f60256d7d8963d211e8db862c0cab8 100644
--- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
+++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.cpp
@@ -83,7 +83,8 @@ PaintLayerCompositor::PaintLayerCompositor(LayoutView& layoutView)
m_isTrackingRasterInvalidations(
layoutView.frameView()->isTrackingPaintInvalidations()),
m_inOverlayFullscreenVideo(false),
- m_rootLayerAttachment(RootLayerUnattached) {
+ m_rootLayerAttachment(RootLayerUnattached),
+ m_pendingChromeClientAttachment(false) {
updateAcceleratedCompositingSettings();
}
@@ -461,6 +462,14 @@ void PaintLayerCompositor::updateIfNeeded() {
layersNeedingPaintInvalidation[i]->layoutObject());
}
+ if (m_pendingChromeClientAttachment) {
+ if (Page* page = m_layoutView.frame()->page()) {
+ page->chromeClient().attachRootGraphicsLayer(rootGraphicsLayer(),
+ m_layoutView.frame());
+ m_pendingChromeClientAttachment = false;
+ }
+ }
+
// Inform the inspector that the layer tree has changed.
if (isMainFrame())
probe::layerTreeDidChange(m_layoutView.frame());
@@ -1228,14 +1237,9 @@ void PaintLayerCompositor::attachRootLayer(RootLayerAttachment attachment) {
case RootLayerUnattached:
ASSERT_NOT_REACHED();
break;
- case RootLayerAttachedViaChromeClient: {
- LocalFrame& frame = m_layoutView.frameView()->frame();
- Page* page = frame.page();
- if (!page)
- return;
- page->chromeClient().attachRootGraphicsLayer(rootGraphicsLayer(), &frame);
+ case RootLayerAttachedViaChromeClient:
+ m_pendingChromeClientAttachment = true;
szager1 2017/03/06 22:23:34 Is this new variable necessary? Can't you just ca
skobes 2017/03/06 22:44:23 Not easily - attachRootLayer updates m_rootLayerAt
szager1 2017/03/06 22:57:58 Could you add a RootLayerPendingAttachment value t
skobes 2017/03/07 23:05:46 Done, PTAL.
break;
- }
case RootLayerAttachedViaEnclosingFrame: {
HTMLFrameOwnerElement* ownerElement =
m_layoutView.document().localOwner();
@@ -1283,6 +1287,7 @@ void PaintLayerCompositor::detachRootLayer() {
}
m_rootLayerAttachment = RootLayerUnattached;
+ m_pendingChromeClientAttachment = false;
}
void PaintLayerCompositor::updateRootLayerAttachment() {

Powered by Google App Engine
This is Rietveld 408576698