Title: [175781] trunk/Source/WebCore
Revision
175781
Author
[email protected]
Date
2014-11-08 15:50:43 -0800 (Sat, 08 Nov 2014)

Log Message

Don't try to schedule a GraphicsLayer flush when propagating changes to replicas inside a flush
https://bugs.webkit.org/show_bug.cgi?id=138532

Reviewed by Dan Bernstein.

When changing masks on replica layers with certain layer configurations,
it was possible to hit an assertion that a flush was being scheduled when already
flushing, via propagateLayerChangeToReplicas(). Fix by passing the scheduleFlush
flag along.

Not testable with current GraphicsLayer configurations.

* platform/graphics/ca/GraphicsLayerCA.cpp:
* platform/graphics/ca/GraphicsLayerCA.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (175780 => 175781)


--- trunk/Source/WebCore/ChangeLog	2014-11-08 20:27:13 UTC (rev 175780)
+++ trunk/Source/WebCore/ChangeLog	2014-11-08 23:50:43 UTC (rev 175781)
@@ -1,3 +1,20 @@
+2014-11-08  Simon Fraser  <[email protected]>
+
+        Don't try to schedule a GraphicsLayer flush when propagating changes to replicas inside a flush
+        https://bugs.webkit.org/show_bug.cgi?id=138532
+
+        Reviewed by Dan Bernstein.
+
+        When changing masks on replica layers with certain layer configurations, 
+        it was possible to hit an assertion that a flush was being scheduled when already
+        flushing, via propagateLayerChangeToReplicas(). Fix by passing the scheduleFlush
+        flag along.
+        
+        Not testable with current GraphicsLayer configurations.
+
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        * platform/graphics/ca/GraphicsLayerCA.h:
+
 2014-11-08  Beth Dakin  <[email protected]>
 
         Implement action menu support for videos

Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (175780 => 175781)


--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2014-11-08 20:27:13 UTC (rev 175780)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2014-11-08 23:50:43 UTC (rev 175781)
@@ -3181,7 +3181,7 @@
                       replicaPosition.y() + m_anchorPoint.y() * m_size.height());
 }
 
-void GraphicsLayerCA::propagateLayerChangeToReplicas()
+void GraphicsLayerCA::propagateLayerChangeToReplicas(ScheduleFlushOrNot scheduleFlush)
 {
     for (GraphicsLayer* currentLayer = this; currentLayer; currentLayer = currentLayer->parent()) {
         GraphicsLayerCA& currentLayerCA = downcast<GraphicsLayerCA>(*currentLayer);
@@ -3189,7 +3189,7 @@
             break;
 
         if (currentLayerCA.replicaLayer())
-            downcast<GraphicsLayerCA>(*currentLayerCA.replicaLayer()).noteLayerPropertyChanged(ReplicatedLayerChanged);
+            downcast<GraphicsLayerCA>(*currentLayerCA.replicaLayer()).noteLayerPropertyChanged(ReplicatedLayerChanged, scheduleFlush);
     }
 }
 
@@ -3390,7 +3390,7 @@
 void GraphicsLayerCA::noteSublayersChanged(ScheduleFlushOrNot scheduleFlush)
 {
     noteLayerPropertyChanged(ChildrenChanged, scheduleFlush);
-    propagateLayerChangeToReplicas();
+    propagateLayerChangeToReplicas(scheduleFlush);
 }
 
 bool GraphicsLayerCA::canThrottleLayerFlush() const

Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (175780 => 175781)


--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h	2014-11-08 20:27:13 UTC (rev 175780)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h	2014-11-08 23:50:43 UTC (rev 175781)
@@ -350,8 +350,6 @@
     void removeCloneLayers();
     FloatPoint positionForCloneRootLayer() const;
     
-    void propagateLayerChangeToReplicas();
-    
     // All these "update" methods will be called inside a BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS block.
     void updateLayerNames();
     void updateSublayerList(bool maxLayerDepthReached = false);
@@ -445,6 +443,8 @@
     void noteSublayersChanged(ScheduleFlushOrNot = ScheduleFlush);
     void noteChangesForScaleSensitiveProperties();
 
+    void propagateLayerChangeToReplicas(ScheduleFlushOrNot = ScheduleFlush);
+
     void repaintLayerDirtyRects();
 
     RefPtr<PlatformCALayer> m_layer; // The main layer
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to