[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