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

Unified 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, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderLayer.h ('k') | Source/core/rendering/RenderLayerCompositor.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderLayer.cpp
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp
index b164a9e885109df4fcce68dc42a2b3b3f3c272dc..6176e54e9295e840154c4771423a979db7ed0fc4 100644
--- a/Source/core/rendering/RenderLayer.cpp
+++ b/Source/core/rendering/RenderLayer.cpp
@@ -134,6 +134,7 @@ RenderLayer::RenderLayer(RenderLayerModelObject* renderer)
, m_hasUnclippedDescendant(false)
, m_isUnclippedDescendant(false)
, m_needsCompositedScrolling(false)
+ , m_needsToBeStackingContainer(false)
, m_canBePromotedToStackingContainer(false)
, m_canBePromotedToStackingContainerDirty(true)
, m_isRootLayer(renderer->isRenderView())
@@ -477,6 +478,26 @@ bool RenderLayer::acceleratedCompositingForOverflowScrollEnabled() const
return settings && settings->acceleratedCompositingForOverflowScrollEnabled();
}
+bool RenderLayer::useCompositorDrivenAcceleratedScrolling() const
+{
+ TRACE_EVENT0("comp-scroll", "RenderLayer::useCompositorDrivenAcceleratedScrolling");
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.
+
+ if (!compositorDrivenAcceleratedScrollingEnabled())
+ return false;
+
+ const RenderLayer* scrollingLayer = ancestorScrollingLayer();
+ if (!scrollingLayer || scrollingLayer->isStackingContainer())
+ return false;
+
+ if (scrollingLayer->m_canBePromotedToStackingContainerDirty) {
+ // We don't know if it's safe to promote to stacking container, and
+ // aren't in a position to find out, so we have to assume the worst.
+ return true;
+ }
+
+ return !scrollingLayer->canBeStackingContainer();
+}
+
// FIXME: This is a temporary flag and should be removed once accelerated
// overflow scroll is ready (crbug.com/254111).
bool RenderLayer::compositorDrivenAcceleratedScrollingEnabled() const
@@ -2053,15 +2074,6 @@ bool RenderLayer::usesCompositedScrolling() const
bool RenderLayer::needsCompositedScrolling() const
{
- if (!compositorDrivenAcceleratedScrollingEnabled())
- return needsToBeStackingContainer();
- if (FrameView* frameView = renderer()->view()->frameView())
- return frameView->containsScrollableArea(scrollableArea());
- return false;
-}
-
-bool RenderLayer::needsToBeStackingContainer() const
-{
switch (m_forceNeedsCompositedScrolling) {
case DoNotForceCompositedScrolling:
return m_needsCompositedScrolling;
@@ -2075,6 +2087,21 @@ bool RenderLayer::needsToBeStackingContainer() const
return m_needsCompositedScrolling;
}
+bool RenderLayer::needsToBeStackingContainer() const
+{
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.
+ switch (m_forceNeedsCompositedScrolling) {
+ case DoNotForceCompositedScrolling:
+ return m_needsToBeStackingContainer;
+ case CompositedScrollingAlwaysOn:
+ return true;
+ case CompositedScrollingAlwaysOff:
+ return false;
+ }
+
+ ASSERT_NOT_REACHED();
+ return m_needsToBeStackingContainer;
+}
+
void RenderLayer::updateNeedsCompositedScrolling()
{
TRACE_EVENT0("comp-scroll", "RenderLayer::updateNeedsCompositedScrolling");
@@ -2083,10 +2110,16 @@ void RenderLayer::updateNeedsCompositedScrolling()
updateDescendantDependentFlags();
ASSERT(renderer()->view()->frameView() && renderer()->view()->frameView()->containsScrollableArea(scrollableArea()));
- bool needsCompositedScrolling = acceleratedCompositingForOverflowScrollEnabled()
+ const bool needsToBeStackingContainer = acceleratedCompositingForOverflowScrollEnabled()
&& canBeStackingContainer()
&& !hasUnclippedDescendant();
+ setNeedsToBeStackingContainer(needsToBeStackingContainer);
+
+ const bool needsCompositedScrolling = needsToBeStackingContainer
+ || (compositorDrivenAcceleratedScrollingEnabled()
+ && renderer()->view()->frameView()->containsScrollableArea(scrollableArea()));
Ian Vollick 2013/08/29 03:05:01 We've already asserted that renderer()->view()->fr
hartmanng 2013/09/05 20:43:58 Done.
+
// We gather a boolean value for use with Google UMA histograms to
// quantify the actual effects of a set of patches attempting to
// relax composited scrolling requirements, thereby increasing the
« 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