OLD | NEW |
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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 CompositingPropertyUpdater::UpdateType compositingPropertyUpdateType = Compo
sitingPropertyUpdater::DoNotForceUpdate; | 372 CompositingPropertyUpdater::UpdateType compositingPropertyUpdateType = Compo
sitingPropertyUpdater::DoNotForceUpdate; |
373 | 373 |
374 // FIXME: Teach non-style compositing updates how to do partial tree walks. | 374 // FIXME: Teach non-style compositing updates how to do partial tree walks. |
375 if (updateType >= CompositingUpdateAfterLayout) { | 375 if (updateType >= CompositingUpdateAfterLayout) { |
376 graphicsLayerUpdateType = GraphicsLayerUpdater::ForceUpdate; | 376 graphicsLayerUpdateType = GraphicsLayerUpdater::ForceUpdate; |
377 compositingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate; | 377 compositingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate; |
378 } | 378 } |
379 | 379 |
380 RenderLayer* updateRoot = rootRenderLayer(); | 380 RenderLayer* updateRoot = rootRenderLayer(); |
381 | 381 |
| 382 Vector<RenderLayer*> layersNeedingRepaint; |
| 383 |
382 if (updateType >= CompositingUpdateAfterCompositingInputChange) { | 384 if (updateType >= CompositingUpdateAfterCompositingInputChange) { |
383 bool layersChanged = false; | 385 bool layersChanged = false; |
384 | |
385 { | 386 { |
386 TRACE_EVENT0("blink_rendering", "CompositingPropertyUpdater::updateA
ncestorDependentProperties"); | 387 TRACE_EVENT0("blink_rendering", "CompositingPropertyUpdater::updateA
ncestorDependentProperties"); |
387 CompositingPropertyUpdater(updateRoot).updateAncestorDependentProper
ties(updateRoot, compositingPropertyUpdateType); | 388 CompositingPropertyUpdater(updateRoot).updateAncestorDependentProper
ties(updateRoot, compositingPropertyUpdateType); |
388 #if ASSERT_ENABLED | 389 #if ASSERT_ENABLED |
389 CompositingPropertyUpdater::assertNeedsToUpdateAncestorDependantProp
ertiesBitsCleared(updateRoot); | 390 CompositingPropertyUpdater::assertNeedsToUpdateAncestorDependantProp
ertiesBitsCleared(updateRoot); |
390 #endif | 391 #endif |
391 } | 392 } |
392 | 393 |
393 CompositingRequirementsUpdater(m_renderView, m_compositingReasonFinder).
update(updateRoot); | 394 CompositingRequirementsUpdater(m_renderView, m_compositingReasonFinder).
update(updateRoot); |
394 | 395 |
395 { | 396 { |
396 TRACE_EVENT0("blink_rendering", "CompositingLayerAssigner::assign"); | 397 TRACE_EVENT0("blink_rendering", "CompositingLayerAssigner::assign"); |
397 CompositingLayerAssigner(this).assign(updateRoot, layersChanged); | 398 CompositingLayerAssigner(this).assign(updateRoot, layersChanged, lay
ersNeedingRepaint); |
398 } | 399 } |
399 | 400 |
400 { | 401 { |
401 TRACE_EVENT0("blink_rendering", "RenderLayerCompositor::updateAfterC
ompositingChange"); | 402 TRACE_EVENT0("blink_rendering", "RenderLayerCompositor::updateAfterC
ompositingChange"); |
402 if (const FrameView::ScrollableAreaSet* scrollableAreas = m_renderVi
ew.frameView()->scrollableAreas()) { | 403 if (const FrameView::ScrollableAreaSet* scrollableAreas = m_renderVi
ew.frameView()->scrollableAreas()) { |
403 for (FrameView::ScrollableAreaSet::iterator it = scrollableAreas
->begin(); it != scrollableAreas->end(); ++it) | 404 for (FrameView::ScrollableAreaSet::iterator it = scrollableAreas
->begin(); it != scrollableAreas->end(); ++it) |
404 (*it)->updateAfterCompositingChange(); | 405 (*it)->updateAfterCompositingChange(); |
405 } | 406 } |
406 } | 407 } |
407 | 408 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 m_needsUpdateFixedBackground = false; | 446 m_needsUpdateFixedBackground = false; |
446 } | 447 } |
447 | 448 |
448 ASSERT(updateRoot || !compositingLayersNeedRebuild()); | 449 ASSERT(updateRoot || !compositingLayersNeedRebuild()); |
449 | 450 |
450 // The scrolling coordinator may realize that it needs updating while compos
iting was being updated in this function. | 451 // The scrolling coordinator may realize that it needs updating while compos
iting was being updated in this function. |
451 needsToUpdateScrollingCoordinator |= scrollingCoordinator() && scrollingCoor
dinator()->needsToUpdateAfterCompositingChange(); | 452 needsToUpdateScrollingCoordinator |= scrollingCoordinator() && scrollingCoor
dinator()->needsToUpdateAfterCompositingChange(); |
452 if (needsToUpdateScrollingCoordinator && m_renderView.frame()->isMainFrame()
&& scrollingCoordinator() && inCompositingMode()) | 453 if (needsToUpdateScrollingCoordinator && m_renderView.frame()->isMainFrame()
&& scrollingCoordinator() && inCompositingMode()) |
453 scrollingCoordinator()->updateAfterCompositingChange(); | 454 scrollingCoordinator()->updateAfterCompositingChange(); |
454 | 455 |
| 456 for (unsigned i = 0; i < layersNeedingRepaint.size(); i++) { |
| 457 RenderLayer* layer = layersNeedingRepaint[i]; |
| 458 layer->repainter().computeRepaintRectsIncludingDescendants(); |
| 459 |
| 460 repaintOnCompositingChange(layer); |
| 461 } |
| 462 |
455 // Inform the inspector that the layer tree has changed. | 463 // Inform the inspector that the layer tree has changed. |
456 if (m_renderView.frame()->isMainFrame()) | 464 if (m_renderView.frame()->isMainFrame()) |
457 InspectorInstrumentation::layerTreeDidChange(m_renderView.frame()); | 465 InspectorInstrumentation::layerTreeDidChange(m_renderView.frame()); |
458 } | 466 } |
459 | 467 |
460 bool RenderLayerCompositor::allocateOrClearCompositedLayerMapping(RenderLayer* l
ayer, const CompositingStateTransitionType compositedLayerUpdate) | 468 bool RenderLayerCompositor::allocateOrClearCompositedLayerMapping(RenderLayer* l
ayer, const CompositingStateTransitionType compositedLayerUpdate) |
461 { | 469 { |
462 bool compositedLayerMappingChanged = false; | 470 bool compositedLayerMappingChanged = false; |
463 bool nonCompositedReasonChanged = updateLayerIfViewportConstrained(layer); | 471 bool nonCompositedReasonChanged = updateLayerIfViewportConstrained(layer); |
464 | 472 |
(...skipping 16 matching lines...) Expand all Loading... |
481 // If we need to repaint, do so before allocating the compositedLayerMap
ping | 489 // If we need to repaint, do so before allocating the compositedLayerMap
ping |
482 repaintOnCompositingChange(layer); | 490 repaintOnCompositingChange(layer); |
483 layer->ensureCompositedLayerMapping(); | 491 layer->ensureCompositedLayerMapping(); |
484 compositedLayerMappingChanged = true; | 492 compositedLayerMappingChanged = true; |
485 | 493 |
486 // At this time, the ScrollingCooridnator only supports the top-level fr
ame. | 494 // At this time, the ScrollingCooridnator only supports the top-level fr
ame. |
487 if (layer->isRootLayer() && m_renderView.frame()->isMainFrame()) { | 495 if (layer->isRootLayer() && m_renderView.frame()->isMainFrame()) { |
488 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor
dinator()) | 496 if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoor
dinator()) |
489 scrollingCoordinator->frameViewRootLayerDidChange(m_renderView.f
rameView()); | 497 scrollingCoordinator->frameViewRootLayerDidChange(m_renderView.f
rameView()); |
490 } | 498 } |
491 | |
492 // FIXME: it seems premature to compute this before all compositing stat
e has been updated? | |
493 // This layer and all of its descendants have cached repaints rects that
are relative to | |
494 // the repaint container, so change when compositing changes; we need to
update them here. | |
495 if (layer->parent()) | |
496 layer->repainter().computeRepaintRectsIncludingDescendants(); | |
497 | |
498 break; | 499 break; |
499 case RemoveOwnCompositedLayerMapping: | 500 case RemoveOwnCompositedLayerMapping: |
500 // PutInSquashingLayer means you might have to remove the composited layer m
apping first. | 501 // PutInSquashingLayer means you might have to remove the composited layer m
apping first. |
501 case PutInSquashingLayer: | 502 case PutInSquashingLayer: |
502 if (layer->hasCompositedLayerMapping()) { | 503 if (layer->hasCompositedLayerMapping()) { |
503 // If we're removing the compositedLayerMapping from a reflection, c
lear the source GraphicsLayer's pointer to | 504 // If we're removing the compositedLayerMapping from a reflection, c
lear the source GraphicsLayer's pointer to |
504 // its replica GraphicsLayer. In practice this should never happen b
ecause reflectee and reflection | 505 // its replica GraphicsLayer. In practice this should never happen b
ecause reflectee and reflection |
505 // are both either composited, or not composited. | 506 // are both either composited, or not composited. |
506 if (layer->isReflection()) { | 507 if (layer->isReflection()) { |
507 RenderLayer* sourceLayer = toRenderLayerModelObject(layer->rende
rer()->parent())->layer(); | 508 RenderLayer* sourceLayer = toRenderLayerModelObject(layer->rende
rer()->parent())->layer(); |
508 if (sourceLayer->hasCompositedLayerMapping()) { | 509 if (sourceLayer->hasCompositedLayerMapping()) { |
509 ASSERT(sourceLayer->compositedLayerMapping()->mainGraphicsLa
yer()->replicaLayer() == layer->compositedLayerMapping()->mainGraphicsLayer()); | 510 ASSERT(sourceLayer->compositedLayerMapping()->mainGraphicsLa
yer()->replicaLayer() == layer->compositedLayerMapping()->mainGraphicsLayer()); |
510 sourceLayer->compositedLayerMapping()->mainGraphicsLayer()->
setReplicatedByLayer(0); | 511 sourceLayer->compositedLayerMapping()->mainGraphicsLayer()->
setReplicatedByLayer(0); |
511 } | 512 } |
512 } | 513 } |
513 | 514 |
514 layer->clearCompositedLayerMapping(); | 515 layer->clearCompositedLayerMapping(); |
515 compositedLayerMappingChanged = true; | 516 compositedLayerMappingChanged = true; |
516 | |
517 // This layer and all of its descendants have cached repaints rects
that are relative to | |
518 // the repaint container, so change when compositing changes; we nee
d to update them here. | |
519 layer->repainter().computeRepaintRectsIncludingDescendants(); | |
520 | |
521 // If we need to repaint, do so now that we've removed the composite
dLayerMapping | |
522 repaintOnCompositingChange(layer); | |
523 } | 517 } |
524 | 518 |
525 break; | 519 break; |
526 case RemoveFromSquashingLayer: | 520 case RemoveFromSquashingLayer: |
527 case NoCompositingStateChange: | 521 case NoCompositingStateChange: |
528 // Do nothing. | 522 // Do nothing. |
529 break; | 523 break; |
530 } | 524 } |
531 | 525 |
532 if (layer->hasCompositedLayerMapping() && layer->compositedLayerMapping()->u
pdateRequiresOwnBackingStoreForIntrinsicReasons()) | 526 if (layer->hasCompositedLayerMapping() && layer->compositedLayerMapping()->u
pdateRequiresOwnBackingStoreForIntrinsicReasons()) |
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 } else if (graphicsLayer == m_scrollLayer.get()) { | 1360 } else if (graphicsLayer == m_scrollLayer.get()) { |
1367 name = "LocalFrame Scrolling Layer"; | 1361 name = "LocalFrame Scrolling Layer"; |
1368 } else { | 1362 } else { |
1369 ASSERT_NOT_REACHED(); | 1363 ASSERT_NOT_REACHED(); |
1370 } | 1364 } |
1371 | 1365 |
1372 return name; | 1366 return name; |
1373 } | 1367 } |
1374 | 1368 |
1375 } // namespace WebCore | 1369 } // namespace WebCore |
OLD | NEW |