Title: [167645] trunk/Source/WebKit2
Revision
167645
Author
[email protected]
Date
2014-04-21 19:16:53 -0700 (Mon, 21 Apr 2014)

Log Message

[wk2] Don't send intrinsic content size updates with dirty layout
https://bugs.webkit.org/show_bug.cgi?id=131964
<rdar://problem/14292718>

Reviewed by Simon Fraser.

* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
(WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
(WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded):
(WebKit::TiledCoreAnimationDrawingArea::flushLayers):
(WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
(WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeTimerFired): Deleted.
Instead of using a timer (which can fire while layout is dirty) to coalesce
intrinsic content size changes, send them only from flushLayers, just after updating layout.
This ensures that we never get intermediate intrinsic content sizes that won't be painted.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (167644 => 167645)


--- trunk/Source/WebKit2/ChangeLog	2014-04-22 02:15:12 UTC (rev 167644)
+++ trunk/Source/WebKit2/ChangeLog	2014-04-22 02:16:53 UTC (rev 167645)
@@ -1,5 +1,25 @@
 2014-04-21  Tim Horton  <[email protected]>
 
+        [wk2] Don't send intrinsic content size updates with dirty layout
+        https://bugs.webkit.org/show_bug.cgi?id=131964
+        <rdar://problem/14292718>
+
+        Reviewed by Simon Fraser.
+
+        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
+        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
+        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded):
+        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
+        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
+        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeTimerFired): Deleted.
+        Instead of using a timer (which can fire while layout is dirty) to coalesce
+        intrinsic content size changes, send them only from flushLayers, just after updating layout.
+        This ensures that we never get intermediate intrinsic content sizes that won't be painted.
+
+2014-04-21  Tim Horton  <[email protected]>
+
         Remove a unnecessary forward-declared class from TiledCoreAnimationDrawingArea.
 
         Rubber-stamped by Simon Fraser.

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (167644 => 167645)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2014-04-22 02:15:12 UTC (rev 167644)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2014-04-22 02:16:53 UTC (rev 167645)
@@ -33,7 +33,6 @@
 #include <WebCore/FloatRect.h>
 #include <WebCore/LayerFlushScheduler.h>
 #include <WebCore/LayerFlushSchedulerClient.h>
-#include <WebCore/Timer.h>
 #include <WebCore/TransformationMatrix.h>
 #include <wtf/HashMap.h>
 #include <wtf/RetainPtr.h>
@@ -106,7 +105,7 @@
     WebCore::TiledBacking* mainFrameTiledBacking() const;
     void updateDebugInfoLayer(bool showLayer);
 
-    void updateIntrinsicContentSizeTimerFired(WebCore::Timer<TiledCoreAnimationDrawingArea>*);
+    void updateIntrinsicContentSizeIfNeeded();
     void updateScrolledExposedRect();
 
     bool m_layerTreeStateIsFrozen;
@@ -126,7 +125,6 @@
     WebCore::FloatRect m_scrolledExposedRect;
 
     WebCore::IntSize m_lastSentIntrinsicContentSize;
-    WebCore::Timer<TiledCoreAnimationDrawingArea> m_updateIntrinsicContentSizeTimer;
     bool m_inUpdateGeometry;
 
     double m_transientZoomScale;

Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (167644 => 167645)


--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2014-04-22 02:15:12 UTC (rev 167644)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2014-04-22 02:16:53 UTC (rev 167645)
@@ -74,7 +74,6 @@
     , m_isPaintingSuspended(!(parameters.viewState & ViewState::IsVisible))
     , m_exposedRect(FloatRect::infiniteRect())
     , m_scrolledExposedRect(FloatRect::infiniteRect())
-    , m_updateIntrinsicContentSizeTimer(this, &TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeTimerFired)
     , m_transientZoomScale(1)
 {
     m_webPage->corePage()->settings().setForceCompositingMode(true);
@@ -199,28 +198,24 @@
     updateDebugInfoLayer(showTiledScrollingIndicator);
 }
 
-void TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged(const IntSize&)
+void TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged(const IntSize& size)
 {
     m_webPage->pageOverlayController().didChangeDocumentSize();
+}
 
+void TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded()
+{
     if (!m_webPage->minimumLayoutSize().width())
         return;
 
-    if (m_inUpdateGeometry)
+    FrameView* frameView = m_webPage->mainFrameView();
+    if (!frameView)
         return;
 
-    if (!m_updateIntrinsicContentSizeTimer.isActive())
-        m_updateIntrinsicContentSizeTimer.startOneShot(0);
-}
-
-void TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeTimerFired(Timer<TiledCoreAnimationDrawingArea>*)
-{
-    FrameView* frameView = m_webPage->corePage()->mainFrame().view();
-    if (!frameView)
+    if (frameView->needsLayout())
         return;
 
     IntSize contentSize = frameView->autoSizingIntrinsicContentSize();
-
     if (m_lastSentIntrinsicContentSize == contentSize)
         return;
 
@@ -273,6 +268,8 @@
 
     m_webPage->layoutIfNeeded();
 
+    updateIntrinsicContentSizeIfNeeded();
+
     if (m_pendingRootLayer) {
         setRootCompositingLayer(m_pendingRootLayer.get());
         m_pendingRootLayer = nullptr;
@@ -384,9 +381,6 @@
 
     m_webPage->send(Messages::DrawingAreaProxy::DidUpdateGeometry());
 
-    if (m_webPage->minimumLayoutSize().width() && !m_updateIntrinsicContentSizeTimer.isActive())
-        m_updateIntrinsicContentSizeTimer.startOneShot(0);
-
     m_inUpdateGeometry = false;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to