Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: Source/core/rendering/RenderLayer.cpp

Issue 183763016: Reduce compositing update in Silk's toggle_drawer by 20% (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix win build Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/core/rendering/compositing/CompositedLayerMapping.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | Source/core/rendering/compositing/CompositedLayerMapping.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698