Title: [131034] trunk/Source/WebKit2
Revision
131034
Author
abe...@webkit.org
Date
2012-10-11 02:43:22 -0700 (Thu, 11 Oct 2012)

Log Message

[Qt][WK2] Avoid unnecessary calls in PageViewportController
https://bugs.webkit.org/show_bug.cgi?id=98886

Reviewed by Jocelyn Turcotte.

Remove leftover and unneeded update guards and visibility update
notifications to avoid unnecessary update cycles between the
controller an the client.
Previously didRenderFrame triggered updates for no reason since
animations on the page cause a lot of DidRenderFrame messages
for which the viewport state does not change.

* UIProcess/PageViewportController.cpp:
(WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
(WebKit::PageViewportController::didRenderFrame):
* UIProcess/PageViewportController.h:
(PageViewportController):
* UIProcess/qt/PageViewportControllerClientQt.cpp:
(WebKit::PageViewportControllerClientQt::setContentsScale):
(WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):
(WebKit::PageViewportControllerClientQt::updateViewportController):
* UIProcess/qt/PageViewportControllerClientQt.h:
(PageViewportControllerClientQt):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (131033 => 131034)


--- trunk/Source/WebKit2/ChangeLog	2012-10-11 09:32:49 UTC (rev 131033)
+++ trunk/Source/WebKit2/ChangeLog	2012-10-11 09:43:22 UTC (rev 131034)
@@ -1,3 +1,29 @@
+2012-10-10  Andras Becsi  <andras.be...@digia.com>
+
+        [Qt][WK2] Avoid unnecessary calls in PageViewportController
+        https://bugs.webkit.org/show_bug.cgi?id=98886
+
+        Reviewed by Jocelyn Turcotte.
+
+        Remove leftover and unneeded update guards and visibility update
+        notifications to avoid unnecessary update cycles between the
+        controller an the client.
+        Previously didRenderFrame triggered updates for no reason since
+        animations on the page cause a lot of DidRenderFrame messages
+        for which the viewport state does not change.
+
+        * UIProcess/PageViewportController.cpp:
+        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
+        (WebKit::PageViewportController::didRenderFrame):
+        * UIProcess/PageViewportController.h:
+        (PageViewportController):
+        * UIProcess/qt/PageViewportControllerClientQt.cpp:
+        (WebKit::PageViewportControllerClientQt::setContentsScale):
+        (WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):
+        (WebKit::PageViewportControllerClientQt::updateViewportController):
+        * UIProcess/qt/PageViewportControllerClientQt.h:
+        (PageViewportControllerClientQt):
+
 2012-10-11  Mario Sanchez Prada  <msanc...@igalia.com>
 
         [GTK] It should be possible to disable favicons in WebKit2 GTK+ API

Modified: trunk/Source/WebKit2/UIProcess/PageViewportController.cpp (131033 => 131034)


--- trunk/Source/WebKit2/UIProcess/PageViewportController.cpp	2012-10-11 09:32:49 UTC (rev 131033)
+++ trunk/Source/WebKit2/UIProcess/PageViewportController.cpp	2012-10-11 09:43:22 UTC (rev 131034)
@@ -54,9 +54,6 @@
         return;
 
     m_controller->resumeContent();
-
-    // Make sure that tiles all around the viewport will be requested.
-    m_controller->syncVisibleContents();
 }
 
 PageViewportController::PageViewportController(WebKit::WebPageProxy* proxy, PageViewportControllerClient* client)
