Title: [109930] trunk/Source/WebKit2
Revision
109930
Author
abe...@webkit.org
Date
2012-03-06 09:54:43 -0800 (Tue, 06 Mar 2012)

Log Message

[Qt] Interaction Engine suspends content during pageload.
https://bugs.webkit.org/show_bug.cgi?id=80294

Only suspend content when viewport updates are deferred
for a non-instantanious interaction.

Patch by Allan Sandfeld Jensen <allan.jen...@nokia.com> on 2012-03-06
Reviewed by Kenneth Rohde Christiansen.

* UIProcess/qt/QtViewportInteractionEngine.cpp:
(WebKit::ViewportUpdateDeferrer::ViewportUpdateDeferrer):
(WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
(WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
(WebKit::QtViewportInteractionEngine::flickableMoveStarted):
(WebKit::QtViewportInteractionEngine::scaleAnimationStateChanged):
* UIProcess/qt/QtViewportInteractionEngine.h:
(QtViewportInteractionEngine):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (109929 => 109930)


--- trunk/Source/WebKit2/ChangeLog	2012-03-06 17:51:31 UTC (rev 109929)
+++ trunk/Source/WebKit2/ChangeLog	2012-03-06 17:54:43 UTC (rev 109930)
@@ -1,3 +1,22 @@
+2012-03-06  Allan Sandfeld Jensen  <allan.jen...@nokia.com>
+
+        [Qt] Interaction Engine suspends content during pageload.
+        https://bugs.webkit.org/show_bug.cgi?id=80294
+
+        Only suspend content when viewport updates are deferred
+        for a non-instantanious interaction.
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        * UIProcess/qt/QtViewportInteractionEngine.cpp:
+        (WebKit::ViewportUpdateDeferrer::ViewportUpdateDeferrer):
+        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
+        (WebKit::QtViewportInteractionEngine::QtViewportInteractionEngine):
+        (WebKit::QtViewportInteractionEngine::flickableMoveStarted):
+        (WebKit::QtViewportInteractionEngine::scaleAnimationStateChanged):
+        * UIProcess/qt/QtViewportInteractionEngine.h:
+        (QtViewportInteractionEngine):
+
 2012-03-06  Simon Hausmann  <simon.hausm...@nokia.com>
 
         [Qt] Make QQuickWebView's url property work with a flickable webview

Modified: trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp (109929 => 109930)


--- trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp	2012-03-06 17:51:31 UTC (rev 109929)
+++ trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp	2012-03-06 17:54:43 UTC (rev 109930)
@@ -61,13 +61,18 @@
 
 class ViewportUpdateDeferrer {
 public:
-    ViewportUpdateDeferrer(QtViewportInteractionEngine* engine)
+    enum SuspendContentFlag { DeferUpdate, DeferUpdateAndSuspendContent };
+    ViewportUpdateDeferrer(QtViewportInteractionEngine* engine, SuspendContentFlag suspendContentFlag = DeferUpdate)
         : engine(engine)
     {
-        if (engine->m_suspendCount++)
-            return;
+        engine->m_suspendCount++;
 
-        emit engine->contentSuspendRequested();
+        // There is no need to suspend content for immediate updates
+        // only during animations or longer gestures.
+        if (suspendContentFlag == DeferUpdateAndSuspendContent && !engine->m_hasSuspendedContent) {
+            engine->m_hasSuspendedContent = true;
+            emit engine->contentSuspendRequested();
+        }
     }
 
     ~ViewportUpdateDeferrer()
@@ -75,7 +80,10 @@
         if (--(engine->m_suspendCount))
             return;
 
-        emit engine->contentResumeRequested();
+        if (engine->m_hasSuspendedContent) {
+            engine->m_hasSuspendedContent = false;
+            emit engine->contentResumeRequested();
+        }
 
         // Make sure that tiles all around the viewport will be requested.
         emit engine->contentWasMoved(QPointF());
@@ -117,6 +125,7 @@
     , m_content(content)
     , m_flickProvider(flickProvider)
     , m_suspendCount(0)
+    , m_hasSuspendedContent(false)
     , m_hadUserInteraction(false)
     , m_scaleAnimation(new ScaleAnimation(this))
     , m_pinchStartScale(-1)
@@ -191,7 +200,7 @@
 void QtViewportInteractionEngine::flickableMoveStarted()
 {
     Q_ASSERT(m_flickProvider->isMoving());
-    m_scrollUpdateDeferrer = adoptPtr(new ViewportUpdateDeferrer(this));
+    m_scrollUpdateDeferrer = adoptPtr(new ViewportUpdateDeferrer(this, ViewportUpdateDeferrer::DeferUpdateAndSuspendContent));
 
     m_lastScrollPosition = m_flickProvider->contentPos();
     connect(m_flickProvider, SIGNAL(contentXChanged()), SLOT(flickableMovingPositionUpdate()));
@@ -223,7 +232,7 @@
     switch (newState) {
     case QAbstractAnimation::Running:
         if (!m_scaleUpdateDeferrer)
-            m_scaleUpdateDeferrer = adoptPtr(new ViewportUpdateDeferrer(this));
+            m_scaleUpdateDeferrer = adoptPtr(new ViewportUpdateDeferrer(this, ViewportUpdateDeferrer::DeferUpdateAndSuspendContent));
         break;
     case QAbstractAnimation::Stopped:
         m_scaleUpdateDeferrer.clear();

Modified: trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h (109929 => 109930)


--- trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h	2012-03-06 17:51:31 UTC (rev 109929)
+++ trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h	2012-03-06 17:54:43 UTC (rev 109930)
@@ -145,6 +145,7 @@
     Constraints m_constraints;
 
     int m_suspendCount;
+    bool m_hasSuspendedContent;
     OwnPtr<ViewportUpdateDeferrer> m_scaleUpdateDeferrer;
     OwnPtr<ViewportUpdateDeferrer> m_scrollUpdateDeferrer;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to