Title: [139984] branches/chromium/1364
Revision
139984
Author
wangxian...@chromium.org
Date
2013-01-17 09:27:34 -0800 (Thu, 17 Jan 2013)

Log Message

Merge 139461
> RenderLayerCompositor should let ScrollingCoordinator update main thread scrolling reasons after change of layers
> https://bugs.webkit.org/show_bug.cgi?id=105652
> 
> Reviewed by Simon Fraser.
> 
> Source/WebCore:
> 
> Let ScrollingCoordinator know the change of ViewportConstrainedNotCompositedReason in time.
> By the way moved RenderLayerCompositor::FixedPositionLayerNotCompositedReason to RenderLayer::ViewportConstrainedNotCompositedReason.
> 
> Tests: compositing/layer-creation/fixed-position-in-view-dynamic.html
>        compositing/layer-creation/fixed-position-out-of-view-dynamic.html
> 
> * page/scrolling/ScrollingCoordinator.cpp:
> (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects):
> (WebCore::ScrollingCoordinator::mainThreadScrollingReasons):
> (WebCore::ScrollingCoordinator::mainThreadScrollingReasonsAsText):
> * page/scrolling/ScrollingCoordinator.h:
> (ScrollingCoordinator):
> * page/scrolling/mac/ScrollingCoordinatorMac.h:
> (WebCore::ScrollingCoordinatorMac::hasVisibleSlowRepaintViewportConstrainedObjects):
> * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
> (WebCore::logThreadedScrollingMode):
> * rendering/RenderLayer.cpp:
> (WebCore::RenderLayer::RenderLayer):
> (WebCore::RenderLayer::paintLayer):
> * rendering/RenderLayer.h:
> (RenderLayer): Moved RenderLayerCompositor::FixedPositionLayerNotCompositedReason to here and renamed it to ViewportConstrainedNotCompositedReason.
> (WebCore::RenderLayer::setViewportConstrainedNotCompositedReason):
> (WebCore::RenderLayer::viewportConstrainedNotCompositedReason):
> * rendering/RenderLayerCompositor.cpp:
> (WebCore::RenderLayerCompositor::updateCompositingLayers):
> (WebCore::RenderLayerCompositor::updateBacking): Now updates ViewportConstrainedNotCompositedReason here instead of in computeCompositingRequirements before so that the reason is updated in time.
> (WebCore::RenderLayerCompositor::computeCompositingRequirements):
> (WebCore::RenderLayerCompositor::needsToBeComposited):
> (WebCore::RenderLayerCompositor::requiresCompositingLayer):
> (WebCore::RenderLayerCompositor::reasonForCompositing):
> (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
> (WebCore::RenderLayerCompositor::reportMemoryUsage):
> * rendering/RenderLayerCompositor.h:
> (RenderLayerCompositor):
> 
> LayoutTests:
> 
> Tests to ensure mainThreadScrollingReasons are correctly updated after a fixed element is dynamically inserted into the DOM tree.
> 
> * compositing/layer-creation/fixed-position-in-view-dynamic-expected.txt: Added.
> * compositing/layer-creation/fixed-position-in-view-dynamic.html: Added.
> * compositing/layer-creation/fixed-position-out-of-view-dynamic-expected.txt: Added.
> * compositing/layer-creation/fixed-position-out-of-view-dynamic.html: Added.
> 

TBR=wangxian...@chromium.org
Review URL: https://codereview.chromium.org/11970041

Modified Paths

Added Paths

Diff

Copied: branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic-expected.txt (from rev 139461, trunk/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic-expected.txt) (0 => 139984)


--- branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic-expected.txt	                        (rev 0)
+++ branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic-expected.txt	2013-01-17 17:27:34 UTC (rev 139984)
@@ -0,0 +1,2 @@
+PASS
+

Copied: branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic.html (from rev 139461, trunk/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic.html) (0 => 139984)


--- branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic.html	                        (rev 0)
+++ branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-in-view-dynamic.html	2013-01-17 17:27:34 UTC (rev 139984)
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+  <style>
+    .fixed {
+      position: fixed;
+      width: 10px;
+      height: 10px;
+      top: 100px;
+    }
+  </style>
+
+  <script type="text/_javascript_">
+    if (window.testRunner && window.internals) {
+      testRunner.dumpAsText();
+      internals.settings.setAcceleratedCompositingForFixedPositionEnabled(true);
+      internals.settings.setFixedPositionCreatesStackingContext(true);
+
+      addEventListener("load", function() {
+        var fixed = document.createElement("div");
+        document.body.appendChild(fixed);
+        document.body.offsetHeight;
+        fixed.className = "fixed";
+        var mainThreadScrollingReasons = internals.mainThreadScrollingReasons(document);
+        document.getElementById("result").innerText = !mainThreadScrollingReasons ? "PASS" : "FAIL: " + mainThreadScrollingReasons;
+      }, false);
+    }
+  </script>
+</head>
+
+<body>
+  <pre id="result"></pre>
+</body>
+</html>
+

Copied: branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic-expected.txt (from rev 139461, trunk/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic-expected.txt) (0 => 139984)


--- branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic-expected.txt	                        (rev 0)
+++ branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic-expected.txt	2013-01-17 17:27:34 UTC (rev 139984)
@@ -0,0 +1,2 @@
+PASS
+

Copied: branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic.html (from rev 139461, trunk/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic.html) (0 => 139984)


--- branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic.html	                        (rev 0)
+++ branches/chromium/1364/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-dynamic.html	2013-01-17 17:27:34 UTC (rev 139984)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+  <style>
+    .fixed {
+      position: fixed;
+      width: 10px;
+      height: 10px;
+      top: -100px;
+    }
+  </style>
+
+  <script type="text/_javascript_">
+    if (window.testRunner && window.internals) {
+      testRunner.dumpAsText();
+      internals.settings.setAcceleratedCompositingForFixedPositionEnabled(true);
+      internals.settings.setFixedPositionCreatesStackingContext(true);
+
+      addEventListener("load", function() {
+        var fixed = document.createElement("div");
+        document.body.appendChild(fixed);
+        document.body.offsetHeight;
+        fixed.className = "fixed";
+        var mainThreadScrollingReasons = internals.mainThreadScrollingReasons(document);
+        document.getElementById("result").innerText = !mainThreadScrollingReasons ? "PASS" : "FAIL: " + mainThreadScrollingReasons;
+        testRunner.notifyDone();
+      }, false);
+    }
+  </script>
+</head>
+
+<body>
+  <pre id="result"></pre>
+</body>
+</html>
+

Modified: branches/chromium/1364/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp	2013-01-17 17:27:34 UTC (rev 139984)
@@ -395,7 +395,7 @@
 }
 #endif
 
