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