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

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

Issue 20103002: Make composited scrolling codepaths co-operate. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix needsCompositedScrolling state Created 7 years, 3 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 | « Source/core/rendering/RenderLayer.h ('k') | Source/core/rendering/RenderLayerCompositor.cpp » ('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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 : m_inResizeMode(false) 127 : m_inResizeMode(false)
128 , m_scrollDimensionsDirty(true) 128 , m_scrollDimensionsDirty(true)
129 , m_normalFlowListDirty(true) 129 , m_normalFlowListDirty(true)
130 , m_hasSelfPaintingLayerDescendant(false) 130 , m_hasSelfPaintingLayerDescendant(false)
131 , m_hasSelfPaintingLayerDescendantDirty(false) 131 , m_hasSelfPaintingLayerDescendantDirty(false)
132 , m_hasOutOfFlowPositionedDescendant(false) 132 , m_hasOutOfFlowPositionedDescendant(false)
133 , m_hasOutOfFlowPositionedDescendantDirty(true) 133 , m_hasOutOfFlowPositionedDescendantDirty(true)
134 , m_hasUnclippedDescendant(false) 134 , m_hasUnclippedDescendant(false)
135 , m_isUnclippedDescendant(false) 135 , m_isUnclippedDescendant(false)
136 , m_needsCompositedScrolling(false) 136 , m_needsCompositedScrolling(false)
137 , m_needsToBeStackingContainer(false)
137 , m_canBePromotedToStackingContainer(false) 138 , m_canBePromotedToStackingContainer(false)
138 , m_canBePromotedToStackingContainerDirty(true) 139 , m_canBePromotedToStackingContainerDirty(true)
139 , m_isRootLayer(renderer->isRenderView()) 140 , m_isRootLayer(renderer->isRenderView())
140 , m_usedTransparency(false) 141 , m_usedTransparency(false)
141 , m_paintingInsideReflection(false) 142 , m_paintingInsideReflection(false)
142 , m_inOverflowRelayout(false) 143 , m_inOverflowRelayout(false)
143 , m_repaintStatus(NeedsNormalRepaint) 144 , m_repaintStatus(NeedsNormalRepaint)
144 , m_visibleContentStatusDirty(true) 145 , m_visibleContentStatusDirty(true)
145 , m_hasVisibleContent(false) 146 , m_hasVisibleContent(false)
146 , m_visibleDescendantStatusDirty(false) 147 , m_visibleDescendantStatusDirty(false)
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 } 471 }
471 } 472 }
472 } 473 }
473 474
474 bool RenderLayer::acceleratedCompositingForOverflowScrollEnabled() const 475 bool RenderLayer::acceleratedCompositingForOverflowScrollEnabled() const
475 { 476 {
476 const Settings* settings = renderer()->document()->settings(); 477 const Settings* settings = renderer()->document()->settings();
477 return settings && settings->acceleratedCompositingForOverflowScrollEnabled( ); 478 return settings && settings->acceleratedCompositingForOverflowScrollEnabled( );
478 } 479 }
479 480
481 bool RenderLayer::useCompositorDrivenAcceleratedScrolling() const
482 {
483 TRACE_EVENT0("comp-scroll", "RenderLayer::useCompositorDrivenAcceleratedScro lling");
Ian Vollick 2013/08/29 03:05:01 Can you ditch the printf-y trace events for now? I
hartmanng 2013/09/05 20:43:58 Done.
484
485 if (!compositorDrivenAcceleratedScrollingEnabled())
486 return false;
487
488 const RenderLayer* scrollingLayer = ancestorScrollingLayer();
489 if (!scrollingLayer || scrollingLayer->isStackingContainer())
490 return false;
491
492 if (scrollingLayer->m_canBePromotedToStackingContainerDirty) {
493 // We don't know if it's safe to promote to stacking container, and
494 // aren't in a position to find out, so we have to assume the worst.
495 return true;
496 }
497
498 return !scrollingLayer->canBeStackingContainer();
499 }
500
480 // FIXME: This is a temporary flag and should be removed once accelerated 501 // FIXME: This is a temporary flag and should be removed once accelerated
481 // overflow scroll is ready (crbug.com/254111). 502 // overflow scroll is ready (crbug.com/254111).
482 bool RenderLayer::compositorDrivenAcceleratedScrollingEnabled() const 503 bool RenderLayer::compositorDrivenAcceleratedScrollingEnabled() const
483 { 504 {
484 if (!acceleratedCompositingForOverflowScrollEnabled()) 505 if (!acceleratedCompositingForOverflowScrollEnabled())
485 return false; 506 return false;
486 507
487 const Settings* settings = renderer()->document()->settings(); 508 const Settings* settings = renderer()->document()->settings();
488 return settings && settings->isCompositorDrivenAcceleratedScrollingEnabled() ; 509 return settings && settings->isCompositorDrivenAcceleratedScrollingEnabled() ;
489 } 510 }
(...skipping 1556 matching lines...) Expand 10 before | Expand all | Expand 10 after
2046 2067
2047 // Scroll form controls on the main thread so they exhibit correct touch scr oll event bubbling 2068 // Scroll form controls on the main thread so they exhibit correct touch scr oll event bubbling
2048 if (box && (box->isIntristicallyScrollable(VerticalScrollbar) || box->isIntr isticallyScrollable(HorizontalScrollbar))) 2069 if (box && (box->isIntristicallyScrollable(VerticalScrollbar) || box->isIntr isticallyScrollable(HorizontalScrollbar)))
2049 return false; 2070 return false;
2050 2071
2051 return isComposited() && backing()->scrollingLayer(); 2072 return isComposited() && backing()->scrollingLayer();
2052 } 2073 }
2053 2074
2054 bool RenderLayer::needsCompositedScrolling() const 2075 bool RenderLayer::needsCompositedScrolling() const
2055 { 2076 {
2056 if (!compositorDrivenAcceleratedScrollingEnabled())
2057 return needsToBeStackingContainer();
2058 if (FrameView* frameView = renderer()->view()->frameView())
2059 return frameView->containsScrollableArea(scrollableArea());
2060 return false;
2061 }
2062
2063 bool RenderLayer::needsToBeStackingContainer() const
2064 {
2065 switch (m_forceNeedsCompositedScrolling) { 2077 switch (m_forceNeedsCompositedScrolling) {
2066 case DoNotForceCompositedScrolling: 2078 case DoNotForceCompositedScrolling:
2067 return m_needsCompositedScrolling; 2079 return m_needsCompositedScrolling;
2068 case CompositedScrollingAlwaysOn: 2080 case CompositedScrollingAlwaysOn:
2069 return true; 2081 return true;
2070 case CompositedScrollingAlwaysOff: 2082 case CompositedScrollingAlwaysOff:
2071 return false; 2083 return false;
2072 } 2084 }
2073 2085
2074 ASSERT_NOT_REACHED(); 2086 ASSERT_NOT_REACHED();
2075 return m_needsCompositedScrolling; 2087 return m_needsCompositedScrolling;
2076 } 2088 }
2077 2089
2090 bool RenderLayer::needsToBeStackingContainer() const
2091 {
Ian Vollick 2013/08/29 03:05:01 Repeating the switch is a bummer. Maybe we could h
hartmanng 2013/09/05 20:43:58 Done.
2092 switch (m_forceNeedsCompositedScrolling) {
2093 case DoNotForceCompositedScrolling:
2094 return m_needsToBeStackingContainer;
2095 case CompositedScrollingAlwaysOn:
2096 return true;
2097 case CompositedScrollingAlwaysOff:
2098 return false;
2099 }
2100
2101 ASSERT_NOT_REACHED();
2102 return m_needsToBeStackingContainer;
2103 }
2104
2078 void RenderLayer::updateNeedsCompositedScrolling() 2105 void RenderLayer::updateNeedsCompositedScrolling()
2079 { 2106 {
2080 TRACE_EVENT0("comp-scroll", "RenderLayer::updateNeedsCompositedScrolling"); 2107 TRACE_EVENT0("comp-scroll", "RenderLayer::updateNeedsCompositedScrolling");
2081 2108
2082 updateCanBeStackingContainer(); 2109 updateCanBeStackingContainer();
2083 updateDescendantDependentFlags(); 2110 updateDescendantDependentFlags();
2084 2111
2085 ASSERT(renderer()->view()->frameView() && renderer()->view()->frameView()->c ontainsScrollableArea(scrollableArea())); 2112 ASSERT(renderer()->view()->frameView() && renderer()->view()->frameView()->c ontainsScrollableArea(scrollableArea()));
2086 bool needsCompositedScrolling = acceleratedCompositingForOverflowScrollEnabl ed() 2113 const bool needsToBeStackingContainer = acceleratedCompositingForOverflowScr ollEnabled()
2087 && canBeStackingContainer() 2114 && canBeStackingContainer()
2088 && !hasUnclippedDescendant(); 2115 && !hasUnclippedDescendant();
2089 2116
2117 setNeedsToBeStackingContainer(needsToBeStackingContainer);
2118
2119 const bool needsCompositedScrolling = needsToBeStackingContainer
2120 || (compositorDrivenAcceleratedScrollingEnabled()
2121 && renderer()->view()->frameView()->containsScrollableArea(scrollabl eArea()));
Ian Vollick 2013/08/29 03:05:01 We've already asserted that renderer()->view()->fr
hartmanng 2013/09/05 20:43:58 Done.
2122
2090 // We gather a boolean value for use with Google UMA histograms to 2123 // We gather a boolean value for use with Google UMA histograms to
2091 // quantify the actual effects of a set of patches attempting to 2124 // quantify the actual effects of a set of patches attempting to
2092 // relax composited scrolling requirements, thereby increasing the 2125 // relax composited scrolling requirements, thereby increasing the
2093 // number of composited overflow divs. 2126 // number of composited overflow divs.
2094 if (acceleratedCompositingForOverflowScrollEnabled()) 2127 if (acceleratedCompositingForOverflowScrollEnabled())
2095 HistogramSupport::histogramEnumeration("Renderer.NeedsCompositedScrollin g", needsCompositedScrolling, 2); 2128 HistogramSupport::histogramEnumeration("Renderer.NeedsCompositedScrollin g", needsCompositedScrolling, 2);
2096 2129
2097 setNeedsCompositedScrolling(needsCompositedScrolling); 2130 setNeedsCompositedScrolling(needsCompositedScrolling);
2098 } 2131 }
2099 2132
(...skipping 4419 matching lines...) Expand 10 before | Expand all | Expand 10 after
6519 } 6552 }
6520 } 6553 }
6521 6554
6522 void showLayerTree(const WebCore::RenderObject* renderer) 6555 void showLayerTree(const WebCore::RenderObject* renderer)
6523 { 6556 {
6524 if (!renderer) 6557 if (!renderer)
6525 return; 6558 return;
6526 showLayerTree(renderer->enclosingLayer()); 6559 showLayerTree(renderer->enclosingLayer());
6527 } 6560 }
6528 #endif 6561 #endif
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderLayer.h ('k') | Source/core/rendering/RenderLayerCompositor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698