Title: [149691] trunk/Source/WebCore
Revision
149691
Author
[email protected]
Date
2013-05-07 14:12:58 -0700 (Tue, 07 May 2013)

Log Message

Still possible to fire paint-related LayoutMilestones before CA has committed the 
changes
https://bugs.webkit.org/show_bug.cgi?id=115753
-and corresponding-
<rdar://problem/13822315>

Reviewed by Simon Fraser.

To ensure we wait for the CA commit, we should wait until the end of the runloop 
with a zero-delay timer.

* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::RenderLayerCompositor):
(WebCore::RenderLayerCompositor::flushPendingLayerChanges):
(WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
(WebCore):
* rendering/RenderLayerCompositor.h:
(RenderLayerCompositor):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (149690 => 149691)


--- trunk/Source/WebCore/ChangeLog	2013-05-07 21:09:48 UTC (rev 149690)
+++ trunk/Source/WebCore/ChangeLog	2013-05-07 21:12:58 UTC (rev 149691)
@@ -1,3 +1,24 @@
+2013-05-07  Beth Dakin  <[email protected]>
+
+        Still possible to fire paint-related LayoutMilestones before CA has committed the 
+        changes
+        https://bugs.webkit.org/show_bug.cgi?id=115753
+        -and corresponding-
+        <rdar://problem/13822315>
+
+        Reviewed by Simon Fraser.
+
+        To ensure we wait for the CA commit, we should wait until the end of the runloop 
+        with a zero-delay timer.
+
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
+        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
+        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
+        (WebCore):
+        * rendering/RenderLayerCompositor.h:
+        (RenderLayerCompositor):
+
 2013-05-07  Chris Fleizach  <[email protected]>
 
         Bug 115694 - Fix bad cast to RenderHTMLCanvas

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (149690 => 149691)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-05-07 21:09:48 UTC (rev 149690)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-05-07 21:12:58 UTC (rev 149691)
@@ -214,6 +214,7 @@
     , m_layerFlushThrottlingEnabled(false)
     , m_layerFlushThrottlingTemporarilyDisabledForInteraction(false)
     , m_hasPendingLayerFlush(false)
+    , m_paintRelatedMilestonesTimer(this, &RenderLayerCompositor::paintRelatedMilestonesTimerFired)
 #if !LOG_DISABLED
     , m_rootLayerUpdateCount(0)
     , m_obligateCompositedLayerCount(0)
@@ -372,8 +373,8 @@
     ASSERT(m_flushingLayers);
     m_flushingLayers = false;
 
-    if (frameView)
-        frameView->firePaintRelatedMilestones();
+    if (!m_paintRelatedMilestonesTimer.isActive())
+        m_paintRelatedMilestonesTimer.startOneShot(0);
 
     if (!m_viewportConstrainedLayersNeedingUpdate.isEmpty()) {
         HashSet<RenderLayer*>::const_iterator end = m_viewportConstrainedLayersNeedingUpdate.end();
@@ -3188,6 +3189,13 @@
     scheduleLayerFlushNow();
 }
 
+void RenderLayerCompositor::paintRelatedMilestonesTimerFired(Timer<RenderLayerCompositor>*)
+{
+    FrameView* frameView = m_renderView ? m_renderView->frameView() : 0;
+    if (frameView)
+        frameView->firePaintRelatedMilestones();
+}
+
 } // namespace WebCore
 
 #endif // USE(ACCELERATED_COMPOSITING)

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (149690 => 149691)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2013-05-07 21:09:48 UTC (rev 149690)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2013-05-07 21:12:58 UTC (rev 149691)
@@ -385,6 +385,8 @@
     void startLayerFlushTimerIfNeeded();
     void layerFlushTimerFired(Timer<RenderLayerCompositor>*);
 
+    void paintRelatedMilestonesTimerFired(Timer<RenderLayerCompositor>*);
+
 #if !LOG_DISABLED
     const char* logReasonsForCompositing(const RenderLayer*);
     void logLayerInfo(const RenderLayer*, int depth);
@@ -450,6 +452,8 @@
     bool m_layerFlushThrottlingTemporarilyDisabledForInteraction;
     bool m_hasPendingLayerFlush;
 
+    Timer<RenderLayerCompositor> m_paintRelatedMilestonesTimer;
+
 #if !LOG_DISABLED
     int m_rootLayerUpdateCount;
     int m_obligateCompositedLayerCount; // count of layer that have to be composited.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to