Title: [132898] trunk/Source/WebKit2
Revision
132898
Author
abe...@webkit.org
Date
2012-10-30 05:32:15 -0700 (Tue, 30 Oct 2012)

Log Message

[Qt][WK2] Remove ViewportUpdateDeferrer from PageViewportController
https://bugs.webkit.org/show_bug.cgi?id=100665

Reviewed by Jocelyn Turcotte.

Since the original use case of delayed viewport updates and the issue
of infinite loop conditions between the programmatic adjustmet of the
viewport and the Qt notification signals are not present any more the
ViewportUpdateDeferrer became an unnecessary legacy and can be removed.

* UIProcess/PageViewportController.cpp:
(WebKit::PageViewportController::PageViewportController):
(WebKit::PageViewportController::pageDidRequestScroll):
* UIProcess/PageViewportController.h:
(WebKit):
(PageViewportController):
* UIProcess/qt/PageViewportControllerClientQt.cpp:
(WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):
(WebKit::PageViewportControllerClientQt::animateContentRectVisible):
(WebKit::PageViewportControllerClientQt::flickMoveStarted):
(WebKit::PageViewportControllerClientQt::flickMoveEnded):
(WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):
(WebKit::PageViewportControllerClientQt::touchBegin):
(WebKit::PageViewportControllerClientQt::touchEnd):
(WebKit::PageViewportControllerClientQt::setContentsRectToNearestValidBounds):
(WebKit::PageViewportControllerClientQt::pinchGestureStarted):
(WebKit::PageViewportControllerClientQt::pinchGestureEnded):
(WebKit::PageViewportControllerClientQt::pinchGestureCancelled):
* UIProcess/qt/PageViewportControllerClientQt.h:
(PageViewportControllerClientQt):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (132897 => 132898)


--- trunk/Source/WebKit2/ChangeLog	2012-10-30 12:23:15 UTC (rev 132897)
+++ trunk/Source/WebKit2/ChangeLog	2012-10-30 12:32:15 UTC (rev 132898)
@@ -1,3 +1,36 @@
+2012-10-30  Andras Becsi  <andras.be...@digia.com>
+
+        [Qt][WK2] Remove ViewportUpdateDeferrer from PageViewportController
+        https://bugs.webkit.org/show_bug.cgi?id=100665
+
+        Reviewed by Jocelyn Turcotte.
+
+        Since the original use case of delayed viewport updates and the issue
+        of infinite loop conditions between the programmatic adjustmet of the
+        viewport and the Qt notification signals are not present any more the
+        ViewportUpdateDeferrer became an unnecessary legacy and can be removed.
+
+        * UIProcess/PageViewportController.cpp:
+        (WebKit::PageViewportController::PageViewportController):
+        (WebKit::PageViewportController::pageDidRequestScroll):
+        * UIProcess/PageViewportController.h:
+        (WebKit):
+        (PageViewportController):
+        * UIProcess/qt/PageViewportControllerClientQt.cpp:
+        (WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):
+        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
+        (WebKit::PageViewportControllerClientQt::flickMoveStarted):
+        (WebKit::PageViewportControllerClientQt::flickMoveEnded):
+        (WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):
+        (WebKit::PageViewportControllerClientQt::touchBegin):
+        (WebKit::PageViewportControllerClientQt::touchEnd):
+        (WebKit::PageViewportControllerClientQt::setContentsRectToNearestValidBounds):
+        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):
+        (WebKit::PageViewportControllerClientQt::pinchGestureEnded):
+        (WebKit::PageViewportControllerClientQt::pinchGestureCancelled):
+        * UIProcess/qt/PageViewportControllerClientQt.h:
+        (PageViewportControllerClientQt):
+
 2012-10-30  Mikhail Pozdnyakov  <mikhail.pozdnya...@intel.com>
 
         [EFL][WK2] Simplify signal emitting API in EwkViewImpl

Modified: trunk/Source/WebKit2/UIProcess/PageViewportController.cpp (132897 => 132898)


--- trunk/Source/WebKit2/UIProcess/PageViewportController.cpp	2012-10-30 12:23:15 UTC (rev 132897)
+++ trunk/Source/WebKit2/UIProcess/PageViewportController.cpp	2012-10-30 12:32:15 UTC (rev 132898)
@@ -39,31 +39,11 @@
     return std::abs(a - b) < epsilon;
 }
 
