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

Unified Diff: Source/core/rendering/compositing/RenderLayerCompositor.cpp

Issue 185293002: Factor GraphicsLayerUpdater out of RenderLayerCompositor (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address reviewer comments Created 6 years, 10 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/compositing/GraphicsLayerUpdater.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/compositing/RenderLayerCompositor.cpp
diff --git a/Source/core/rendering/compositing/RenderLayerCompositor.cpp b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
index 0d7effb3e1639ba474bfc04dcdba459e105c0c0f..37f0e17c1ba463a34a97f28499bdfbd4feb534dc 100644
--- a/Source/core/rendering/compositing/RenderLayerCompositor.cpp
+++ b/Source/core/rendering/compositing/RenderLayerCompositor.cpp
@@ -59,6 +59,7 @@
#include "core/rendering/RenderVideo.h"
#include "core/rendering/RenderView.h"
#include "core/rendering/compositing/CompositedLayerMapping.h"
+#include "core/rendering/compositing/GraphicsLayerUpdater.h"
#include "platform/OverscrollTheme.h"
#include "platform/TraceEvent.h"
#include "platform/geometry/TransformState.h"
@@ -472,15 +473,16 @@ void RenderLayerCompositor::updateCompositingLayersInternal()
}
}
- needHierarchyAndGeometryUpdate |= layersChanged;
+ if (layersChanged)
+ needHierarchyAndGeometryUpdate = true;
}
if (needHierarchyAndGeometryUpdate) {
// Update the hierarchy of the compositing layers.
Vector<GraphicsLayer*> childList;
{
- TRACE_EVENT0("blink_rendering", "RenderLayerCompositor::rebuildCompositingLayerTree");
- rebuildCompositingLayerTree(updateRoot, childList, 0);
+ TRACE_EVENT0("blink_rendering", "GraphicsLayerUpdater::rebuildTree");
+ GraphicsLayerUpdater(*m_renderView).rebuildTree(*updateRoot, childList, 0);
}
// Host the document layer in the RenderView's root layer.
@@ -499,8 +501,8 @@ void RenderLayerCompositor::updateCompositingLayersInternal()
} else if (needGeometryUpdate) {
// We just need to do a geometry update. This is only used for position:fixed scrolling;
// most of the time, geometry is updated via RenderLayer::styleChanged().
- TRACE_EVENT0("blink_rendering", "RenderLayerCompositor::updateLayerTreeGeometry");
- updateLayerTreeGeometry(updateRoot);
+ TRACE_EVENT0("blink_rendering", "GraphicsLayerUpdater::updateRecursive");
+ GraphicsLayerUpdater(*m_renderView).updateRecursive(*updateRoot);
}
ASSERT(updateRoot || !m_compositingLayersNeedRebuild);
@@ -1277,127 +1279,6 @@ void RenderLayerCompositor::removeCompositedChildren(RenderLayer* layer)
hostingLayer->removeAllChildren();
}
-void RenderLayerCompositor::updateGraphicsLayersMappedToRenderLayer(RenderLayer* layer)
-{
- if (!layer->hasCompositedLayerMapping())
- return;
-
- CompositedLayerMappingPtr compositedLayerMapping = layer->compositedLayerMapping();
-
- // Note carefully: here we assume that the compositing state of all descendants have been updated already,
- // so it is legitimate to compute and cache the composited bounds for this layer.
- compositedLayerMapping->updateCompositedBounds();
-
- if (layer->reflectionInfo()) {
- RenderLayer* reflectionLayer = layer->reflectionInfo()->reflectionLayer();
- ASSERT(reflectionLayer);
- if (reflectionLayer->hasCompositedLayerMapping())
- reflectionLayer->compositedLayerMapping()->updateCompositedBounds();
- }
-
- compositedLayerMapping->updateGraphicsLayerConfiguration();
- compositedLayerMapping->updateGraphicsLayerGeometry();
-
- if (!layer->parent())
- updateRootLayerPosition();
-
- if (compositedLayerMapping->hasUnpositionedOverflowControlsLayers())
- layer->scrollableArea()->positionOverflowControls();
-}
-
-void RenderLayerCompositor::rebuildCompositingLayerTree(RenderLayer* layer, Vector<GraphicsLayer*>& childLayersOfEnclosingLayer, int depth)
-{
- // Make the layer compositing if necessary, and set up clipping and content layers.
- // Note that we can only do work here that is independent of whether the descendant layers
- // have been processed. computeCompositingRequirements() will already have done the repaint if necessary.
-
- layer->stackingNode()->updateLayerListsIfNeeded();
- layer->update3dRenderingContext();
-
- // Used for gathering UMA data about the effect on memory usage of promoting all layers
- // that have a webkit-transition on opacity or transform and intersect the viewport.
- static double pixelsWithoutPromotingAllTransitions = 0.0;
- static double pixelsAddedByPromotingAllTransitions = 0.0;
-
- if (!depth) {
- pixelsWithoutPromotingAllTransitions = 0.0;
- pixelsAddedByPromotingAllTransitions = 0.0;
- }
-
- const bool hasCompositedLayerMapping = layer->hasCompositedLayerMapping();
- CompositedLayerMappingPtr currentCompositedLayerMapping = layer->compositedLayerMapping();
-
- updateGraphicsLayersMappedToRenderLayer(layer);
-
- // Grab some stats for histograms.
- if (hasCompositedLayerMapping) {
- pixelsWithoutPromotingAllTransitions += layer->size().height() * layer->size().width();
- } else {
- if ((layer->renderer()->style()->transitionForProperty(CSSPropertyOpacity) ||
- layer->renderer()->style()->transitionForProperty(CSSPropertyWebkitTransform)) &&
- m_renderView->viewRect().intersects(layer->absoluteBoundingBox()))
- pixelsAddedByPromotingAllTransitions += layer->size().height() * layer->size().width();
- }
-
- // If this layer has a compositedLayerMapping, then that is where we place subsequent children GraphicsLayers.
- // Otherwise children continue to append to the child list of the enclosing layer.
- Vector<GraphicsLayer*> layerChildren;
- Vector<GraphicsLayer*>& childList = hasCompositedLayerMapping ? layerChildren : childLayersOfEnclosingLayer;
-
-#if !ASSERT_DISABLED
- LayerListMutationDetector mutationChecker(layer->stackingNode());
-#endif
-
- if (layer->stackingNode()->isStackingContainer()) {
- RenderLayerStackingNodeIterator iterator(*layer->stackingNode(), NegativeZOrderChildren);
- while (RenderLayerStackingNode* curNode = iterator.next())
- rebuildCompositingLayerTree(curNode->layer(), childList, depth + 1);
-
- // If a negative z-order child is compositing, we get a foreground layer which needs to get parented.
- if (hasCompositedLayerMapping && currentCompositedLayerMapping->foregroundLayer())
- childList.append(currentCompositedLayerMapping->foregroundLayer());
- }
-
- RenderLayerStackingNodeIterator iterator(*layer->stackingNode(), NormalFlowChildren | PositiveZOrderChildren);
- while (RenderLayerStackingNode* curNode = iterator.next())
- rebuildCompositingLayerTree(curNode->layer(), childList, depth + 1);
-
- if (hasCompositedLayerMapping) {
- bool parented = false;
- if (layer->renderer()->isRenderPart())
- parented = parentFrameContentLayers(toRenderPart(layer->renderer()));
-
- if (!parented)
- currentCompositedLayerMapping->parentForSublayers()->setChildren(layerChildren);
-
- // If the layer has a clipping layer the overflow controls layers will be siblings of the clipping layer.
- // Otherwise, the overflow control layers are normal children.
- if (!currentCompositedLayerMapping->hasClippingLayer() && !currentCompositedLayerMapping->hasScrollingLayer()) {
- if (GraphicsLayer* overflowControlLayer = currentCompositedLayerMapping->layerForHorizontalScrollbar()) {
- overflowControlLayer->removeFromParent();
- currentCompositedLayerMapping->parentForSublayers()->addChild(overflowControlLayer);
- }
-
- if (GraphicsLayer* overflowControlLayer = currentCompositedLayerMapping->layerForVerticalScrollbar()) {
- overflowControlLayer->removeFromParent();
- currentCompositedLayerMapping->parentForSublayers()->addChild(overflowControlLayer);
- }
-
- if (GraphicsLayer* overflowControlLayer = currentCompositedLayerMapping->layerForScrollCorner()) {
- overflowControlLayer->removeFromParent();
- currentCompositedLayerMapping->parentForSublayers()->addChild(overflowControlLayer);
- }
- }
-
- childLayersOfEnclosingLayer.append(currentCompositedLayerMapping->childForSuperlayers());
- }
-
- if (!depth) {
- int percentageIncreaseInPixels = static_cast<int>(pixelsAddedByPromotingAllTransitions / pixelsWithoutPromotingAllTransitions * 100);
- blink::Platform::current()->histogramCustomCounts("Renderer.PixelIncreaseFromTransitions", percentageIncreaseInPixels, 0, 1000, 50);
- }
-}
-
void RenderLayerCompositor::frameViewDidChangeLocation(const IntPoint& contentsOffset)
{
if (m_overflowControlsHostLayer)
@@ -1525,6 +1406,7 @@ RenderLayerCompositor* RenderLayerCompositor::frameContentsCompositor(RenderPart
return 0;
}
+// FIXME: What does this function do? It needs a clearer name.
bool RenderLayerCompositor::parentFrameContentLayers(RenderPart* renderer)
{
RenderLayerCompositor* innerCompositor = frameContentsCompositor(renderer);
@@ -1545,20 +1427,6 @@ bool RenderLayerCompositor::parentFrameContentLayers(RenderPart* renderer)
return true;
}
-// This just updates layer geometry without changing the hierarchy.
-void RenderLayerCompositor::updateLayerTreeGeometry(RenderLayer* layer)
-{
- updateGraphicsLayersMappedToRenderLayer(layer);
-
-#if !ASSERT_DISABLED
- LayerListMutationDetector mutationChecker(layer->stackingNode());
-#endif
-
- RenderLayerStackingNodeIterator iterator(*layer->stackingNode(), AllChildren);
- while (RenderLayerStackingNode* curNode = iterator.next())
- updateLayerTreeGeometry(curNode->layer());
-}
-
// Recurs down the RenderLayer tree until its finds the compositing descendants of compositingAncestor and updates their geometry.
void RenderLayerCompositor::updateCompositingDescendantGeometry(RenderLayerStackingNode* compositingAncestor, RenderLayer* layer, bool compositedChildrenOnly)
{
« no previous file with comments | « Source/core/rendering/compositing/GraphicsLayerUpdater.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698