-bool ScrollingCoordinator::hasVisibleSlowRepaintFixedObjects(FrameView* frameView) const
+bool ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects(FrameView* frameView) const
 {
     const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects = frameView->viewportConstrainedObjects();
     if (!viewportConstrainedObjects)
@@ -408,7 +408,7 @@
             return true;
         RenderLayer* layer = toRenderBoxModelObject(viewportConstrainedObject)->layer();
         // Any explicit reason that a fixed position element is not composited shouldn't cause slow scrolling.
-        if (!layer->isComposited() && layer->compositor()->fixedPositionLayerNotCompositedReason(layer) == RenderLayerCompositor::NoReason)
+        if (!layer->isComposited() && layer->viewportConstrainedNotCompositedReason() == RenderLayer::NoNotCompositedReason)
             return true;
     }
     return false;
@@ -429,8 +429,8 @@
         mainThreadScrollingReasons |= HasSlowRepaintObjects;
     if (!supportsFixedPositionLayers() && frameView->hasViewportConstrainedObjects())
         mainThreadScrollingReasons |= HasViewportConstrainedObjectsWithoutSupportingFixedLayers;
-    if (supportsFixedPositionLayers() && hasVisibleSlowRepaintFixedObjects(frameView))
-        mainThreadScrollingReasons |= HasNonLayerFixedObjects;
+    if (supportsFixedPositionLayers() && hasVisibleSlowRepaintViewportConstrainedObjects(frameView))
+        mainThreadScrollingReasons |= HasNonLayerViewportConstrainedObjects;
     if (m_page->mainFrame()->document()->isImageDocument())
         mainThreadScrollingReasons |= IsImageDocument;
 