-ViewportUpdateDeferrer::ViewportUpdateDeferrer(PageViewportController* PageViewportController, SuspendContentFlag suspendContentFlag)
-    : m_controller(PageViewportController)
-{
-    m_controller->m_activeDeferrerCount++;
-
-    // There is no need to suspend content for immediate updates
-    // only during animations or longer gestures.
-    if (suspendContentFlag == DeferUpdateAndSuspendContent)
-        m_controller->suspendContent();
-}
-
-ViewportUpdateDeferrer::~ViewportUpdateDeferrer()
-{
-    if (--(m_controller->m_activeDeferrerCount))
-        return;
-
-    m_controller->resumeContent();
-}
-
 PageViewportController::PageViewportController(WebKit::WebPageProxy* proxy, PageViewportControllerClient* client)
     : m_webPageProxy(proxy)
     , m_client(client)
     , m_allowsUserScaling(false)
     , m_minimumScaleToFit(1)
-    , m_activeDeferrerCount(0)
     , m_hasSuspendedContent(false)
     , m_hadUserInteraction(false)
     , m_effectiveScale(1)
@@ -172,7 +152,7 @@
 void PageViewportController::pageDidRequestScroll(const IntPoint& cssPosition)
 {
     // Ignore the request if suspended. Can only happen due to delay in event delivery.
-    if (m_activeDeferrerCount)
+    if (m_hasSuspendedContent)
         return;
 
     FloatRect endVisibleContentRect(clampViewportToContents(cssPosition, m_effectiveScale), viewportSizeInContentsCoordinates());

Modified: trunk/Source/WebKit2/UIProcess/PageViewportController.h (132897 => 132898)


--- trunk/Source/WebKit2/UIProcess/PageViewportController.h	2012-10-30 12:23:15 UTC (rev 132897)
+++ trunk/Source/WebKit2/UIProcess/PageViewportController.h	2012-10-30 12:32:15 UTC (rev 132898)
@@ -40,32 +40,6 @@
 class PageViewportController;
 class PageViewportControllerClient;
 
-// When interacting with the content, either by animating or by the hand of the user,
-// it is important to ensure smooth animations of at least 60fps in order to give a
-// good user experience.
-//
-// In order to do this we need to get rid of unknown factors. These include device
-// sensors (geolocation, orientation updates etc), CSS3 animations, _javascript_
-// exectution, sub resource loads etc.
-// We do this by sending suspend and resume notifications to the web process.
-//
-// For this purpose the ViewportUpdateDeferrer guard can be used when interacting
-// with or animating the content to scope suspend / resume and defer update
-// notifications.
-//
-// If something should only be executed when the content is suspended, it is possible
-// to check for that using ASSERT(hasSuspendedContent()).
-
-class ViewportUpdateDeferrer {
-public:
-    enum SuspendContentFlag { DeferUpdate, DeferUpdateAndSuspendContent };
-    ViewportUpdateDeferrer(PageViewportController*, SuspendContentFlag = DeferUpdate);
-    ~ViewportUpdateDeferrer();
-
-private:
-    PageViewportController* const m_controller;
-};
-
 class PageViewportController {
     WTF_MAKE_NONCOPYABLE(PageViewportController);
 
@@ -121,7 +95,6 @@
     bool m_allowsUserScaling;
     float m_minimumScaleToFit;
 
-    int m_activeDeferrerCount;
     bool m_hasSuspendedContent;
     bool m_hadUserInteraction;
 
@@ -134,8 +107,6 @@
     bool m_viewportPosIsLocked;
     bool m_effectiveScaleIsLocked;
     WebCore::FloatRect m_lastFrameCoveredRect;
-
-    friend class ViewportUpdateDeferrer;
 };
 
 bool fuzzyCompare(float, float, float epsilon);

Modified: trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp (132897 => 132898)


--- trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp	2012-10-30 12:23:15 UTC (rev 132897)
+++ trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp	2012-10-30 12:32:15 UTC (rev 132898)
@@ -45,6 +45,7 @@
     , m_pinchStartScale(-1)
     , m_lastCommittedScale(-1)
     , m_zoomOutScale(0)
+    , m_isUserInteracting(false)
     , m_ignoreViewportChanges(true)
 {
     m_scaleAnimation->setDuration(kScaleAnimationDurationMillis);
@@ -102,7 +103,7 @@
 
     QRectF viewportRectInContentCoords = m_viewportItem->mapRectToWebContent(m_viewportItem->boundingRect());
     if (contentRect == viewportRectInContentCoords) {
-        updateViewportController();
+        m_controller->resumeContent();
         return;
     }
 
@@ -120,8 +121,7 @@
 
 void PageViewportControllerClientQt::flickMoveStarted()
 {
-    Q_ASSERT(m_viewportItem->isMoving());
-    m_scrollUpdateDeferrer.reset(new ViewportUpdateDeferrer(m_controller, ViewportUpdateDeferrer::DeferUpdateAndSuspendContent));
+    m_controller->suspendContent();
 
     m_lastScrollPosition = m_viewportItem->contentPos();
 
@@ -130,12 +130,11 @@
 
 void PageViewportControllerClientQt::flickMoveEnded()
 {
-    Q_ASSERT(!m_viewportItem->isMoving());
     // This method is called on the end of the pan or pan kinetic animation.
 
     m_ignoreViewportChanges = true;
-
-    m_scrollUpdateDeferrer.reset();
+    if (!m_isUserInteracting)
+        m_controller->resumeContent();
 }
 
 void PageViewportControllerClientQt::pageItemPositionChanged()
@@ -155,11 +154,10 @@
     switch (newState) {
     case QAbstractAnimation::Running:
         m_viewportItem->cancelFlick();
-        ASSERT(!m_animationUpdateDeferrer);
-        m_animationUpdateDeferrer.reset(new ViewportUpdateDeferrer(m_controller, ViewportUpdateDeferrer::DeferUpdateAndSuspendContent));
+        m_controller->suspendContent();
         break;
     case QAbstractAnimation::Stopped:
-        m_animationUpdateDeferrer.reset();
+        m_controller->resumeContent();
         break;
     default:
         break;
@@ -170,14 +168,13 @@
 {
     m_controller->setHadUserInteraction(true);
 
-    // Prevents resuming the page between the user's flicks of the page while the animation is running.
-    if (scrollAnimationActive())
-        m_touchUpdateDeferrer.reset(new ViewportUpdateDeferrer(m_controller, ViewportUpdateDeferrer::DeferUpdateAndSuspendContent));
+    // Prevents resuming the page between the user's flicks of the page.
+    m_isUserInteracting = true;
 }
 
 void PageViewportControllerClientQt::touchEnd()
 {
-    m_touchUpdateDeferrer.reset();
+    m_isUserInteracting = false;
 }
 
 void PageViewportControllerClientQt::focusEditableArea(const QRectF& caretArea, const QRectF& targetArea)
@@ -326,9 +323,9 @@
 
 void PageViewportControllerClientQt::setContentsRectToNearestValidBounds()
 {
-    ViewportUpdateDeferrer guard(m_controller);
     float targetScale = m_controller->innerBoundedViewportScale(m_pageItem->contentsScale());
     setContentRectVisiblePositionAtScale(nearestValidVisibleContentsRect().topLeft(), targetScale);
+    updateViewportController();
 }
 
 void PageViewportControllerClientQt::didResumeContent()
@@ -421,7 +418,7 @@
     m_scaleStack.clear();
     m_zoomOutScale = 0.0;
 
-    m_scaleUpdateDeferrer.reset(new ViewportUpdateDeferrer(m_controller, ViewportUpdateDeferrer::DeferUpdateAndSuspendContent));
+    m_controller->suspendContent();
 
     m_lastPinchCenterInViewportCoordinates = pinchCenterInViewportCoordinates;
     m_pinchStartScale = m_pageItem->contentsScale();
@@ -457,14 +454,14 @@
 
     m_pinchStartScale = -1;
 
+    // This will take care of resuming the content, even if no animation was performed.
     animateContentRectVisible(nearestValidVisibleContentsRect());
-    m_scaleUpdateDeferrer.reset(); // Clear after starting potential animation, which takes over deferring.
 }
 
 void PageViewportControllerClientQt::pinchGestureCancelled()
 {
     m_pinchStartScale = -1;
-    m_scaleUpdateDeferrer.reset();
+    m_controller->resumeContent();
 }
 
 void PageViewportControllerClientQt::didChangeContentsSize(const IntSize& newSize)

Modified: trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h (132897 => 132898)


--- trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h	2012-10-30 12:23:15 UTC (rev 132897)
+++ trunk/Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h	2012-10-30 12:32:15 UTC (rev 132898)
@@ -129,11 +129,6 @@
     void animateContentRectVisible(const QRectF& contentRect);
     void scaleContent(qreal itemScale, const QPointF& centerInCSSCoordinates = QPointF());
 
-    QScopedPointer<ViewportUpdateDeferrer> m_scaleUpdateDeferrer;
-    QScopedPointer<ViewportUpdateDeferrer> m_scrollUpdateDeferrer;
-    QScopedPointer<ViewportUpdateDeferrer> m_touchUpdateDeferrer;
-    QScopedPointer<ViewportUpdateDeferrer> m_animationUpdateDeferrer;
-
     ScaleAnimation* m_scaleAnimation;
     QPointF m_lastPinchCenterInViewportCoordinates;
     QPointF m_lastScrollPosition;
@@ -141,6 +136,7 @@
     qreal m_lastCommittedScale;
     qreal m_zoomOutScale;
     QList<ScaleStackItem> m_scaleStack;
+    bool m_isUserInteracting;
     bool m_ignoreViewportChanges;
 };
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to