| 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 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 } | 703 } |
| 704 } | 704 } |
| 705 | 705 |
| 706 void RenderLayer::setHasVisibleContent() | 706 void RenderLayer::setHasVisibleContent() |
| 707 { | 707 { |
| 708 if (m_hasVisibleContent && !m_visibleContentStatusDirty) { | 708 if (m_hasVisibleContent && !m_visibleContentStatusDirty) { |
| 709 ASSERT(!parent() || parent()->hasVisibleDescendant()); | 709 ASSERT(!parent() || parent()->hasVisibleDescendant()); |
| 710 return; | 710 return; |
| 711 } | 711 } |
| 712 | 712 |
| 713 m_hasVisibleContent = true; |
| 713 m_visibleContentStatusDirty = false; | 714 m_visibleContentStatusDirty = false; |
| 714 m_hasVisibleContent = true; | 715 |
| 716 { |
| 717 // FIXME: We can remove this code once we remove the recursive tree |
| 718 // walk inside updateGraphicsLayerGeometry. |
| 719 DisableCompositingQueryAsserts disabler; |
| 720 if (RenderLayer* compositingLayer = enclosingCompositingLayer()) |
| 721 compositingLayer->compositedLayerMapping()->setNeedsGeometryUpdate()
; |
| 722 } |
| 723 |
| 715 repainter().computeRepaintRects(renderer()->containerForRepaint()); | 724 repainter().computeRepaintRects(renderer()->containerForRepaint()); |
| 716 if (!m_stackingNode->isNormalFlowOnly()) { | 725 if (!m_stackingNode->isNormalFlowOnly()) { |
| 717 // We don't collect invisible layers in z-order lists if we are not in c
ompositing mode. | 726 // We don't collect invisible layers in z-order lists if we are not in c
ompositing mode. |
| 718 // As we became visible, we need to dirty our stacking containers ancest
ors to be properly | 727 // As we became visible, we need to dirty our stacking containers ancest
ors to be properly |
| 719 // collected. FIXME: When compositing, we could skip this dirtying phase
. | 728 // collected. FIXME: When compositing, we could skip this dirtying phase
. |
| 720 for (RenderLayerStackingNode* sc = m_stackingNode->ancestorStackingConta
inerNode(); sc; sc = sc->ancestorStackingContainerNode()) { | 729 for (RenderLayerStackingNode* sc = m_stackingNode->ancestorStackingConta
inerNode(); sc; sc = sc->ancestorStackingContainerNode()) { |
| 721 sc->dirtyZOrderLists(); | 730 sc->dirtyZOrderLists(); |
| 722 if (sc->layer()->hasVisibleContent()) | 731 if (sc->layer()->hasVisibleContent()) |
| 723 break; | 732 break; |
| 724 } | 733 } |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 | 850 |
| 842 m_blendInfo.setChildLayerHasBlendMode(childLayerHasBlendMode); | 851 m_blendInfo.setChildLayerHasBlendMode(childLayerHasBlendMode); |
| 843 | 852 |
| 844 if (childLayerHasBlendMode) | 853 if (childLayerHasBlendMode) |
| 845 break; | 854 break; |
| 846 } | 855 } |
| 847 m_blendInfo.setChildLayerHasBlendModeStatusDirty(false); | 856 m_blendInfo.setChildLayerHasBlendModeStatusDirty(false); |
| 848 } | 857 } |
| 849 | 858 |
| 850 if (m_visibleContentStatusDirty) { | 859 if (m_visibleContentStatusDirty) { |
| 860 bool previouslyHasVisibleCOntent = m_hasVisibleContent; |
| 851 if (renderer()->style()->visibility() == VISIBLE) | 861 if (renderer()->style()->visibility() == VISIBLE) |
| 852 m_hasVisibleContent = true; | 862 m_hasVisibleContent = true; |
| 853 else { | 863 else { |
| 854 // layer may be hidden but still have some visible content, check fo
r this | 864 // layer may be hidden but still have some visible content, check fo
r this |
| 855 m_hasVisibleContent = false; | 865 m_hasVisibleContent = false; |
| 856 RenderObject* r = renderer()->firstChild(); | 866 RenderObject* r = renderer()->firstChild(); |
| 857 while (r) { | 867 while (r) { |
| 858 if (r->style()->visibility() == VISIBLE && !r->hasLayer()) { | 868 if (r->style()->visibility() == VISIBLE && !r->hasLayer()) { |
| 859 m_hasVisibleContent = true; | 869 m_hasVisibleContent = true; |
| 860 break; | 870 break; |
| 861 } | 871 } |
| 862 if (r->firstChild() && !r->hasLayer()) | 872 if (r->firstChild() && !r->hasLayer()) |
| 863 r = r->firstChild(); | 873 r = r->firstChild(); |
| 864 else if (r->nextSibling()) | 874 else if (r->nextSibling()) |
| 865 r = r->nextSibling(); | 875 r = r->nextSibling(); |
| 866 else { | 876 else { |
| 867 do { | 877 do { |
| 868 r = r->parent(); | 878 r = r->parent(); |
| 869 if (r == renderer()) | 879 if (r == renderer()) |
| 870 r = 0; | 880 r = 0; |
| 871 } while (r && !r->nextSibling()); | 881 } while (r && !r->nextSibling()); |
| 872 if (r) | 882 if (r) |
| 873 r = r->nextSibling(); | 883 r = r->nextSibling(); |
| 874 } | 884 } |
| 875 } | 885 } |
| 876 } | 886 } |
| 877 m_visibleContentStatusDirty = false; | 887 m_visibleContentStatusDirty = false; |
| 888 |
| 889 // FIXME: We can remove this code once we remove the recursive tree |
| 890 // walk inside updateGraphicsLayerGeometry. |
| 891 if (hasVisibleContent() != previouslyHasVisibleCOntent) { |
| 892 DisableCompositingQueryAsserts disabler; |
| 893 if (RenderLayer* compositingLayer = enclosingCompositingLayer()) |
| 894 compositingLayer->compositedLayerMapping()->setNeedsGeometryUpda
te(); |
| 895 } |
| 878 } | 896 } |
| 879 } | 897 } |
| 880 | 898 |
| 881 void RenderLayer::dirty3DTransformedDescendantStatus() | 899 void RenderLayer::dirty3DTransformedDescendantStatus() |
| 882 { | 900 { |
| 883 RenderLayerStackingNode* stackingNode = m_stackingNode->ancestorStackingCont
ainerNode(); | 901 RenderLayerStackingNode* stackingNode = m_stackingNode->ancestorStackingCont
ainerNode(); |
| 884 if (!stackingNode) | 902 if (!stackingNode) |
| 885 return; | 903 return; |
| 886 | 904 |
| 887 stackingNode->layer()->m_3DTransformedDescendantStatusDirty = true; | 905 stackingNode->layer()->m_3DTransformedDescendantStatusDirty = true; |
| (...skipping 2616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3504 CompositedLayerMappingPtr RenderLayer::compositedLayerMapping() const | 3522 CompositedLayerMappingPtr RenderLayer::compositedLayerMapping() const |
| 3505 { | 3523 { |
| 3506 ASSERT(isAllowedToQueryCompositingState()); | 3524 ASSERT(isAllowedToQueryCompositingState()); |
| 3507 return m_compositedLayerMapping.get(); | 3525 return m_compositedLayerMapping.get(); |
| 3508 } | 3526 } |
| 3509 | 3527 |
| 3510 CompositedLayerMappingPtr RenderLayer::ensureCompositedLayerMapping() | 3528 CompositedLayerMappingPtr RenderLayer::ensureCompositedLayerMapping() |
| 3511 { | 3529 { |
| 3512 if (!m_compositedLayerMapping) { | 3530 if (!m_compositedLayerMapping) { |
| 3513 m_compositedLayerMapping = adoptPtr(new CompositedLayerMapping(this)); | 3531 m_compositedLayerMapping = adoptPtr(new CompositedLayerMapping(this)); |
| 3532 m_compositedLayerMapping->setNeedsGeometryUpdate(); |
| 3514 | 3533 |
| 3515 updateOrRemoveFilterEffectRenderer(); | 3534 updateOrRemoveFilterEffectRenderer(); |
| 3516 | 3535 |
| 3517 if (RuntimeEnabledFeatures::cssCompositingEnabled()) | 3536 if (RuntimeEnabledFeatures::cssCompositingEnabled()) |
| 3518 compositedLayerMapping()->setBlendMode(m_blendInfo.blendMode()); | 3537 compositedLayerMapping()->setBlendMode(m_blendInfo.blendMode()); |
| 3519 } | 3538 } |
| 3520 return m_compositedLayerMapping.get(); | 3539 return m_compositedLayerMapping.get(); |
| 3521 } | 3540 } |
| 3522 | 3541 |
| 3523 void RenderLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) | 3542 void RenderLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) |
| 3524 { | 3543 { |
| 3544 if (!layerBeingDestroyed) |
| 3545 m_compositedLayerMapping->setNeedsGeometryUpdate(); |
| 3546 |
| 3525 m_compositedLayerMapping.clear(); | 3547 m_compositedLayerMapping.clear(); |
| 3526 | 3548 |
| 3527 if (!layerBeingDestroyed) | 3549 if (!layerBeingDestroyed) |
| 3528 updateOrRemoveFilterEffectRenderer(); | 3550 updateOrRemoveFilterEffectRenderer(); |
| 3529 } | 3551 } |
| 3530 | 3552 |
| 3531 bool RenderLayer::hasCompositedMask() const | 3553 bool RenderLayer::hasCompositedMask() const |
| 3532 { | 3554 { |
| 3533 return m_compositedLayerMapping && m_compositedLayerMapping->hasMaskLayer(); | 3555 return m_compositedLayerMapping && m_compositedLayerMapping->hasMaskLayer(); |
| 3534 } | 3556 } |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3870 DisableCompositingQueryAsserts disabler; | 3892 DisableCompositingQueryAsserts disabler; |
| 3871 if (paintsWithFilters()) | 3893 if (paintsWithFilters()) |
| 3872 didPaintWithFilters = true; | 3894 didPaintWithFilters = true; |
| 3873 updateFilters(oldStyle, renderer()->style()); | 3895 updateFilters(oldStyle, renderer()->style()); |
| 3874 } | 3896 } |
| 3875 | 3897 |
| 3876 // FIXME: Remove incremental compositing updates after fixing the chicken/eg
g issues | 3898 // FIXME: Remove incremental compositing updates after fixing the chicken/eg
g issues |
| 3877 // https://code.google.com/p/chromium/issues/detail?id=343756 | 3899 // https://code.google.com/p/chromium/issues/detail?id=343756 |
| 3878 DisableCompositingQueryAsserts disabler; | 3900 DisableCompositingQueryAsserts disabler; |
| 3879 | 3901 |
| 3902 if (RenderLayer* compositingLayer = enclosingCompositingLayer()) |
| 3903 compositingLayer->compositedLayerMapping()->setNeedsGeometryUpdate(); |
| 3904 |
| 3880 const RenderStyle* newStyle = renderer()->style(); | 3905 const RenderStyle* newStyle = renderer()->style(); |
| 3881 | 3906 |
| 3882 compositor()->updateLayerCompositingState(this, RenderLayerCompositor::UseCh
ickenEggHacks); | 3907 compositor()->updateLayerCompositingState(this, RenderLayerCompositor::UseCh
ickenEggHacks); |
| 3883 // FIXME: this compositing logic should be pushed into the compositing code,
not here. | 3908 // FIXME: this compositing logic should be pushed into the compositing code,
not here. |
| 3884 if (needsCompositingLayersRebuiltForClip(oldStyle, newStyle) | 3909 if (needsCompositingLayersRebuiltForClip(oldStyle, newStyle) |
| 3885 || needsCompositingLayersRebuiltForOverflow(oldStyle, newStyle) | 3910 || needsCompositingLayersRebuiltForOverflow(oldStyle, newStyle) |
| 3886 || needsCompositingLayersRebuiltForFilters(oldStyle, newStyle, didPaintW
ithFilters) | 3911 || needsCompositingLayersRebuiltForFilters(oldStyle, newStyle, didPaintW
ithFilters) |
| 3887 || needsCompositingLayersRebuiltForBlending(oldStyle, newStyle)) { | 3912 || needsCompositingLayersRebuiltForBlending(oldStyle, newStyle)) { |
| 3888 compositor()->setCompositingLayersNeedRebuild(); | 3913 compositor()->setCompositingLayersNeedRebuild(); |
| 3889 } | 3914 } |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4038 } | 4063 } |
| 4039 } | 4064 } |
| 4040 | 4065 |
| 4041 void showLayerTree(const WebCore::RenderObject* renderer) | 4066 void showLayerTree(const WebCore::RenderObject* renderer) |
| 4042 { | 4067 { |
| 4043 if (!renderer) | 4068 if (!renderer) |
| 4044 return; | 4069 return; |
| 4045 showLayerTree(renderer->enclosingLayer()); | 4070 showLayerTree(renderer->enclosingLayer()); |
| 4046 } | 4071 } |
| 4047 #endif | 4072 #endif |
| OLD | NEW |