Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1239)

Unified Diff: Source/core/input/EventHandler.cpp

Issue 1157303006: Prevent synthetic mouse moves from firing during trackpad scroll. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/input/EventHandler.cpp
diff --git a/Source/core/input/EventHandler.cpp b/Source/core/input/EventHandler.cpp
index ef85ea06c88dc30d293de1ace6dffd172b79b176..7daa48a64fc75783586858eab1e9ac8e210aa611 100644
--- a/Source/core/input/EventHandler.cpp
+++ b/Source/core/input/EventHandler.cpp
@@ -107,11 +107,9 @@ static const int ImageDragHysteresis = 5;
static const int TextDragHysteresis = 3;
static const int GeneralDragHysteresis = 3;
-// 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.
-static const double fakeMouseMoveShortInterval = 0.1;
-static const double fakeMouseMoveLongInterval = 0.250;
+// The amount of time to wait before sending a fake mouse event triggered
+// during a scroll.
+static const double fakeMouseMoveInterval = 0.1;
// The amount of time to wait for a cursor update on style and layout changes
// Set to 50Hz, no need to be faster than common screen refresh rate
@@ -151,24 +149,6 @@ private:
Cursor m_cursor;
};
-class MaximumDurationTracker {
-public:
- explicit MaximumDurationTracker(double *maxDuration)
- : m_maxDuration(maxDuration)
- , m_start(monotonicallyIncreasingTime())
- {
- }
-
- ~MaximumDurationTracker()
- {
- *m_maxDuration = max(*m_maxDuration, monotonicallyIncreasingTime() - m_start);
- }
-
-private:
- double* m_maxDuration;
- double m_start;
-};
-
static inline ScrollGranularity wheelGranularityToScrollGranularity(WheelEvent* event)
{
unsigned deltaMode = event->deltaMode();
@@ -236,7 +216,6 @@ EventHandler::EventHandler(LocalFrame* frame)
, m_touchPressed(false)
, m_scrollGestureHandlingNode(nullptr)
, m_lastGestureScrollOverWidget(false)
- , m_maxMouseMovedDuration(0)
, m_longTapShouldInvokeContextMenu(false)
, m_activeIntervalTimer(this, &EventHandler::activeIntervalTimerFired)
, m_lastShowPressTimestamp(0)
@@ -313,7 +292,6 @@ void EventHandler::clear()
m_lastGestureScrollOverWidget = false;
m_previousGestureScrolledNode = nullptr;
m_scrollbarHandlingScrollGesture = nullptr;
- m_maxMouseMovedDuration = 0;
m_touchPressed = false;
m_pointerIdManager.clear();
m_mouseDownMayStartDrag = false;
@@ -1041,7 +1019,6 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& event)
TRACE_EVENT0("blink", "EventHandler::handleMouseMoveEvent");
RefPtrWillBeRawPtr<FrameView> protector(m_frame->view());
- MaximumDurationTracker maxDurationTracker(&m_maxMouseMovedDuration);
HitTestResult hoveredNode = HitTestResult();
bool result = handleMouseMoveOrLeaveEvent(event, &hoveredNode);
@@ -2782,18 +2759,11 @@ void EventHandler::dispatchFakeMouseMoveEventSoon()
if (settings && !settings->deviceSupportsMouse())
return;
- // 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, FROM_HERE);
- } else {
- if (!m_fakeMouseMoveEventTimer.isActive())
- m_fakeMouseMoveEventTimer.startOneShot(fakeMouseMoveShortInterval, FROM_HERE);
- }
+ // Reschedule the timer, to prevent dispatching mouse move events
+ // during a scroll. This avoids a potential source of scroll jank.
+ if (m_fakeMouseMoveEventTimer.isActive())
+ m_fakeMouseMoveEventTimer.stop();
+ m_fakeMouseMoveEventTimer.startOneShot(fakeMouseMoveInterval, FROM_HERE);
}
void EventHandler::dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad& quad)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698