[webkit-changes] [WebKit/WebKit] 815e52: [UI-side compositing] Wheel events sent to the web...

Simon Fraser noreply at github.com
Tue Dec 20 10:27:29 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 815e52db702d462eca13cb99c5869d1787460d5b
      https://github.com/WebKit/WebKit/commit/815e52db702d462eca13cb99c5869d1787460d5b
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2022-12-20 (Tue, 20 Dec 2022)

  Changed paths:
    M Source/WebCore/page/FrameView.cpp
    M Source/WebCore/page/scrolling/ScrollingCoordinator.h
    M Source/WebCore/page/scrolling/ThreadedScrollingCoordinator.cpp
    M Source/WebCore/page/scrolling/ThreadedScrollingCoordinator.h
    M Source/WebCore/rendering/RenderLayerScrollableArea.cpp
    M Source/WebKit/Shared/WebWheelEventCoalescer.cpp
    M Source/WebKit/Shared/WebWheelEventCoalescer.h
    M Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
    M Source/WebKit/UIProcess/DrawingAreaProxy.h
    M Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp
    M Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in

  Log Message:
  -----------
  [UI-side compositing] Wheel events sent to the web process need to sometimes trigger scrolling
https://bugs.webkit.org/show_bug.cgi?id=249613
rdar://103534392

Reviewed by Brent Fulgham.

`ScrollingTree::handleWheelEvent()` returns a `WheelEventHandlingResult` which contains a
set of `WheelEventProcessingSteps` which say what processing remains for the event (e.g.
main thread scrolling, DOM event dispatch). When the UI process ScrollingTree handles
an event, we need to send the `WheelEventProcessingSteps` to the web process so that the
remaining steps are handled there.

So have `RemoteScrollingCoordinatorProxy::handleWheelEvent()` return a WheelEventHandlingResult,
and associate the WheelEventProcessingSteps with a WebWheelEvent which will get sent by WebPageProxy
to the web process.

Unfortunately WebWheelEventCoalescer gets a little messy, since it deals with both WebWheelEvent
(used for coalesced events with no corresponding native event) and its subclass NativeWebWheelEvent,
but essentially we can only coalesce events that have the same WheelEventProcessingSteps.

WebPageProxy::sendWheelEvent() also needs to know if it should send events to WebKit::EventDispatcher
(the non-UI-side compositing code path) or WebPage, so add a way for it to ask the DrawingAreaProxy
which route to take.

* Source/WebCore/page/FrameView.cpp:
(WebCore::FrameView::handleWheelEventForScrolling):
* Source/WebCore/page/scrolling/ScrollingCoordinator.h:
(WebCore::ScrollingCoordinator::handleWheelEventForScrolling):
* Source/WebCore/page/scrolling/ThreadedScrollingCoordinator.cpp:
(WebCore::ThreadedScrollingCoordinator::handleWheelEventForScrolling):
* Source/WebCore/page/scrolling/ThreadedScrollingCoordinator.h:
* Source/WebCore/rendering/RenderLayerScrollableArea.cpp:
(WebCore::RenderLayerScrollableArea::handleWheelEventForScrolling):
* 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):
* Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h:
* Source/WebKit/UIProcess/DrawingAreaProxy.h:
(WebKit::DrawingAreaProxy::shouldSendWheelEventsToEventDispatcher const):
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
(WebKit::RemoteScrollingCoordinatorProxy::handleWheelEvent):
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::handleWheelEvent):
(WebKit::WebPageProxy::sendWheelEvent):
(WebKit::WebPageProxy::didReceiveEvent):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::handleWheelEvent):
(WebKit::WebPage::wheelEvent):
(WebKit::handleWheelEvent): Deleted.
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:

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




More information about the webkit-changes mailing list