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

Side by Side Diff: Source/core/rendering/compositing/RenderLayerCompositor.cpp

Issue 316693003: Remove scheduleLayerUpdate from RenderLayerCompositor. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/compositing/RenderLayerCompositor.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 17 matching lines...) Expand all
28 #include "core/rendering/compositing/RenderLayerCompositor.h" 28 #include "core/rendering/compositing/RenderLayerCompositor.h"
29 29
30 #include "CSSPropertyNames.h" 30 #include "CSSPropertyNames.h"
31 #include "HTMLNames.h" 31 #include "HTMLNames.h"
32 #include "RuntimeEnabledFeatures.h" 32 #include "RuntimeEnabledFeatures.h"
33 #include "core/animation/ActiveAnimations.h" 33 #include "core/animation/ActiveAnimations.h"
34 #include "core/animation/DocumentAnimations.h" 34 #include "core/animation/DocumentAnimations.h"
35 #include "core/dom/FullscreenElementStack.h" 35 #include "core/dom/FullscreenElementStack.h"
36 #include "core/dom/NodeList.h" 36 #include "core/dom/NodeList.h"
37 #include "core/dom/ScriptForbiddenScope.h" 37 #include "core/dom/ScriptForbiddenScope.h"
38 #include "core/frame/DeprecatedScheduleStyleRecalcDuringCompositingUpdate.h"
39 #include "core/frame/FrameView.h" 38 #include "core/frame/FrameView.h"
40 #include "core/frame/LocalFrame.h" 39 #include "core/frame/LocalFrame.h"
41 #include "core/frame/Settings.h" 40 #include "core/frame/Settings.h"
42 #include "core/html/HTMLCanvasElement.h" 41 #include "core/html/HTMLCanvasElement.h"
43 #include "core/html/HTMLIFrameElement.h" 42 #include "core/html/HTMLIFrameElement.h"
44 #include "core/html/HTMLMediaElement.h" 43 #include "core/html/HTMLMediaElement.h"
45 #include "core/html/canvas/CanvasRenderingContext.h" 44 #include "core/html/canvas/CanvasRenderingContext.h"
46 #include "core/inspector/InspectorInstrumentation.h" 45 #include "core/inspector/InspectorInstrumentation.h"
47 #include "core/inspector/InspectorNodeIds.h" 46 #include "core/inspector/InspectorNodeIds.h"
48 #include "core/page/Chrome.h" 47 #include "core/page/Chrome.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 return m_compositing; 140 return m_compositing;
142 } 141 }
143 142
144 void RenderLayerCompositor::setCompositingModeEnabled(bool enable) 143 void RenderLayerCompositor::setCompositingModeEnabled(bool enable)
145 { 144 {
146 if (enable == m_compositing) 145 if (enable == m_compositing)
147 return; 146 return;
148 147
149 m_compositing = enable; 148 m_compositing = enable;
150 149
150 // RenderPart::requiresAcceleratedCompositing is used to determine self-pain tingness
151 // and bases it's return value for frames on the m_compositing bit here.
152 if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerEleme nt()) {
153 if (RenderPart* renderer = ownerElement->renderPart())
154 renderer->layer()->updateSelfPaintingLayer();
155 }
156
151 if (m_compositing) 157 if (m_compositing)
152 ensureRootLayer(); 158 ensureRootLayer();
153 else 159 else
154 destroyRootLayer(); 160 destroyRootLayer();
155 161
156 notifyIFramesOfCompositingChange(); 162 // Compositing also affects the answer to RenderIFrame::requiresAcceleratedC ompositing(), so
163 // we need to schedule a style recalc in our parent document.
164 if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerEleme nt())
165 ownerElement->setNeedsCompositingUpdate();
157 } 166 }
158 167
159 void RenderLayerCompositor::enableCompositingModeIfNeeded() 168 void RenderLayerCompositor::enableCompositingModeIfNeeded()
160 { 169 {
161 if (!m_rootShouldAlwaysCompositeDirty) 170 if (!m_rootShouldAlwaysCompositeDirty)
162 return; 171 return;
163 172
164 m_rootShouldAlwaysCompositeDirty = false; 173 m_rootShouldAlwaysCompositeDirty = false;
165 if (m_compositing) 174 if (m_compositing)
166 return; 175 return;
(...skipping 1088 matching lines...) Expand 10 before | Expand all | Expand 10 after
1255 LocalFrame& frame = m_renderView.frameView()->frame(); 1264 LocalFrame& frame = m_renderView.frameView()->frame();
1256 Page* page = frame.page(); 1265 Page* page = frame.page();
1257 if (!page) 1266 if (!page)
1258 return; 1267 return;
1259 page->chrome().client().attachRootGraphicsLayer(rootGraphicsLayer()) ; 1268 page->chrome().client().attachRootGraphicsLayer(rootGraphicsLayer()) ;
1260 break; 1269 break;
1261 } 1270 }
1262 case RootLayerAttachedViaEnclosingFrame: { 1271 case RootLayerAttachedViaEnclosingFrame: {
1263 HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerE lement(); 1272 HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerE lement();
1264 ASSERT(ownerElement); 1273 ASSERT(ownerElement);
1265 DeprecatedScheduleStyleRecalcDuringCompositingUpdate marker(ownerEle ment->document().lifecycle());
1266 // The layer will get hooked up via CompositedLayerMapping::updateGr aphicsLayerConfiguration() 1274 // The layer will get hooked up via CompositedLayerMapping::updateGr aphicsLayerConfiguration()
1267 // for the frame's renderer in the parent document. 1275 // for the frame's renderer in the parent document.
1268 ownerElement->scheduleLayerUpdate(); 1276 ownerElement->setNeedsCompositingUpdate();
1269 break; 1277 break;
1270 } 1278 }
1271 } 1279 }
1272 1280
1273 m_rootLayerAttachment = attachment; 1281 m_rootLayerAttachment = attachment;
1274 } 1282 }
1275 1283
1276 void RenderLayerCompositor::detachRootLayer() 1284 void RenderLayerCompositor::detachRootLayer()
1277 { 1285 {
1278 if (!m_rootContentLayer || m_rootLayerAttachment == RootLayerUnattached) 1286 if (!m_rootContentLayer || m_rootLayerAttachment == RootLayerUnattached)
1279 return; 1287 return;
1280 1288
1281 switch (m_rootLayerAttachment) { 1289 switch (m_rootLayerAttachment) {
1282 case RootLayerAttachedViaEnclosingFrame: { 1290 case RootLayerAttachedViaEnclosingFrame: {
1283 // The layer will get unhooked up via CompositedLayerMapping::updateGrap hicsLayerConfiguration() 1291 // The layer will get unhooked up via CompositedLayerMapping::updateGrap hicsLayerConfiguration()
1284 // for the frame's renderer in the parent document. 1292 // for the frame's renderer in the parent document.
1285 if (m_overflowControlsHostLayer) 1293 if (m_overflowControlsHostLayer)
1286 m_overflowControlsHostLayer->removeFromParent(); 1294 m_overflowControlsHostLayer->removeFromParent();
1287 else 1295 else
1288 m_rootContentLayer->removeFromParent(); 1296 m_rootContentLayer->removeFromParent();
1289 1297
1290 if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerE lement()) { 1298 if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerE lement())
1291 DeprecatedScheduleStyleRecalcDuringCompositingUpdate marker(ownerEle ment->document().lifecycle()); 1299 ownerElement->setNeedsCompositingUpdate();
1292 ownerElement->scheduleLayerUpdate();
1293 }
1294 break; 1300 break;
1295 } 1301 }
1296 case RootLayerAttachedViaChromeClient: { 1302 case RootLayerAttachedViaChromeClient: {
1297 LocalFrame& frame = m_renderView.frameView()->frame(); 1303 LocalFrame& frame = m_renderView.frameView()->frame();
1298 Page* page = frame.page(); 1304 Page* page = frame.page();
1299 if (!page) 1305 if (!page)
1300 return; 1306 return;
1301 page->chrome().client().attachRootGraphicsLayer(0); 1307 page->chrome().client().attachRootGraphicsLayer(0);
1302 } 1308 }
1303 break; 1309 break;
1304 case RootLayerUnattached: 1310 case RootLayerUnattached:
1305 break; 1311 break;
1306 } 1312 }
1307 1313
1308 m_rootLayerAttachment = RootLayerUnattached; 1314 m_rootLayerAttachment = RootLayerUnattached;
1309 } 1315 }
1310 1316
1311 void RenderLayerCompositor::updateRootLayerAttachment() 1317 void RenderLayerCompositor::updateRootLayerAttachment()
1312 { 1318 {
1313 ensureRootLayer(); 1319 ensureRootLayer();
1314 } 1320 }
1315 1321
1316 // IFrames are special, because we hook compositing layers together across ifram e boundaries
1317 // when both parent and iframe content are composited. So when this frame become s composited, we have
1318 // to use a synthetic style change to get the iframes into RenderLayers in order to allow them to composite.
1319 void RenderLayerCompositor::notifyIFramesOfCompositingChange()
1320 {
1321 if (!m_renderView.frameView())
1322 return;
1323 LocalFrame& frame = m_renderView.frameView()->frame();
1324
1325 for (LocalFrame* child = frame.tree().firstChild(); child; child = child->tr ee().traverseNext(&frame)) {
1326 if (!child->document())
1327 continue; // FIXME: Can this happen?
1328 if (HTMLFrameOwnerElement* ownerElement = child->document()->ownerElemen t()) {
1329 DeprecatedScheduleStyleRecalcDuringCompositingUpdate marker(ownerEle ment->document().lifecycle());
1330 ownerElement->scheduleLayerUpdate();
1331 }
1332 }
1333
1334 // Compositing also affects the answer to RenderIFrame::requiresAcceleratedC ompositing(), so
1335 // we need to schedule a style recalc in our parent document.
1336 if (HTMLFrameOwnerElement* ownerElement = m_renderView.document().ownerEleme nt()) {
1337 ownerElement->document().renderView()->compositor()->setNeedsToRecompute CompositingRequirements();
1338 DeprecatedScheduleStyleRecalcDuringCompositingUpdate marker(ownerElement ->document().lifecycle());
1339 ownerElement->scheduleLayerUpdate();
1340 }
1341 }
1342
1343 ScrollingCoordinator* RenderLayerCompositor::scrollingCoordinator() const 1322 ScrollingCoordinator* RenderLayerCompositor::scrollingCoordinator() const
1344 { 1323 {
1345 if (Page* page = this->page()) 1324 if (Page* page = this->page())
1346 return page->scrollingCoordinator(); 1325 return page->scrollingCoordinator();
1347 1326
1348 return 0; 1327 return 0;
1349 } 1328 }
1350 1329
1351 GraphicsLayerFactory* RenderLayerCompositor::graphicsLayerFactory() const 1330 GraphicsLayerFactory* RenderLayerCompositor::graphicsLayerFactory() const
1352 { 1331 {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1389 } else if (graphicsLayer == m_scrollLayer.get()) { 1368 } else if (graphicsLayer == m_scrollLayer.get()) {
1390 name = "LocalFrame Scrolling Layer"; 1369 name = "LocalFrame Scrolling Layer";
1391 } else { 1370 } else {
1392 ASSERT_NOT_REACHED(); 1371 ASSERT_NOT_REACHED();
1393 } 1372 }
1394 1373
1395 return name; 1374 return name;
1396 } 1375 }
1397 1376
1398 } // namespace WebCore 1377 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/compositing/RenderLayerCompositor.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698