Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[UI-side compositing] Hook up the MomentumEventGenerator for UI-side scrolling #10778

Conversation

smfr
Copy link
Contributor

@smfr smfr commented Feb 28, 2023

7b321c9

[UI-side compositing] Hook up the MomentumEventGenerator for UI-side scrolling
https://bugs.webkit.org/show_bug.cgi?id=253049
rdar://106012308

Reviewed by Tim Horton.

Give RemoteLayerTreeEventDispatcher a MomentumEventDispatcher, which synthesizes momentum events
on the UI-sides scrolling thread.

RemoteLayerTreeEventDispatcher becomes a MomentumEventDispatcher::Client so that MomentumEventDispatcher
can keep the display link alive. Fix startOrStopDisplayLink() so it can be called from either thread.

RemoteLayerTreeEventDispatcher::willHandleWheelEvent() is used so allow the MomentumEventDispatcher to extract
the ScrollingAccelerationCurve from the native event.

Factor code into determineWheelEventProcessing() so we can call it before feeding events to MomentumEventDispatcher,
because we need to know if this event is relevant to the scrolling thread before handing it off to MomentumEventDispatcher,
which can't give an answer about whether it's handled.

* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.cpp:
(WebKit::RemoteLayerTreeEventDispatcher::create):
(WebKit::RemoteLayerTreeEventDispatcher::RemoteLayerTreeEventDispatcher):
(WebKit::m_momentumEventDispatcher):
(WebKit::RemoteLayerTreeEventDispatcher::wheelEventHysteresisUpdated):
(WebKit::RemoteLayerTreeEventDispatcher::hasNodeWithAnimatedScrollChanged):
(WebKit::RemoteLayerTreeEventDispatcher::willHandleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::handleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::determineWheelEventProcessing):
(WebKit::RemoteLayerTreeEventDispatcher::scrollingThreadHandleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::internalHandleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::startOrStopDisplayLink):
(WebKit::RemoteLayerTreeEventDispatcher::startOrStopDisplayLinkOnMainThread):
(WebKit::RemoteLayerTreeEventDispatcher::didRefreshDisplay):
(WebKit::RemoteLayerTreeEventDispatcher::mainThreadDisplayDidRefresh):
(WebKit::RemoteLayerTreeEventDispatcher::windowScreenDidChange):
(WebKit::RemoteLayerTreeEventDispatcher::handleSyntheticWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::startDisplayDidRefreshCallbacks):
(WebKit::RemoteLayerTreeEventDispatcher::stopDisplayDidRefreshCallbacks):
(WebKit::RemoteLayerTreeEventDispatcher::flushMomentumEventLoggingSoon):
* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.h:
* Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.h:

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

ca94261

Misc iOS, tvOS & watchOS macOS Linux Windows
❌ πŸ§ͺ style βœ… πŸ›  ios   πŸ›  mac βœ… πŸ›  wpe   πŸ›  wincairo
βœ… πŸ›  ios-sim βœ… πŸ›  mac-AS-debug βœ… πŸ›  gtk
βœ… πŸ§ͺ webkitperl   πŸ§ͺ ios-wk2   πŸ§ͺ api-mac   πŸ§ͺ gtk-wk2
  πŸ§ͺ api-ios   πŸ§ͺ mac-wk1   πŸ§ͺ api-gtk
βœ… πŸ›  tv   πŸ§ͺ mac-wk2
  πŸ›  tv-sim   πŸ§ͺ mac-AS-debug-wk2
  πŸ›  watch   πŸ§ͺ mac-wk2-stress
❌ πŸ›  πŸ§ͺ merge βœ… πŸ›  watch-sim

