Index: Source/core/rendering/RenderLayer.cpp |
diff --git a/Source/core/rendering/RenderLayer.cpp b/Source/core/rendering/RenderLayer.cpp |
index ad7140e7d9eec108e4dfdb6e05ef0952b3217262..c3962750e71970456864ac2b6e4235ecea00f8c0 100644 |
--- a/Source/core/rendering/RenderLayer.cpp |
+++ b/Source/core/rendering/RenderLayer.cpp |
@@ -133,7 +133,7 @@ RenderLayer::RenderLayer(RenderLayerModelObject* renderer) |
, m_hasOutOfFlowPositionedDescendantDirty(true) |
, m_hasUnclippedDescendant(false) |
, m_isUnclippedDescendant(false) |
- , m_needsCompositedScrolling(false) |
+ , m_isScrollableAreaHasBeenRecorded(false) |
, m_canBePromotedToStackingContainer(false) |
, m_canBePromotedToStackingContainerDirty(true) |
, m_isRootLayer(renderer->isRenderView()) |
@@ -154,6 +154,7 @@ RenderLayer::RenderLayer(RenderLayerModelObject* renderer) |
#endif |
, m_canSkipRepaintRectsUpdateOnScroll(renderer->isTableCell()) |
, m_hasFilterInfo(false) |
+ , m_needsCompositedScrolling(MixedTriState) |
, m_blendMode(BlendModeNormal) |
, m_renderer(renderer) |
, m_parent(0) |
@@ -2051,7 +2052,7 @@ bool RenderLayer::needsToBeStackingContainer() const |
{ |
switch (m_forceNeedsCompositedScrolling) { |
case DoNotForceCompositedScrolling: |
- return m_needsCompositedScrolling; |
+ return m_needsCompositedScrolling == TrueTriState; |
case CompositedScrollingAlwaysOn: |
return true; |
case CompositedScrollingAlwaysOff: |
@@ -2059,7 +2060,7 @@ bool RenderLayer::needsToBeStackingContainer() const |
} |
ASSERT_NOT_REACHED(); |
- return m_needsCompositedScrolling; |
+ return m_needsCompositedScrolling == TrueTriState; |
} |
void RenderLayer::updateNeedsCompositedScrolling() |
@@ -2086,10 +2087,19 @@ void RenderLayer::updateNeedsCompositedScrolling() |
void RenderLayer::setNeedsCompositedScrolling(bool needsCompositedScrolling) |
{ |
- if (m_needsCompositedScrolling == needsCompositedScrolling) |
+ const bool neededCompositedScrolling = m_needsCompositedScrolling == TrueTriState; |
+ if (neededCompositedScrolling == needsCompositedScrolling) |
return; |
- m_needsCompositedScrolling = needsCompositedScrolling; |
+ // Count the total number of RenderLayers which need composited scrolling at |
+ // some point. This should be recorded at most once per RenderLayer, so we |
+ // check if m_needsCompositedScrolling has been set yet. If it hasn't been |
+ // set, its value will be MixedTriState, but if it has been set, it will be |
+ // TrueTriState or FalseTriState. |
+ if (acceleratedCompositingForOverflowScrollEnabled() && m_needsCompositedScrolling == MixedTriState) |
+ HistogramSupport::histogramEnumeration("Renderer.NeedsToBeStackingContainer", 1, 2); |
+ |
+ m_needsCompositedScrolling = needsCompositedScrolling ? TrueTriState : FalseTriState; |
// Note, the z-order lists may need to be rebuilt, but our code guarantees |
// that we have not affected stacking, so we will not dirty |
@@ -6187,6 +6197,13 @@ void RenderLayer::updateScrollableAreaSet(bool hasOverflow) |
if (hasOverflow && isVisibleToHitTest) { |
if (frameView->addScrollableArea(scrollableArea())) |
compositor()->setNeedsUpdateCompositingRequirementsState(); |
+ |
+ // Count the total number of RenderLayers that are scrollable areas for |
+ // any period. We only want to record this at most once per RenderLayer. |
+ if (!m_isScrollableAreaHasBeenRecorded) { |
+ HistogramSupport::histogramEnumeration("Renderer.IsScrollableArea", 1, 2); |
+ m_isScrollableAreaHasBeenRecorded = true; |
+ } |
Ian Vollick
2013/09/03 18:28:07
This should happen inside the previous 'if', I thi
hartmanng
2013/09/03 21:26:56
Done.
|
} else { |
if (frameView->removeScrollableArea(scrollableArea())) |
setNeedsCompositedScrolling(false); |