Title: [137214] trunk
Revision
137214
Author
o...@chromium.org
Date
2012-12-10 15:34:32 -0800 (Mon, 10 Dec 2012)

Log Message

Unreviewed, rolling out r134150.
http://trac.webkit.org/changeset/134150
https://bugs.webkit.org/show_bug.cgi?id=99940

Caused JS-based tooltips to remain during scroll on Facebook
and Gmail. Rollout until I have time to experiment with less
aggresive approaches.

Source/WebCore:

* page/EventHandler.cpp:
(WebCore):
(WebCore::MaximumDurationTracker::MaximumDurationTracker):
(WebCore::MaximumDurationTracker::~MaximumDurationTracker):
(MaximumDurationTracker):
(WebCore::EventHandler::EventHandler):
(WebCore::EventHandler::clear):
(WebCore::EventHandler::mouseMoved):
(WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
(WebCore::EventHandler::fakeMouseMoveEventTimerFired):
* page/EventHandler.h:
(EventHandler):
* platform/Timer.h:

LayoutTests:

* fast/scrolling/fake-mouse-event-throttling-expected.txt: Removed.
* fast/scrolling/fake-mouse-event-throttling.html: Removed.
* platform/mac/TestExpectations:

Modified Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (137213 => 137214)


--- trunk/LayoutTests/ChangeLog	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/LayoutTests/ChangeLog	2012-12-10 23:34:32 UTC (rev 137214)
@@ -1,3 +1,17 @@
+2012-12-10  Ojan Vafai  <o...@chromium.org>
+
+        Unreviewed, rolling out r134150.
+        http://trac.webkit.org/changeset/134150
+        https://bugs.webkit.org/show_bug.cgi?id=99940
+
+        Caused JS-based tooltips to remain during scroll on Facebook
+        and Gmail. Rollout until I have time to experiment with less
+        aggresive approaches.
+
+        * fast/scrolling/fake-mouse-event-throttling-expected.txt: Removed.
+        * fast/scrolling/fake-mouse-event-throttling.html: Removed.
+        * platform/mac/TestExpectations:
+
 2012-12-10  Yi Shen  <max.hong.s...@gmail.com>
 
         Keyboard caret movement in textarea with RTL Override Character can make tab unresponsive

Deleted: trunk/LayoutTests/fast/scrolling/fake-mouse-event-throttling-expected.txt (137213 => 137214)


--- trunk/LayoutTests/fast/scrolling/fake-mouse-event-throttling-expected.txt	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/LayoutTests/fast/scrolling/fake-mouse-event-throttling-expected.txt	2012-12-10 23:34:32 UTC (rev 137214)
@@ -1,4 +0,0 @@
-PASS numberOfMouseMoves is 0
-PASS numberOfMouseMoves is 1
-PASS numberOfMouseMoves is 2
-

Deleted: trunk/LayoutTests/fast/scrolling/fake-mouse-event-throttling.html (137213 => 137214)


--- trunk/LayoutTests/fast/scrolling/fake-mouse-event-throttling.html	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/LayoutTests/fast/scrolling/fake-mouse-event-throttling.html	2012-12-10 23:34:32 UTC (rev 137214)
@@ -1,63 +0,0 @@
-<!DOCTYPE html>
-<style>
-body {
-    overflow: scroll;
-}
-div {
-    height: 100px;
-}
-.pointer {
-    cursor: pointer;
-    background-color: salmon;
-}
-.plain {
-    background-color: orange;
-}
-</style>
-<script src=""
-<body _onload_="runNextTest()">
-
-<script>
-for (var i = 0; i < 100; i++) {
-    document.write('<div class=pointer></div><div class=plain></div>');
-}
-
-if (window.testRunner)
-    testRunner.waitUntilDone();
-if (window.eventSender)
-    eventSender.mouseMoveTo(100, 50);
-
-var numberOfMouseMoves = 0;
-document.body._onmousemove_ = function() {
-    var start = Date.now();
-    while (Date.now() - start < mouseMoveDuration) {
-    }
-    numberOfMouseMoves++;
-
-    if (delays.length)
-        runNextTest();
-    else {
-        shouldBe("numberOfMouseMoves", String(expectedNumberOfMouseMoves));
-        if (window.testRunner)
-            testRunner.notifyDone();
-    }
-
-}
-
-var delays = [5, 200];
-var expectedNumberOfMouseMoves = delays.length;
-
-function runNextTest()
-{
-    shouldBe("numberOfMouseMoves", String(expectedNumberOfMouseMoves - delays.length));
-    mouseMoveDuration = delays.shift();
-    var position = 75 * delays.length;
-    window.scrollTo(0, position);
-    window.scrollTo(0, position + 25);
-    setTimeout(function() {
-        window.scrollTo(0, position + 50);
-    }, 0);
-}
-</script>
-</body>
-

Modified: trunk/LayoutTests/platform/mac/TestExpectations (137213 => 137214)


--- trunk/LayoutTests/platform/mac/TestExpectations	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2012-12-10 23:34:32 UTC (rev 137214)
@@ -1214,9 +1214,6 @@
 # TileCache tests that don't apply to WK1 (they are re-enabled via the WK2 TestExpectations file)
 platform/mac/tiled-drawing/ [ Skip ]
 
-# DRT is not firing fake mouse events. Safari fires them fine. Looks like a bug with Apple's Mac DRT.
-webkit.org/b/101808 fast/scrolling/fake-mouse-event-throttling.html [ Skip ]
-
 webkit.org/b/100846 inspector-protocol/debugger-pause-dedicated-worker.html [ Skip ]
 webkit.org/b/100846 inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html [ Skip ]
 

Modified: trunk/Source/WebCore/ChangeLog (137213 => 137214)


--- trunk/Source/WebCore/ChangeLog	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/Source/WebCore/ChangeLog	2012-12-10 23:34:32 UTC (rev 137214)
@@ -1,3 +1,27 @@
+2012-12-10  Ojan Vafai  <o...@chromium.org>
+
+        Unreviewed, rolling out r134150.
+        http://trac.webkit.org/changeset/134150
+        https://bugs.webkit.org/show_bug.cgi?id=99940
+
+        Caused JS-based tooltips to remain during scroll on Facebook
+        and Gmail. Rollout until I have time to experiment with less
+        aggresive approaches.
+
+        * page/EventHandler.cpp:
+        (WebCore):
+        (WebCore::MaximumDurationTracker::MaximumDurationTracker):
+        (WebCore::MaximumDurationTracker::~MaximumDurationTracker):
+        (MaximumDurationTracker):
+        (WebCore::EventHandler::EventHandler):
+        (WebCore::EventHandler::clear):
+        (WebCore::EventHandler::mouseMoved):
+        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
+        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
+        * page/EventHandler.h:
+        (EventHandler):
+        * platform/Timer.h:
+
 2012-12-10  Yi Shen  <max.hong.s...@gmail.com>
 
         Keyboard caret movement in textarea with RTL Override Character can make tab unresponsive

Modified: trunk/Source/WebCore/page/EventHandler.cpp (137213 => 137214)


--- trunk/Source/WebCore/page/EventHandler.cpp	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2012-12-10 23:34:32 UTC (rev 137214)
@@ -140,17 +140,11 @@
 // When the autoscroll or the panScroll is triggered when do the scroll every 0.05s to make it smooth
 const double autoscrollInterval = 0.05;
 
-// The amount of time to wait before sending a fake mouse event, triggered during a scroll.
-const double fakeMouseMoveMinimumInterval = 0.1;
-// Amount to increase the fake mouse event throttling when the running average exceeds the delay.
-// Picked fairly arbitrarily.
-const double fakeMouseMoveIntervalIncrease = 0.05;
-const double fakeMouseMoveRunningAverageCount = 10;
-// Decrease the fakeMouseMoveInterval when the current delay is >2x the running average,
-// but only decrease to 3/4 the current delay to avoid too much thrashing.
-// Not sure this distinction really matters in practice.
-const double fakeMouseMoveIntervalReductionLimit = 0.5;
-const double fakeMouseMoveIntervalReductionFraction = 0.75;
+// The amount of time to wait before sending a fake mouse event, triggered
+// during a scroll. The short interval is used if the content responds to the mouse events quickly enough,
+// otherwise the long interval is used.
+const double fakeMouseMoveShortInterval = 0.1;
+const double fakeMouseMoveLongInterval = 0.250;
 
 const int maximumCursorSize = 128;
 #if ENABLE(MOUSE_CURSOR_SCALE)
@@ -175,28 +169,21 @@
     Cursor m_cursor;
 };
 