@@ -126,8 +123,13 @@
 
 void PageViewportController::didRenderFrame(const IntSize& contentsSize, const IntRect& coveredRect)
 {
-    // Only update the viewport's contents dimensions along with its render.
-    m_client->didChangeContentsSize(contentsSize);
+    if (m_clientContentsSize != contentsSize) {
+        m_clientContentsSize = contentsSize;
+        // Only update the viewport's contents dimensions along with its render if the
+        // size actually changed since animations on the page trigger DidRenderFrame
+        // messages without causing dimension changes.
+        m_client->didChangeContentsSize(contentsSize);
+    }
 
     m_lastFrameCoveredRect = coveredRect;
 
@@ -137,7 +139,6 @@
     // All position and scale changes resulting from a web process event should
     // go through here to be applied on the viewport to avoid showing incomplete
     // tiles to the user during a few milliseconds.
-    ViewportUpdateDeferrer guard(this);
     if (m_effectiveScaleIsLocked) {
         m_client->setContentsScale(m_effectiveScale, false);
         m_effectiveScaleIsLocked = false;

Modified: trunk/Source/WebKit2/UIProcess/PageViewportController.h (131033 => 131034)


--- trunk/Source/WebKit2/UIProcess/PageViewportController.h	2012-10-11 09:32:49 UTC (rev 131033)
+++ trunk/Source/WebKit2/UIProcess/PageViewportController.h	2012-10-11 09:43:22 UTC (rev 131034)
@@ -126,6 +126,7 @@
     WebCore::FloatPoint m_viewportPos;
     WebCore::FloatSize m_viewportSize;
     WebCore::FloatSize m_contentsSize;
+    WebCore::IntSize m_clientContentsSize;
     float m_effectiveScale; // Should always be cssScale * devicePixelRatio.
 
     bool m_viewportPosIsLocked;

Modified: trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp (131033 => 131034)


--- trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp	2012-10-11 09:32:49 UTC (rev 131033)
+++ trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp	2012-10-11 09:43:22 UTC (rev 131034)
@@ -322,8 +322,6 @@
         setContentRectVisiblePositionAtScale(QPointF(), localScale);
     } else
         scaleContent(localScale);
-
-    updateViewportController();
 }
 
 void PageViewportControllerClientQt::setContentsRectToNearestValidBounds()
@@ -335,6 +333,7 @@
 
 void PageViewportControllerClientQt::didResumeContent()
 {
+    // Make sure that tiles all around the viewport will be requested.
     updateViewportController();
 }
 
@@ -494,18 +493,14 @@
 
 void PageViewportControllerClientQt::didChangeViewportAttributes()
 {
-    // Make sure we apply the new initial scale when deferring ends.
-    ViewportUpdateDeferrer guard(m_controller);
-
     emit m_viewportItem->experimental()->test()->devicePixelRatioChanged();
     emit m_viewportItem->experimental()->test()->viewportChanged();
 }
 
-void PageViewportControllerClientQt::updateViewportController(const QPointF& trajectory, qreal scale)
+void PageViewportControllerClientQt::updateViewportController(const QPointF& trajectory)
 {
     FloatPoint viewportPos = m_viewportItem->mapToWebContent(QPointF());
-    float viewportScale = (scale < 0) ? m_pageItem->contentsScale() : scale;
-    m_controller->didChangeContentsVisibility(viewportPos, viewportScale, trajectory);
+    m_controller->didChangeContentsVisibility(viewportPos, m_pageItem->contentsScale(), trajectory);
 }
 
 void PageViewportControllerClientQt::scaleContent(qreal itemScale, const QPointF& centerInCSSCoordinates)

Modified: trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h (131033 => 131034)


--- trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h	2012-10-11 09:32:49 UTC (rev 131033)
+++ trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h	2012-10-11 09:43:22 UTC (rev 131034)
@@ -124,7 +124,7 @@
     QRectF nearestValidVisibleContentsRect() const;
 
     void setContentsRectToNearestValidBounds();
-    void updateViewportController(const QPointF& trajectory = QPointF(), qreal scale = -1);
+    void updateViewportController(const QPointF& trajectory = QPointF());
     void setContentRectVisiblePositionAtScale(const QPointF& location, qreal itemScale);
     void animateContentRectVisible(const QRectF& contentRect);
     void scaleContent(qreal itemScale, const QPointF& centerInCSSCoordinates = QPointF());
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to