@@ -472,8 +472,8 @@
         stringBuilder.append("Has slow repaint objects, ");
     if (reasons & ScrollingCoordinator::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
         stringBuilder.append("Has viewport constrained objects without supporting fixed layers, ");
-    if (reasons & ScrollingCoordinator::HasNonLayerFixedObjects)
-        stringBuilder.append("Has non-layer fixed objects, ");
+    if (reasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects)
+        stringBuilder.append("Has non-layer viewport-constrained objects, ");
     if (reasons & ScrollingCoordinator::IsImageDocument)
         stringBuilder.append("Is image document, ");
 

Modified: branches/chromium/1364/Source/WebCore/page/scrolling/ScrollingCoordinator.h (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/page/scrolling/ScrollingCoordinator.h	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/page/scrolling/ScrollingCoordinator.h	2013-01-17 17:27:34 UTC (rev 139984)
@@ -137,7 +137,7 @@
         ForcedOnMainThread = 1 << 0,
         HasSlowRepaintObjects = 1 << 1,
         HasViewportConstrainedObjectsWithoutSupportingFixedLayers = 1 << 2,
-        HasNonLayerFixedObjects = 1 << 3,
+        HasNonLayerViewportConstrainedObjects = 1 << 3,
         IsImageDocument = 1 << 4
     };
 
@@ -174,7 +174,7 @@
     virtual void recomputeWheelEventHandlerCountForFrameView(FrameView*) { }
     virtual void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons) { }
 
-    virtual bool hasVisibleSlowRepaintFixedObjects(FrameView*) const;
+    virtual bool hasVisibleSlowRepaintViewportConstrainedObjects(FrameView*) const;
     void updateShouldUpdateScrollLayerPositionOnMainThread();
     
     void updateMainFrameScrollPositionTimerFired(Timer<ScrollingCoordinator>*);

Modified: branches/chromium/1364/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h	2013-01-17 17:27:34 UTC (rev 139984)
@@ -89,7 +89,7 @@
     virtual void recomputeWheelEventHandlerCountForFrameView(FrameView*);
     virtual void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons);
 
-    virtual bool hasVisibleSlowRepaintFixedObjects(FrameView*) const { return false; }
+    virtual bool hasVisibleSlowRepaintViewportConstrainedObjects(FrameView*) const { return false; }
 
     void ensureRootStateNodeForFrameView(FrameView*);
     ScrollingStateNode* stateNodeForID(ScrollingNodeID);

Modified: branches/chromium/1364/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm	2013-01-17 17:27:34 UTC (rev 139984)
@@ -366,7 +366,7 @@
             reasonsDescription.append("slow-repaint objects,");
         if (mainThreadScrollingReasons & ScrollingCoordinator::HasViewportConstrainedObjectsWithoutSupportingFixedLayers)
             reasonsDescription.append("viewport-constrained objects,");
-        if (mainThreadScrollingReasons & ScrollingCoordinator::HasNonLayerFixedObjects)
+        if (mainThreadScrollingReasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects)
             reasonsDescription.append("non-layer viewport-constrained objects,");
         if (mainThreadScrollingReasons & ScrollingCoordinator::IsImageDocument)
             reasonsDescription.append("image document,");

Modified: branches/chromium/1364/Source/WebCore/rendering/RenderLayer.cpp (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/rendering/RenderLayer.cpp	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/rendering/RenderLayer.cpp	2013-01-17 17:27:34 UTC (rev 139984)
@@ -166,6 +166,7 @@
 #if USE(ACCELERATED_COMPOSITING)
     , m_hasCompositingDescendant(false)
     , m_indirectCompositingReason(NoIndirectCompositingReason)
+    , m_viewportConstrainedNotCompositedReason(NoNotCompositedReason)
 #endif
     , m_containsDirtyOverlayScrollbars(false)
     , m_updatingMarqueePosition(false)
@@ -3397,8 +3398,8 @@
             // If this RenderLayer should paint into its backing, that will be done via RenderLayerBacking::paintIntoLayer().
             return;
         }
