Title: [121708] trunk/Source/WebCore
Revision
121708
Author
timothy_hor...@apple.com
Date
2012-07-02 15:14:54 -0700 (Mon, 02 Jul 2012)

Log Message

Compositing layer sync should cause deferred repaints to be fired immediately
https://bugs.webkit.org/show_bug.cgi?id=90401
<rdar://problem/11792028>

Reviewed by Simon Fraser and Antti Koivisto.

If we sync compositing layers and allow the repaint to be deferred, there is time for a
visible flash to occur. Instead, stop the deferred repaint timer and repaint immediately.

No new tests, configuration and timing dependent.

* page/FrameView.cpp:
(WebCore::FrameView::syncCompositingStateForThisFrame):
(WebCore::FrameView::checkStopDelayingDeferredRepaints):
(WebCore::FrameView::stopDelayingDeferredRepaints): Split off from checkStopDelayingDeferredRepaints.
* page/FrameView.h:
(FrameView): Add stopDelayingDeferredRepaints.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (121707 => 121708)


--- trunk/Source/WebCore/ChangeLog	2012-07-02 21:47:42 UTC (rev 121707)
+++ trunk/Source/WebCore/ChangeLog	2012-07-02 22:14:54 UTC (rev 121708)
@@ -1,3 +1,23 @@
+2012-07-02  Tim Horton  <timothy_hor...@apple.com>
+
+        Compositing layer sync should cause deferred repaints to be fired immediately
+        https://bugs.webkit.org/show_bug.cgi?id=90401
+        <rdar://problem/11792028>
+
+        Reviewed by Simon Fraser and Antti Koivisto.
+
+        If we sync compositing layers and allow the repaint to be deferred, there is time for a
+        visible flash to occur. Instead, stop the deferred repaint timer and repaint immediately.
+
+        No new tests, configuration and timing dependent.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::syncCompositingStateForThisFrame):
+        (WebCore::FrameView::checkStopDelayingDeferredRepaints):
+        (WebCore::FrameView::stopDelayingDeferredRepaints): Split off from checkStopDelayingDeferredRepaints.
+        * page/FrameView.h:
+        (FrameView): Add stopDelayingDeferredRepaints.
+
 2012-07-02  Benjamin Poulain  <bpoul...@apple.com>
 
         Do not do any logging initialization when logging is disabled

Modified: trunk/Source/WebCore/page/FrameView.cpp (121707 => 121708)


--- trunk/Source/WebCore/page/FrameView.cpp	2012-07-02 21:47:42 UTC (rev 121707)
+++ trunk/Source/WebCore/page/FrameView.cpp	2012-07-02 22:14:54 UTC (rev 121708)
@@ -745,6 +745,10 @@
     if (needsLayout())
         return false;
 
+    // If we sync compositing layers and allow the repaint to be deferred, there is time for a
+    // visible flash to occur. Instead, stop the deferred repaint timer and repaint immediately.
+    stopDelayingDeferredRepaints();
+
     root->compositor()->flushPendingLayerChanges(rootFrameForSync == m_frame);
 
     return true;
@@ -1929,13 +1933,18 @@
 
 void FrameView::checkStopDelayingDeferredRepaints()
 {
-    if (!m_deferredRepaintTimer.isActive())
-        return;
-
     Document* document = m_frame->document();
     if (document && (document->parsing() || document->cachedResourceLoader()->requestCount()))
         return;
+
+    stopDelayingDeferredRepaints();
+}
     
+void FrameView::stopDelayingDeferredRepaints()
+{
+    if (!m_deferredRepaintTimer.isActive())
+        return;
+
     m_deferredRepaintTimer.stop();
 
     doDeferredRepaints();

Modified: trunk/Source/WebCore/page/FrameView.h (121707 => 121708)


--- trunk/Source/WebCore/page/FrameView.h	2012-07-02 21:47:42 UTC (rev 121707)
+++ trunk/Source/WebCore/page/FrameView.h	2012-07-02 22:14:54 UTC (rev 121708)
@@ -209,6 +209,7 @@
     void beginDeferredRepaints();
     void endDeferredRepaints();
     void checkStopDelayingDeferredRepaints();
+    void stopDelayingDeferredRepaints();
     void startDeferredRepaintTimer(double delay);
     void resetDeferredRepaintDelay();
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to