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 |