OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. |
3 * | 3 * |
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
5 * | 5 * |
6 * Other contributors: | 6 * Other contributors: |
7 * Robert O'Callahan <roc+@cs.cmu.edu> | 7 * Robert O'Callahan <roc+@cs.cmu.edu> |
8 * David Baron <dbaron@fas.harvard.edu> | 8 * David Baron <dbaron@fas.harvard.edu> |
9 * Christian Biesinger <cbiesinger@web.de> | 9 * Christian Biesinger <cbiesinger@web.de> |
10 * Randall Jesup <rjesup@wgate.com> | 10 * Randall Jesup <rjesup@wgate.com> |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 { | 255 { |
256 TRACE_EVENT0("blink_rendering", "RenderLayer::updateLayerPositionsAfterLayou
t"); | 256 TRACE_EVENT0("blink_rendering", "RenderLayer::updateLayerPositionsAfterLayou
t"); |
257 | 257 |
258 // FIXME: Remove incremental compositing updates after fixing the chicken/eg
g issues | 258 // FIXME: Remove incremental compositing updates after fixing the chicken/eg
g issues |
259 // https://code.google.com/p/chromium/issues/detail?id=343756 | 259 // https://code.google.com/p/chromium/issues/detail?id=343756 |
260 DisableCompositingQueryAsserts disabler; | 260 DisableCompositingQueryAsserts disabler; |
261 | 261 |
262 RenderGeometryMap geometryMap(UseTransforms); | 262 RenderGeometryMap geometryMap(UseTransforms); |
263 if (this != rootLayer) | 263 if (this != rootLayer) |
264 geometryMap.pushMappingsToAncestor(parent(), 0); | 264 geometryMap.pushMappingsToAncestor(parent(), 0); |
265 updateLayerPositionRecursive(&geometryMap, rootLayer->renderer()->containerF
orPaintInvalidation(), flags); | 265 updateLayerPositionRecursive(&geometryMap, flags); |
266 } | 266 } |
267 | 267 |
268 void RenderLayer::updateLayerPositionRecursive(RenderGeometryMap* geometryMap, c
onst RenderLayerModelObject* paintInvalidationContainer, UpdateLayerPositionsFla
gs flags) | 268 void RenderLayer::updateLayerPositionRecursive(RenderGeometryMap* geometryMap, U
pdateLayerPositionsFlags flags) |
269 { | 269 { |
270 // For performance reasons we only check if the RenderObject has moved if we | 270 updateLayerPosition(); |
271 // have a geometryMap. If not, blank out the paint invalidation container so
we | |
272 // can skip doing any further work to update it. | |
273 if (!geometryMap) | |
274 paintInvalidationContainer = 0; | |
275 | 271 |
276 updateLayerPosition(); // For relpositioned layers or non-positioned layers, | |
277 // we need to keep in sync, since we may have shifted
relative | |
278 // to our parent layer. | |
279 if (geometryMap) | 272 if (geometryMap) |
280 geometryMap->pushMappingsToAncestor(this, parent()); | 273 geometryMap->pushMappingsToAncestor(this, parent()); |
281 | 274 |
282 // Clear our cached clip rect information. | 275 // Clear our cached clip rect information. |
283 m_clipper.clearClipRects(); | 276 m_clipper.clearClipRects(); |
284 | 277 |
285 if (hasOverflowControls()) { | 278 if (hasOverflowControls()) { |
286 LayoutPoint offsetFromRoot; | 279 LayoutPoint offsetFromRoot; |
287 if (geometryMap) | 280 if (geometryMap) |
288 offsetFromRoot = LayoutPoint(geometryMap->absolutePoint(FloatPoint()
)); | 281 offsetFromRoot = LayoutPoint(geometryMap->absolutePoint(FloatPoint()
)); |
289 else { | 282 else { |
290 // FIXME: It looks suspicious to call convertToLayerCoords here | 283 // FIXME: It looks suspicious to call convertToLayerCoords here |
291 // as canUseConvertToLayerCoords may be true for an ancestor layer. | 284 // as canUseConvertToLayerCoords may be true for an ancestor layer. |
292 convertToLayerCoords(root(), offsetFromRoot); | 285 convertToLayerCoords(root(), offsetFromRoot); |
293 } | 286 } |
294 scrollableArea()->positionOverflowControls(toIntSize(roundedIntPoint(off
setFromRoot))); | 287 scrollableArea()->positionOverflowControls(toIntSize(roundedIntPoint(off
setFromRoot))); |
295 } | 288 } |
296 | 289 |
297 updateDescendantDependentFlags(); | 290 updateDescendantDependentFlags(); |
298 | 291 |
299 if (flags & UpdatePagination) | 292 if (flags & UpdatePagination) |
300 updatePagination(); | 293 updatePagination(); |
301 else { | 294 else { |
302 m_isPaginated = false; | 295 m_isPaginated = false; |
303 m_enclosingPaginationLayer = 0; | 296 m_enclosingPaginationLayer = 0; |
304 } | 297 } |
305 | 298 |
306 const RenderLayerModelObject* newPaintInvalidationContainer = paintInvalidat
ionContainer; | |
307 // If we don't have a paintInvalidationContainer then we can't check if | |
308 // the object has moved. | |
309 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled() && paintInvalidation
Container) { | |
310 bool establishesNewPaintInvalidationContainer = isRepaintContainer(); | |
311 newPaintInvalidationContainer = renderer()->adjustCompositedContainerFor
SpecialAncestors(establishesNewPaintInvalidationContainer ? renderer() : paintIn
validationContainer); | |
312 | |
313 LayoutPoint offset = renderer()->isBox() ? toRenderBox(renderer())->loca
tion() : LayoutPoint(); | |
314 if (renderer()->previousPositionFromPaintInvalidationContainer() != geom
etryMap->mapToContainer(offset, newPaintInvalidationContainer)) | |
315 renderer()->setMayNeedPaintInvalidation(true); | |
316 } | |
317 | |
318 repainter().repaintAfterLayout(flags & CheckForRepaint); | 299 repainter().repaintAfterLayout(flags & CheckForRepaint); |
319 | 300 |
320 // Go ahead and update the reflection's position and size. | 301 // Go ahead and update the reflection's position and size. |
321 if (m_reflectionInfo) | 302 if (m_reflectionInfo) |
322 m_reflectionInfo->reflection()->layout(); | 303 m_reflectionInfo->reflection()->layout(); |
323 | 304 |
324 if (useRegionBasedColumns() && renderer()->isRenderFlowThread()) { | 305 if (useRegionBasedColumns() && renderer()->isRenderFlowThread()) { |
325 updatePagination(); | 306 updatePagination(); |
326 flags |= UpdatePagination; | 307 flags |= UpdatePagination; |
327 } | 308 } |
328 | 309 |
329 if (renderer()->hasColumns()) | 310 if (renderer()->hasColumns()) |
330 flags |= UpdatePagination; | 311 flags |= UpdatePagination; |
331 | 312 |
332 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) | 313 for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) |
333 child->updateLayerPositionRecursive(geometryMap, newPaintInvalidationCon
tainer, flags); | 314 child->updateLayerPositionRecursive(geometryMap, flags); |
334 | 315 |
335 if ((flags & NeedsFullRepaintInBacking) && hasCompositedLayerMapping() && !c
ompositedLayerMapping()->paintsIntoCompositedAncestor()) | 316 if ((flags & NeedsFullRepaintInBacking) && hasCompositedLayerMapping() && !c
ompositedLayerMapping()->paintsIntoCompositedAncestor()) |
336 compositedLayerMapping()->setContentsNeedDisplay(); | 317 compositedLayerMapping()->setContentsNeedDisplay(); |
337 | 318 |
338 if (geometryMap) | 319 if (geometryMap) |
339 geometryMap->popMappingsToAncestor(parent()); | 320 geometryMap->popMappingsToAncestor(parent()); |
340 } | 321 } |
341 | 322 |
342 void RenderLayer::setAncestorChainHasSelfPaintingLayerDescendant() | 323 void RenderLayer::setAncestorChainHasSelfPaintingLayerDescendant() |
343 { | 324 { |
(...skipping 1116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1460 m_parent->addChild(current, nextSib); | 1441 m_parent->addChild(current, nextSib); |
1461 | 1442 |
1462 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) | 1443 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
1463 current->renderer()->setShouldDoFullPaintInvalidationAfterLayout(tru
e); | 1444 current->renderer()->setShouldDoFullPaintInvalidationAfterLayout(tru
e); |
1464 else | 1445 else |
1465 current->repainter().setRepaintStatus(NeedsFullRepaint); | 1446 current->repainter().setRepaintStatus(NeedsFullRepaint); |
1466 | 1447 |
1467 // Hits in compositing/overflow/automatically-opt-into-composited-scroll
ing-part-1.html | 1448 // Hits in compositing/overflow/automatically-opt-into-composited-scroll
ing-part-1.html |
1468 DisableCompositingQueryAsserts disabler; | 1449 DisableCompositingQueryAsserts disabler; |
1469 | 1450 |
1470 current->updateLayerPositionRecursive(0, 0); // FIXME: use geometry map. | 1451 current->updateLayerPositionRecursive(0); |
1471 current = next; | 1452 current = next; |
1472 } | 1453 } |
1473 | 1454 |
1474 // Remove us from the parent. | 1455 // Remove us from the parent. |
1475 m_parent->removeChild(this); | 1456 m_parent->removeChild(this); |
1476 m_renderer->destroyLayer(); | 1457 m_renderer->destroyLayer(); |
1477 } | 1458 } |
1478 | 1459 |
1479 void RenderLayer::insertOnlyThisLayer() | 1460 void RenderLayer::insertOnlyThisLayer() |
1480 { | 1461 { |
(...skipping 2383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3864 } | 3845 } |
3865 } | 3846 } |
3866 | 3847 |
3867 void showLayerTree(const WebCore::RenderObject* renderer) | 3848 void showLayerTree(const WebCore::RenderObject* renderer) |
3868 { | 3849 { |
3869 if (!renderer) | 3850 if (!renderer) |
3870 return; | 3851 return; |
3871 showLayerTree(renderer->enclosingLayer()); | 3852 showLayerTree(renderer->enclosingLayer()); |
3872 } | 3853 } |
3873 #endif | 3854 #endif |
OLD | NEW |