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.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@121708
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2012-07-02 Tim Horton <timothy_horton@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 <bpoulain@apple.com>
Do not do any logging initialization when logging is disabled
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;
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();
void beginDeferredRepaints();
void endDeferredRepaints();
void checkStopDelayingDeferredRepaints();
+ void stopDelayingDeferredRepaints();
void startDeferredRepaintTimer(double delay);
void resetDeferredRepaintDelay();