-class RunningAverageDurationTracker {
+class MaximumDurationTracker {
 public:
-    RunningAverageDurationTracker(double* average, unsigned numberOfRunsToTrack)
-        : m_average(average)
-        , m_numberOfRunsToTrack(numberOfRunsToTrack)
+    explicit MaximumDurationTracker(double *maxDuration)
+        : m_maxDuration(maxDuration)
         , m_start(monotonicallyIncreasingTime())
     {
     }
 
-    ~RunningAverageDurationTracker()
+    ~MaximumDurationTracker()
     {
-        double duration = monotonicallyIncreasingTime() - m_start;
-        if (!*m_average) {
-            *m_average = duration;
-            return;
-        }
-        *m_average = (*m_average * (m_numberOfRunsToTrack - 1) + (duration)) / m_numberOfRunsToTrack;
+        *m_maxDuration = max(*m_maxDuration, monotonicallyIncreasingTime() - m_start);
     }
 
 private:
-    double* m_average;
-    unsigned m_numberOfRunsToTrack;
+    double* m_maxDuration;
     double m_start;
 };
 
@@ -353,7 +340,7 @@
     , m_autoscrollInProgress(false)
     , m_mouseDownMayStartAutoscroll(false)
     , m_mouseDownWasInSubframe(false)
-    , m_fakeMouseMoveEventTimer(this, &EventHandler::fakeMouseMoveEventTimerFired, fakeMouseMoveMinimumInterval)
+    , m_fakeMouseMoveEventTimer(this, &EventHandler::fakeMouseMoveEventTimerFired)
 #if ENABLE(SVG)
     , m_svgPan(false)
 #endif
@@ -370,7 +357,7 @@
 #if ENABLE(TOUCH_EVENTS)
     , m_touchPressed(false)
 #endif
-    , m_mouseMovedDurationRunningAverage(0)
+    , m_maxMouseMovedDuration(0)
     , m_baseEventType(PlatformEvent::NoType)
     , m_didStartDrag(false)
     , m_didLongPressInvokeContextMenu(false)
@@ -425,7 +412,7 @@
     m_scrollGestureHandlingNode = 0;
     m_scrollbarHandlingScrollGesture = 0;
 #endif
-    m_mouseMovedDurationRunningAverage = 0;
+    m_maxMouseMovedDuration = 0;
     m_baseEventType = PlatformEvent::NoType;
     m_didStartDrag = false;
     m_didLongPressInvokeContextMenu = false;
@@ -1791,7 +1778,7 @@
 bool EventHandler::mouseMoved(const PlatformMouseEvent& event)
 {
     RefPtr<FrameView> protector(m_frame->view());
-    RunningAverageDurationTracker durationTracker(&m_mouseMovedDurationRunningAverage, fakeMouseMoveRunningAverageCount);
+    MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration);
 
 
 #if ENABLE(TOUCH_EVENTS)
@@ -3007,15 +2994,18 @@
     if (settings && !settings->deviceSupportsMouse())
         return;
 
-    // Adjust the mouse move throttling so that it's roughly around our running average of the duration of mousemove events.
-    // This will cause the content to receive these moves only after the user is done scrolling, reducing pauses during the scroll.
-    // This will only measure the duration of the mousemove event though (not for example layouts),
-    // so maintain at least a minimum interval.
-    if (m_mouseMovedDurationRunningAverage > m_fakeMouseMoveEventTimer.delay())
-        m_fakeMouseMoveEventTimer.setDelay(m_mouseMovedDurationRunningAverage + fakeMouseMoveIntervalIncrease);
-    else if (m_mouseMovedDurationRunningAverage < fakeMouseMoveIntervalReductionLimit * m_fakeMouseMoveEventTimer.delay())
-        m_fakeMouseMoveEventTimer.setDelay(max(fakeMouseMoveMinimumInterval, fakeMouseMoveIntervalReductionFraction * m_fakeMouseMoveEventTimer.delay()));
-    m_fakeMouseMoveEventTimer.restart();
+    // If the content has ever taken longer than fakeMouseMoveShortInterval we
+    // reschedule the timer and use a longer time. This will cause the content
+    // to receive these moves only after the user is done scrolling, reducing
+    // pauses during the scroll.
+    if (m_maxMouseMovedDuration > fakeMouseMoveShortInterval) {
+        if (m_fakeMouseMoveEventTimer.isActive())
+            m_fakeMouseMoveEventTimer.stop();
+        m_fakeMouseMoveEventTimer.startOneShot(fakeMouseMoveLongInterval);
+    } else {
+        if (!m_fakeMouseMoveEventTimer.isActive())
+            m_fakeMouseMoveEventTimer.startOneShot(fakeMouseMoveShortInterval);
+    }
 }
 
 void EventHandler::dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad& quad)
