Title: [118611] trunk/Source/WebCore
Revision
118611
Author
[email protected]
Date
2012-05-26 10:14:05 -0700 (Sat, 26 May 2012)

Log Message

<rdar://problem/11439771> WebProcess sends many synchronous messages to the UI process while scrolling beneath ScrollView::contentsToScreen()
https://bugs.webkit.org/show_bug.cgi?id=87571

Reviewed by Anders Carlsson.

fakeMouseEventTimerFired() uses the last known mouse position for the fake mouse event, but
calls contentsToScreen() to compute a corresponding position in screen coordinates. Avoid
this by also recording the last known mouse position in screen coordinates, and using that
value.

* page/EventHandler.cpp:
(WebCore::EventHandler::clear): Added resetting m_currentMouseGlobalPosition.
(WebCore::EventHandler::handleMousePressEvent): Added updating m_currentMouseGlobalPosition
when updating m_currentMousePosition.
(WebCore::EventHandler::handleMouseDoubleClickEvent): Ditto.
(WebCore::EventHandler::handleMouseMoveEvent): Ditto.
(WebCore::EventHandler::handleMouseReleaseEvent): Ditto.
(WebCore::EventHandler::fakeMouseMoveEventTimerFired): Changed to use m_currentMouseGlobalPosition
in the fake event instead of calling contentsToScreen().
* page/EventHandler.h: Added m_currentMouseGlobalPosition data member.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (118610 => 118611)


--- trunk/Source/WebCore/ChangeLog	2012-05-26 15:34:56 UTC (rev 118610)
+++ trunk/Source/WebCore/ChangeLog	2012-05-26 17:14:05 UTC (rev 118611)
@@ -1,3 +1,26 @@
+2012-05-25  Dan Bernstein  <[email protected]>
+
+        <rdar://problem/11439771> WebProcess sends many synchronous messages to the UI process while scrolling beneath ScrollView::contentsToScreen()
+        https://bugs.webkit.org/show_bug.cgi?id=87571
+
+        Reviewed by Anders Carlsson.
+
+        fakeMouseEventTimerFired() uses the last known mouse position for the fake mouse event, but
+        calls contentsToScreen() to compute a corresponding position in screen coordinates. Avoid
+        this by also recording the last known mouse position in screen coordinates, and using that
+        value.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::clear): Added resetting m_currentMouseGlobalPosition.
+        (WebCore::EventHandler::handleMousePressEvent): Added updating m_currentMouseGlobalPosition
+        when updating m_currentMousePosition.
+        (WebCore::EventHandler::handleMouseDoubleClickEvent): Ditto.
+        (WebCore::EventHandler::handleMouseMoveEvent): Ditto.
+        (WebCore::EventHandler::handleMouseReleaseEvent): Ditto.
+        (WebCore::EventHandler::fakeMouseMoveEventTimerFired): Changed to use m_currentMouseGlobalPosition
+        in the fake event instead of calling contentsToScreen().
+        * page/EventHandler.h: Added m_currentMouseGlobalPosition data member.
+
 2012-05-25  Philippe Normand  <[email protected]>
 
         [GStreamer] Remove ImageGStreamerCG implementation

Modified: trunk/Source/WebCore/page/EventHandler.cpp (118610 => 118611)


--- trunk/Source/WebCore/page/EventHandler.cpp	2012-05-26 15:34:56 UTC (rev 118610)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2012-05-26 17:14:05 UTC (rev 118611)
@@ -357,6 +357,7 @@
     m_shouldOnlyFireDragOverEvent = false;
 #endif
     m_currentMousePosition = IntPoint();
+    m_currentMouseGlobalPosition = IntPoint();
     m_mousePressNode = 0;
     m_mousePressed = false;
     m_capturesDragging = false;
@@ -1498,6 +1499,7 @@
     m_mousePressed = true;
     m_capturesDragging = true;
     m_currentMousePosition = mouseEvent.position();
+    m_currentMouseGlobalPosition = mouseEvent.globalPosition();
     m_mouseDownTimestamp = mouseEvent.timestamp();
 #if ENABLE(DRAG_SUPPORT)
     m_mouseDownMayStartDrag = false;
@@ -1631,6 +1633,7 @@
     // We get this instead of a second mouse-up 
     m_mousePressed = false;
     m_currentMousePosition = mouseEvent.position();
+    m_currentMouseGlobalPosition = mouseEvent.globalPosition();
 
     HitTestRequest request(HitTestRequest::Active);
     MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseEvent);
@@ -1725,6 +1728,7 @@
 
     RefPtr<FrameView> protector(m_frame->view());
     m_currentMousePosition = mouseEvent.position();
+    m_currentMouseGlobalPosition = mouseEvent.globalPosition();
 
     if (m_hoverTimer.isActive())
         m_hoverTimer.stop();
@@ -1848,6 +1852,7 @@
 
     m_mousePressed = false;
     m_currentMousePosition = mouseEvent.position();
+    m_currentMouseGlobalPosition = mouseEvent.globalPosition();
 
 #if ENABLE(SVG)
     if (m_svgPan) {
@@ -2668,8 +2673,7 @@
     bool altKey;
     bool metaKey;
     PlatformKeyboardEvent::getCurrentModifierState(shiftKey, ctrlKey, altKey, metaKey);
-    IntPoint globalPoint = view->contentsToScreen(IntRect(view->windowToContents(m_currentMousePosition), IntSize())).location();
-    PlatformMouseEvent fakeMouseMoveEvent(m_currentMousePosition, globalPoint, NoButton, PlatformEvent::MouseMoved, 0, shiftKey, ctrlKey, altKey, metaKey, currentTime());
+    PlatformMouseEvent fakeMouseMoveEvent(m_currentMousePosition, m_currentMouseGlobalPosition, NoButton, PlatformEvent::MouseMoved, 0, shiftKey, ctrlKey, altKey, metaKey, currentTime());
     mouseMoved(fakeMouseMoveEvent);
 }
 

Modified: trunk/Source/WebCore/page/EventHandler.h (118610 => 118611)


--- trunk/Source/WebCore/page/EventHandler.h	2012-05-26 15:34:56 UTC (rev 118610)
+++ trunk/Source/WebCore/page/EventHandler.h	2012-05-26 17:14:05 UTC (rev 118611)
@@ -425,6 +425,7 @@
     LayoutSize m_offsetFromResizeCorner; // In the coords of m_resizeLayer.
     
     IntPoint m_currentMousePosition;
+    IntPoint m_currentMouseGlobalPosition;
     IntPoint m_mouseDownPos; // In our view's coords.
     double m_mouseDownTimestamp;
     PlatformMouseEvent m_mouseDown;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to