@smfr smfr requested a review from cdumez as a code owner February 28, 2023 04:59
@smfr smfr self-assigned this Feb 28, 2023
@smfr smfr added the Scrolling Bugs related to main thread and off-main thread scrolling label Feb 28, 2023
@smfr smfr force-pushed the eng/UI-side-compositing-Hook-up-the-MomentumEventGenerator-for-UI-side-scrolling branch from 2ad39d1 to ca94261 Compare February 28, 2023 23:08
@smfr smfr added the merge-queue Applied to send a pull request to merge-queue label Feb 28, 2023
@webkit-commit-queue webkit-commit-queue force-pushed the eng/UI-side-compositing-Hook-up-the-MomentumEventGenerator-for-UI-side-scrolling branch from ca94261 to 976394c Compare March 1, 2023 00:21
…scrolling

https://bugs.webkit.org/show_bug.cgi?id=253049
rdar://106012308

Reviewed by Tim Horton.

Give RemoteLayerTreeEventDispatcher a MomentumEventDispatcher, which synthesizes momentum events
on the UI-sides scrolling thread.

RemoteLayerTreeEventDispatcher becomes a MomentumEventDispatcher::Client so that MomentumEventDispatcher
can keep the display link alive. Fix startOrStopDisplayLink() so it can be called from either thread.

RemoteLayerTreeEventDispatcher::willHandleWheelEvent() is used so allow the MomentumEventDispatcher to extract
the ScrollingAccelerationCurve from the native event.

Factor code into determineWheelEventProcessing() so we can call it before feeding events to MomentumEventDispatcher,
because we need to know if this event is relevant to the scrolling thread before handing it off to MomentumEventDispatcher,
which can't give an answer about whether it's handled.

* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.cpp:
(WebKit::RemoteLayerTreeEventDispatcher::create):
(WebKit::RemoteLayerTreeEventDispatcher::RemoteLayerTreeEventDispatcher):
(WebKit::m_momentumEventDispatcher):
(WebKit::RemoteLayerTreeEventDispatcher::wheelEventHysteresisUpdated):
(WebKit::RemoteLayerTreeEventDispatcher::hasNodeWithAnimatedScrollChanged):
(WebKit::RemoteLayerTreeEventDispatcher::willHandleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::handleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::determineWheelEventProcessing):
(WebKit::RemoteLayerTreeEventDispatcher::scrollingThreadHandleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::internalHandleWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::startOrStopDisplayLink):
(WebKit::RemoteLayerTreeEventDispatcher::startOrStopDisplayLinkOnMainThread):
(WebKit::RemoteLayerTreeEventDispatcher::didRefreshDisplay):
(WebKit::RemoteLayerTreeEventDispatcher::mainThreadDisplayDidRefresh):
(WebKit::RemoteLayerTreeEventDispatcher::windowScreenDidChange):
(WebKit::RemoteLayerTreeEventDispatcher::handleSyntheticWheelEvent):
(WebKit::RemoteLayerTreeEventDispatcher::startDisplayDidRefreshCallbacks):
(WebKit::RemoteLayerTreeEventDispatcher::stopDisplayDidRefreshCallbacks):
(WebKit::RemoteLayerTreeEventDispatcher::flushMomentumEventLoggingSoon):
* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.h:
* Source/WebKit/WebProcess/WebPage/MomentumEventDispatcher.h:

Canonical link: https://commits.webkit.org/260976@main
@webkit-commit-queue webkit-commit-queue force-pushed the eng/UI-side-compositing-Hook-up-the-MomentumEventGenerator-for-UI-side-scrolling branch from 976394c to 7b321c9 Compare March 1, 2023 00:24
@webkit-commit-queue
Copy link
Collaborator

Committed 260976@main (7b321c9): https://commits.webkit.org/260976@main

Reviewed commits have been landed. Closing PR #10778 and removing active labels.

@webkit-commit-queue webkit-commit-queue merged commit 7b321c9 into WebKit:main Mar 1, 2023
@webkit-commit-queue webkit-commit-queue removed the merge-queue Applied to send a pull request to merge-queue label Mar 1, 2023
@smfr smfr deleted the eng/UI-side-compositing-Hook-up-the-MomentumEventGenerator-for-UI-side-scrolling branch April 11, 2023 01:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Scrolling Bugs related to main thread and off-main thread scrolling
Projects
None yet
4 participants