@@ -3035,7 +3025,7 @@
     m_fakeMouseMoveEventTimer.stop();
 }
 
-void EventHandler::fakeMouseMoveEventTimerFired(DeferrableOneShotTimer<EventHandler>* timer)
+void EventHandler::fakeMouseMoveEventTimerFired(Timer<EventHandler>* timer)
 {
     ASSERT_UNUSED(timer, timer == &m_fakeMouseMoveEventTimer);
     ASSERT(!m_mousePressed);

Modified: trunk/Source/WebCore/page/EventHandler.h (137213 => 137214)


--- trunk/Source/WebCore/page/EventHandler.h	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/Source/WebCore/page/EventHandler.h	2012-12-10 23:34:32 UTC (rev 137214)
@@ -287,7 +287,7 @@
     static bool isKeyboardOptionTab(KeyboardEvent*);
     static bool eventInvertsTabsToLinksClientCallResult(KeyboardEvent*);
 
-    void fakeMouseMoveEventTimerFired(DeferrableOneShotTimer<EventHandler>*);
+    void fakeMouseMoveEventTimerFired(Timer<EventHandler>*);
     void cancelFakeMouseMoveEvent();
 
     bool isInsideScrollbar(const IntPoint&) const;
@@ -412,7 +412,7 @@
     bool m_mouseDownMayStartAutoscroll;
     bool m_mouseDownWasInSubframe;
 
-    DeferrableOneShotTimer<EventHandler> m_fakeMouseMoveEventTimer;
+    Timer<EventHandler> m_fakeMouseMoveEventTimer;
 
 #if ENABLE(SVG)
     bool m_svgPan;
@@ -470,7 +470,7 @@
     RefPtr<Scrollbar> m_scrollbarHandlingScrollGesture;
 #endif
 
-    double m_mouseMovedDurationRunningAverage;
+    double m_maxMouseMovedDuration;
     PlatformEvent::Type m_baseEventType;
     bool m_didStartDrag;
     bool m_didLongPressInvokeContextMenu;

Modified: trunk/Source/WebCore/platform/Timer.h (137213 => 137214)


--- trunk/Source/WebCore/platform/Timer.h	2012-12-10 23:30:36 UTC (rev 137213)
+++ trunk/Source/WebCore/platform/Timer.h	2012-12-10 23:34:32 UTC (rev 137214)
@@ -140,17 +140,6 @@
         startOneShot(m_delay);
     }
 
-    void setDelay(double delay)
-    {
-        m_delay = delay;
-        if (isActive()) {
-            stop();
-            restart();
-        }
-    }
-
-    double delay() const { return m_delay; }
-
     using TimerBase::stop;
     using TimerBase::isActive;
 private:
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to