Lots of unnecessary DidLayout notifications when scrolling zoomed page with iframes
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 01:22:33 +0000 (01:22 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 01:22:33 +0000 (01:22 +0000)
https://bugs.webkit.org/show_bug.cgi?id=110824

Reviewed by Tim Horton.

RenderWidget::setWidgetGeometry() compares the old and new frame rects to decide
if the geometry changed. However, it use implicit IntRect->LayoutRect promotion in
the comparison, and then roundedIntRect() in setting. Thus the code would think
that the geometry changed, even when the final assigned frame did not.

Fix by computing the new frame using roundedIntRect(), and using that to determine
whether the geometry changed.

No way to test DidLayout notifications in DRT/WTR.

* rendering/RenderWidget.cpp:
(WebCore::RenderWidget::setWidgetGeometry):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@143990 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderWidget.cpp

index 143b40550cc1750902cbcdb6b062efa2369fdc87..fb7d0b70f88af25a336c8033d5a47fa5b64b2ccc 100644 (file)
@@ -1,3 +1,23 @@
+2013-02-25  Simon Fraser  <simon.fraser@apple.com>
+
+        Lots of unnecessary DidLayout notifications when scrolling zoomed page with iframes
+        https://bugs.webkit.org/show_bug.cgi?id=110824
+
+        Reviewed by Tim Horton.
+        
+        RenderWidget::setWidgetGeometry() compares the old and new frame rects to decide
+        if the geometry changed. However, it use implicit IntRect->LayoutRect promotion in
+        the comparison, and then roundedIntRect() in setting. Thus the code would think
+        that the geometry changed, even when the final assigned frame did not.
+        
+        Fix by computing the new frame using roundedIntRect(), and using that to determine
+        whether the geometry changed.
+
+        No way to test DidLayout notifications in DRT/WTR.
+
+        * rendering/RenderWidget.cpp:
+        (WebCore::RenderWidget::setWidgetGeometry):
+
 2013-02-21  Jeffrey Pfau  <jpfau@apple.com>
 
         Optionally partition cache to prevent using cache for tracking
index e08017e0858aacaa72ec97d78d5f078665286c90..fb396f044fcc72604b89156b9bcb1b8aa33c788c 100644 (file)
@@ -143,8 +143,9 @@ bool RenderWidget::setWidgetGeometry(const LayoutRect& frame)
         return false;
 
     IntRect clipRect = roundedIntRect(enclosingLayer()->childrenClipRect());
+    IntRect newFrame = roundedIntRect(frame);
     bool clipChanged = m_clipRect != clipRect;
-    bool boundsChanged = m_widget->frameRect() != frame;
+    bool boundsChanged = m_widget->frameRect() != newFrame;
 
     if (!boundsChanged && !clipChanged)
         return false;
@@ -153,7 +154,7 @@ bool RenderWidget::setWidgetGeometry(const LayoutRect& frame)
 
     RenderWidgetProtector protector(this);
     RefPtr<Node> protectedNode(node());
-    m_widget->setFrameRect(roundedIntRect(frame));
+    m_widget->setFrameRect(newFrame);
     
 #if USE(ACCELERATED_COMPOSITING)
     if (hasLayer() && layer()->isComposited())