-    } else if (compositor()->fixedPositionLayerNotCompositedReason(this) == RenderLayerCompositor::LayerBoundsOutOfView) {
-        // Don't paint out-of-view fixed position layers (when doing prepainting) because they will never be visible
+    } else if (viewportConstrainedNotCompositedReason() == NotCompositedForBoundsOutOfView) {
+        // Don't paint out-of-view viewport constrained layers (when doing prepainting) because they will never be visible
         // unless their position or viewport size is changed.
         return;
     }

Modified: branches/chromium/1364/Source/WebCore/rendering/RenderLayer.h (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/rendering/RenderLayer.h	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/rendering/RenderLayer.h	2013-01-17 17:27:34 UTC (rev 139984)
@@ -726,6 +726,17 @@
 
     virtual void reportMemoryUsage(MemoryObjectInfo*) const OVERRIDE;
 
+#if USE(ACCELERATED_COMPOSITING)
+    enum ViewportConstrainedNotCompositedReason {
+        NoNotCompositedReason,
+        NotCompositedForBoundsOutOfView,
+        NotCompositedForNonViewContainer,
+    };
+
+    void setViewportConstrainedNotCompositedReason(ViewportConstrainedNotCompositedReason reason) { m_viewportConstrainedNotCompositedReason = reason; }
+    ViewportConstrainedNotCompositedReason viewportConstrainedNotCompositedReason() const { return static_cast<ViewportConstrainedNotCompositedReason>(m_viewportConstrainedNotCompositedReason); }
+#endif
+
 private:
     void updateZOrderLists();
     void rebuildZOrderLists();
@@ -1035,6 +1046,7 @@
 #if USE(ACCELERATED_COMPOSITING)
     bool m_hasCompositingDescendant : 1; // In the z-order tree.
     unsigned m_indirectCompositingReason : 3;
+    unsigned m_viewportConstrainedNotCompositedReason : 2;
 #endif
 
     bool m_containsDirtyOverlayScrollbars : 1;

Modified: branches/chromium/1364/Source/WebCore/rendering/RenderLayerCompositor.cpp (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-01-17 17:27:34 UTC (rev 139984)
@@ -454,7 +454,6 @@
         CompositingState compState(updateRoot, m_compositingConsultsOverlap);
         bool layersChanged = false;
         bool saw3DTransform = false;
-        m_fixedPositionLayerNotCompositedReasonMap.clear();
         if (m_compositingConsultsOverlap) {
             OverlapMap overlapTestRequestMap;
             computeCompositingRequirements(0, updateRoot, &overlapTestRequestMap, compState, layersChanged, saw3DTransform);
@@ -550,8 +549,9 @@
 bool RenderLayerCompositor::updateBacking(RenderLayer* layer, CompositingChangeRepaint shouldRepaint)
 {
     bool layerChanged = false;
+    RenderLayer::ViewportConstrainedNotCompositedReason viewportConstrainedNotCompositedReason = RenderLayer::NoNotCompositedReason;
 
-    if (needsToBeComposited(layer)) {
+    if (needsToBeComposited(layer, &viewportConstrainedNotCompositedReason)) {
         enableCompositingMode();
         
         if (!layer->backing()) {
@@ -623,10 +623,17 @@
     if (layerChanged)
         layer->clearClipRectsIncludingDescendants(PaintingClipRects);
 
-    // If a fixed position layer gained/lost a backing, the scrolling coordinator needs to recalculate whether it can do fast scrolling.
-    if (layerChanged && layer->renderer()->style()->position() == FixedPosition) {
-        if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
-            scrollingCoordinator->frameViewFixedObjectsDidChange(m_renderView->frameView());
+    // If a fixed position layer gained/lost a backing or the reason not compositing it changed,
+    // the scrolling coordinator needs to recalculate whether it can do fast scrolling.
+    if (layer->renderer()->style()->position() == FixedPosition) {
+        if (layer->viewportConstrainedNotCompositedReason() != viewportConstrainedNotCompositedReason) {
+            layer->setViewportConstrainedNotCompositedReason(viewportConstrainedNotCompositedReason);
+            layerChanged = true;
+        }
+        if (layerChanged) {
+            if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
+                scrollingCoordinator->frameViewFixedObjectsDidChange(m_renderView->frameView());
+        }
     }
     
     if (layer->backing())
@@ -845,8 +852,7 @@
     CompositingState childState(compositingState);
     childState.m_subtreeIsCompositing = false;
 
-    FixedPositionLayerNotCompositedReason fixedPositionLayerNotCompositedReason = NoReason;
-    bool willBeComposited = needsToBeComposited(layer, &fixedPositionLayerNotCompositedReason);
+    bool willBeComposited = needsToBeComposited(layer);
     if (willBeComposited) {
         // Tell the parent it has compositing descendants.
         compositingState.m_subtreeIsCompositing = true;
@@ -855,8 +861,7 @@
 
         if (overlapMap)
             overlapMap->pushCompositingContainer();
-    } else if (fixedPositionLayerNotCompositedReason != NoReason)
-        m_fixedPositionLayerNotCompositedReasonMap.set(layer, fixedPositionLayerNotCompositedReason);
+    }
 
 #if !ASSERT_DISABLED
     LayerListMutationDetector mutationChecker(layer);
@@ -1564,18 +1569,18 @@
     return false;
 }
 
-bool RenderLayerCompositor::needsToBeComposited(const RenderLayer* layer, FixedPositionLayerNotCompositedReason* fixedPositionLayerNotCompositedReason) const
+bool RenderLayerCompositor::needsToBeComposited(const RenderLayer* layer, RenderLayer::ViewportConstrainedNotCompositedReason* viewportConstrainedNotCompositedReason) const
 {
     if (!canBeComposited(layer))
         return false;
 
-    return requiresCompositingLayer(layer, fixedPositionLayerNotCompositedReason) || layer->mustCompositeForIndirectReasons() || (inCompositingMode() && layer->isRootLayer());
+    return requiresCompositingLayer(layer, viewportConstrainedNotCompositedReason) || layer->mustCompositeForIndirectReasons() || (inCompositingMode() && layer->isRootLayer());
 }
 
 // Note: this specifies whether the RL needs a compositing layer for intrinsic reasons.
 // Use needsToBeComposited() to determine if a RL actually needs a compositing layer.
 // static
-bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer, FixedPositionLayerNotCompositedReason* fixedPositionLayerNotCompositedReason) const
+bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer, RenderLayer::ViewportConstrainedNotCompositedReason* viewportConstrainedNotCompositedReason) const
 {
     RenderObject* renderer = layer->renderer();
     // The compositing state of a reflection should match that of its reflected layer.
@@ -1593,7 +1598,7 @@
         || clipsCompositingDescendants(layer)
         || requiresCompositingForAnimation(renderer)
         || requiresCompositingForFilters(renderer)
-        || requiresCompositingForPosition(renderer, layer, fixedPositionLayerNotCompositedReason)
+        || requiresCompositingForPosition(renderer, layer, viewportConstrainedNotCompositedReason)
         || requiresCompositingForOverflowScrolling(layer)
         || requiresCompositingForBlending(renderer);
 }
@@ -1681,7 +1686,7 @@
         return "filters";
 
     if (requiresCompositingForPosition(renderer, layer))
-        return "position: fixed";
+        return renderer->style()->position() == FixedPosition ? "position: fixed" : "position: sticky";
 
     if (requiresCompositingForOverflowScrolling(layer))
         return "-webkit-overflow-scrolling: touch";
@@ -1971,7 +1976,7 @@
 #endif
 }
 
-bool RenderLayerCompositor::requiresCompositingForPosition(RenderObject* renderer, const RenderLayer* layer, FixedPositionLayerNotCompositedReason* fixedPositionLayerNotCompositedReason) const
+bool RenderLayerCompositor::requiresCompositingForPosition(RenderObject* renderer, const RenderLayer* layer, RenderLayer::ViewportConstrainedNotCompositedReason* viewportConstrainedNotCompositedReason) const
 {
     // position:fixed elements that create their own stacking context (e.g. have an explicit z-index,
     // opacity, transform) can get their own composited layer. A stacking context is required otherwise
@@ -1990,11 +1995,11 @@
         return false;
     }
 
-    // Don't promote fixed position elements that are descendants of transformed elements.
-    // They will stay fixed wrt the transformed element rather than the enclosing frame.
+    // Don't promote fixed position elements that are descendants of a non-view container, e.g. transformed elements.
+    // They will stay fixed wrt the container rather than the enclosing frame.
     if (container != m_renderView) {
-        if (fixedPositionLayerNotCompositedReason)
-            *fixedPositionLayerNotCompositedReason = DescendantOfTransformedElement;
+        if (viewportConstrainedNotCompositedReason)
+            *viewportConstrainedNotCompositedReason = RenderLayer::NotCompositedForNonViewContainer;
         return false;
     }
 
@@ -2005,8 +2010,8 @@
             | RenderLayer::ExcludeHiddenDescendants | RenderLayer::DontConstrainForMask | RenderLayer::IncludeCompositedDescendants);
         layerBounds.scale(frameView->frame()->frameScaleFactor());
         if (!viewBounds.intersects(enclosingIntRect(layerBounds))) {
-            if (fixedPositionLayerNotCompositedReason)
-                *fixedPositionLayerNotCompositedReason = LayerBoundsOutOfView;
+            if (viewportConstrainedNotCompositedReason)
+                *viewportConstrainedNotCompositedReason = RenderLayer::NotCompositedForBoundsOutOfView;
             return false;
         }
     }

Modified: branches/chromium/1364/Source/WebCore/rendering/RenderLayerCompositor.h (139983 => 139984)


--- branches/chromium/1364/Source/WebCore/rendering/RenderLayerCompositor.h	2013-01-17 16:38:23 UTC (rev 139983)
+++ branches/chromium/1364/Source/WebCore/rendering/RenderLayerCompositor.h	2013-01-17 17:27:34 UTC (rev 139984)
@@ -229,14 +229,6 @@
     void reportMemoryUsage(MemoryObjectInfo*) const;
     void setShouldReevaluateCompositingAfterLayout() { m_reevaluateCompositingAfterLayout = true; }
 
-    enum FixedPositionLayerNotCompositedReason {
-        NoReason,
-        LayerBoundsOutOfView,
-        DescendantOfTransformedElement,
-    };
-
-    FixedPositionLayerNotCompositedReason fixedPositionLayerNotCompositedReason(const RenderLayer* layer) const { return m_fixedPositionLayerNotCompositedReasonMap.get(layer); }
-
 private:
     class OverlapMap;
 
@@ -251,9 +243,9 @@
     virtual void flushLayers(GraphicsLayerUpdater*) OVERRIDE;
     
     // Whether the given RL needs a compositing layer.
-    bool needsToBeComposited(const RenderLayer*, FixedPositionLayerNotCompositedReason* = 0) const;
+    bool needsToBeComposited(const RenderLayer*, RenderLayer::ViewportConstrainedNotCompositedReason* = 0) const;
     // Whether the layer has an intrinsic need for compositing layer.
-    bool requiresCompositingLayer(const RenderLayer*, FixedPositionLayerNotCompositedReason* = 0) const;
+    bool requiresCompositingLayer(const RenderLayer*, RenderLayer::ViewportConstrainedNotCompositedReason* = 0) const;
     // Whether the layer could ever be composited.
     bool canBeComposited(const RenderLayer*) const;
 
@@ -318,7 +310,7 @@
     bool requiresCompositingForFilters(RenderObject*) const;
     bool requiresCompositingForBlending(RenderObject* renderer) const;
     bool requiresCompositingForScrollableFrame() const;
-    bool requiresCompositingForPosition(RenderObject*, const RenderLayer*, FixedPositionLayerNotCompositedReason* = 0) const;
+    bool requiresCompositingForPosition(RenderObject*, const RenderLayer*, RenderLayer::ViewportConstrainedNotCompositedReason* = 0) const;
     bool requiresCompositingForOverflowScrolling(const RenderLayer*) const;
     bool requiresCompositingForIndirectReason(RenderObject*, bool hasCompositedDescendants, bool has3DTransformedDescendants, RenderLayer::IndirectCompositingReason&) const;
 
@@ -399,9 +391,6 @@
     double m_obligatoryBackingStoreBytes;
     double m_secondaryBackingStoreBytes;
 #endif
-
-    typedef HashMap<const RenderLayer*, FixedPositionLayerNotCompositedReason> FixedPositionLayerNotCompositedReasonMap;
-    FixedPositionLayerNotCompositedReasonMap m_fixedPositionLayerNotCompositedReasonMap;
 };
 
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to