Changeset 231511 in webkit


Ignore:
Timestamp:
May 8, 2018 2:19:36 PM (6 years ago)
Author:
BJ Burg
Message:

REGRESSION(r230743): Mousemove events are not coalesced properly, mousemove/drag is very laggy
https://bugs.webkit.org/show_bug.cgi?id=185425
<rdar://problem/39323336>

Reviewed by Simon Fraser.

When mousemove events come in faster than they can be processed, we should coalesce
pending mousemoves that have not yet been sent to WebProcess. This has the effect of
processing the most recent mousemove location, which is the old behavior that regressed.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::handleMouseEvent):
If there is >1 event in the mouse queue, then the first one is being processed by WebProcess
and the second one is eligible for coalescing. Replace it if the last event and new event
are both mousemoves.

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r231510 r231511  
     12018-05-08  Brian Burg  <bburg@apple.com>
     2
     3        REGRESSION(r230743): Mousemove events are not coalesced properly, mousemove/drag is very laggy
     4        https://bugs.webkit.org/show_bug.cgi?id=185425
     5        <rdar://problem/39323336>
     6
     7        Reviewed by Simon Fraser.
     8
     9        When mousemove events come in faster than they can be processed, we should coalesce
     10        pending mousemoves that have not yet been sent to WebProcess. This has the effect of
     11        processing the most recent mousemove location, which is the old behavior that regressed.
     12
     13        * UIProcess/WebPageProxy.cpp:
     14        (WebKit::WebPageProxy::handleMouseEvent):
     15        If there is >1 event in the mouse queue, then the first one is being processed by WebProcess
     16        and the second one is eligible for coalescing. Replace it if the last event and new event
     17        are both mousemoves.
     18
    1192018-05-08  Per Arne Vollan  <pvollan@apple.com>
    220
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r231507 r231511  
    19291929        return;
    19301930
    1931     LOG(MouseHandling, "UIProcess: enqueued mouse event %s (queue size %zu)", webMouseEventTypeString(event.type()), m_mouseEventQueue.size());
    1932     m_mouseEventQueue.append(event);
     1931    // If we receive multiple mousemove events and the most recent mousemove event has not been
     1932    // sent to WebProcess for processing, replace the pending mousemove event with a new one.
     1933    if (event.type() == WebEvent::MouseMove && m_mouseEventQueue.size() > 1 && m_mouseEventQueue.last().type() == WebEvent::MouseMove) {
     1934        LOG(MouseHandling, "UIProcess: updated pending mousemove event (queue size %zu)", m_mouseEventQueue.size());
     1935        m_mouseEventQueue.removeLast();
     1936        m_mouseEventQueue.append(event);
     1937    } else {
     1938        LOG(MouseHandling, "UIProcess: enqueued mouse event %s (queue size %zu)", webMouseEventTypeString(event.type()), m_mouseEventQueue.size());
     1939        m_mouseEventQueue.append(event);
     1940    }
    19331941    if (m_mouseEventQueue.size() == 1) // Otherwise, called from DidReceiveEvent message handler.
    19341942        processNextQueuedMouseEvent();
Note: See TracChangeset for help on using the changeset viewer.