Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 43c540f60166ca42ad00b9d538c232a02b3ec3ce
      
https://github.com/WebKit/WebKit/commit/43c540f60166ca42ad00b9d538c232a02b3ec3ce
  Author: Simon Fraser <simon.fra...@apple.com>
  Date:   2023-03-23 (Thu, 23 Mar 2023)

  Changed paths:
    M 
LayoutTests/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler.html
    M Source/WebKit/Shared/WebWheelEventCoalescer.cpp
    M Source/WebKit/Shared/WebWheelEventCoalescer.h
    M Source/WebKit/UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp
    M Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
    M Source/WebKit/UIProcess/API/wpe/PageClientImpl.cpp
    M Source/WebKit/UIProcess/API/wpe/WPEView.cpp
    M 
Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp
    M Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h
    M 
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.cpp
    M 
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.h
    M 
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteScrollingCoordinatorProxyMac.h
    M 
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteScrollingCoordinatorProxyMac.mm
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/mac/WebViewImpl.mm
    M Source/WebKit/UIProcess/win/WebView.cpp

  Log Message:
  -----------
  [UI-side compositing] Send events to the WebWheelEventCoalescer before 
sending them to the scrolling thread
https://bugs.webkit.org/show_bug.cgi?id=254247
rdar://107032016

Reviewed by Tim Horton.

With UI-side compositing, we first try to handle a wheel event in the scrolling 
thread in the UI
process, and may then send it to the web process. A future patch will add some 
post-web-process
handling, so we have to avoid starting to handle the next wheel event in the 
meantime.

WebWheelEventCoalescer already takes case of this, so call 
`wheelEventCoalescer().shouldDispatchEvent()`
before we dispatch any wheel event to the scrolling coordinator in the UI 
process.

This has a few ramifications. If WebWheelEventCoalescer coalesces events, it 
can only spit out
WebWheelEvents (no corresponding NSEvent), rather than NativeWebWheelEvents. So 
we have to call
cacheWheelEventScrollingAccelerationCurve() for the UI-side 
MomentumEventDispatcher before doing
anything else, but the rest of the event handling chain can deal in 
WebWheelEvents.

This also means that WebWheelEventCoalescer coalesces before we know about 
processing steps, so
it no longer have to deal with {event, processing steps} pairs, and we can 
revert to the simpler
implementation that only tracks events.

Finally, when the UI-side scrolling thread finishes its event handling (and no 
further processing
is needed), we need to take an event from WebWheelEventCoalescer's queue via 
takeOldestEventBeingProcessed(),
and see if there is another event in the queue to start processing; this code 
is now shared
with the code that runs when the web processes finishes its wheel event 
handling, via WebPageProxy::wheelEventHandlingCompleted().

Make one test slightly more robust by defeating coalescing.

* 
LayoutTests/tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler.html:
* Source/WebKit/Shared/WebWheelEventCoalescer.cpp:
(WebKit::operator<<):
(WebKit::WebWheelEventCoalescer::canCoalesce):
(WebKit::WebWheelEventCoalescer::coalesce):
(WebKit::WebWheelEventCoalescer::nextEventToDispatch):
(WebKit::WebWheelEventCoalescer::shouldDispatchEvent):
(WebKit::WebWheelEventCoalescer::takeOldestEventBeingProcessed):
* Source/WebKit/Shared/WebWheelEventCoalescer.h:
(WebKit::WebWheelEventAndSteps::WebWheelEventAndSteps): Deleted.
* Source/WebKit/UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:
(WKPageHandleWheelEvent):
* Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseScrollEvent):
(handleScroll):
(webkitWebViewBaseSynthesizeWheelEvent):
* Source/WebKit/UIProcess/API/wpe/PageClientImpl.cpp:
(WebKit::PageClientImpl::doneWithTouchEvent):
* Source/WebKit/UIProcess/API/wpe/WPEView.cpp:
(WKWPE::m_backend):
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
(WebKit::RemoteScrollingCoordinatorProxy::handleWheelEvent):
(WebKit::RemoteScrollingCoordinatorProxy::continueWheelEventHandling):
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
(WebKit::RemoteScrollingCoordinatorProxy::cacheWheelEventScrollingAccelerationCurve):
* 
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.cpp:
(WebKit::RemoteLayerTreeEventDispatcher::cacheWheelEventScrollingAccelerationCurve):
(WebKit::RemoteLayerTreeEventDispatcher::willHandleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::handleWheelEvent):
* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.h:
* 
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteScrollingCoordinatorProxyMac.h:
* 
Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteScrollingCoordinatorProxyMac.mm:
(WebKit::RemoteScrollingCoordinatorProxyMac::cacheWheelEventScrollingAccelerationCurve):
(WebKit::RemoteScrollingCoordinatorProxyMac::handleWheelEvent):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::handleNativeWheelEvent): New function which is the entry 
point to wheel event handling,
taking a NativeWebWheelEvent.
(WebKit::WebPageProxy::handleWheelEvent): Takes a WebWheelEvent; called by both 
handleNativeWheelEvent, and via wheelEventHandlingCompleted().
(WebKit::WebPageProxy::continueWheelEventHandling):
(WebKit::WebPageProxy::sendWheelEvent):
(WebKit::WebPageProxy::wheelEventHandlingCompleted):
(WebKit::WebPageProxy::cacheWheelEventScrollingAccelerationCurve):
(WebKit::WebPageProxy::sendWheelEventScrollingAccelerationCurveIfNecessary):
(WebKit::WebPageProxy::didReceiveEvent):
(WebKit::WebPageProxy::wheelEventWasNotHandled): Deleted.
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::scrollWheel):
* Source/WebKit/UIProcess/win/WebView.cpp:
(WebKit::WebView::onWheelEvent):

Canonical link: https://commits.webkit.org/262015@main


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to