[webkit-changes] [WebKit/WebKit] c6eb7d: [UI-side compositing] Significantly more scrolling...
Simon Fraser
noreply at github.com
Thu May 18 21:47:14 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c6eb7d8ac9ade01b20d66470208c430ecac17be0
https://github.com/WebKit/WebKit/commit/c6eb7d8ac9ade01b20d66470208c430ecac17be0
Author: Simon Fraser <simon.fraser at apple.com>
Date: 2023-05-18 (Thu, 18 May 2023)
Changed paths:
M Source/WebCore/page/scrolling/ScrollingTree.cpp
M Source/WebCore/page/scrolling/ScrollingTree.h
M Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp
M Source/WebCore/page/scrolling/ThreadedScrollingTree.h
M Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.cpp
M Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.h
M Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteScrollingTreeMac.mm
Log Message:
-----------
[UI-side compositing] Significantly more scrolling sync events
https://bugs.webkit.org/show_bug.cgi?id=257001
rdar://109535555
Reviewed by Matt Woodrow.
In the web process scrolling model, we avoid doing some work when
ThreadedScrollingTree::scrollingThreadIsActive() returns false, which means
there are no scrolling animations running, and we haven't received a wheel event in the
last 50ms.
We need to replicate this for UI-process scrolling to optimize power. First, move
scrollingThreadIsActive() to be ScrollingTree::hasRecentActivity().
Second, avoid sending `didRefreshDisplay()` to the scrolling thread if there's not
recent activity.
Third, return early from `RemoteLayerTreeEventDispatcher::mainThreadDisplayDidRefresh()`
if there's no recent activity, avoiding a scrolling thread dispatch.
Finally, return early from `RemoteScrollingTreeMac::didCommitTree()` if there are no
scroll animations to start, avoiding another scrolling thread dispatch.
* Source/WebCore/page/scrolling/ScrollingTree.cpp:
(WebCore::ScrollingTree::hasRecentActivity):
* Source/WebCore/page/scrolling/ScrollingTree.h:
* Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp:
(WebCore::ThreadedScrollingTree::willStartRenderingUpdate):
(WebCore::ThreadedScrollingTree::displayDidRefresh):
(WebCore::ThreadedScrollingTree::scrollingThreadIsActive): Deleted.
* Source/WebCore/page/scrolling/ThreadedScrollingTree.h:
* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.cpp:
(WebKit::RemoteLayerTreeEventDispatcher::scrollingTreeWasRecentlyActive):
(WebKit::RemoteLayerTreeEventDispatcher::mainThreadDisplayDidRefresh):
* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteLayerTreeEventDispatcher.h:
* Source/WebKit/UIProcess/RemoteLayerTree/mac/RemoteScrollingTreeMac.mm:
(WebKit::RemoteScrollingTreeMac::didCommitTree):
Canonical link: https://commits.webkit.org/264230@main
More information about the webkit-changes
mailing list