[webkit-changes] [WebKit/WebKit] 0ca300: Prepare DisplayLink to support UI-side compositing

Simon Fraser noreply at github.com
Tue Oct 25 11:34:11 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0ca300a709eed3e70130a5e13cab0e5b5887b9b6
      https://github.com/WebKit/WebKit/commit/0ca300a709eed3e70130a5e13cab0e5b5887b9b6
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2022-10-25 (Tue, 25 Oct 2022)

  Changed paths:
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebProcessPool.h
    M Source/WebKit/UIProcess/WebProcessProxy.cpp
    M Source/WebKit/UIProcess/WebProcessProxy.h
    M Source/WebKit/UIProcess/mac/DisplayLink.cpp
    M Source/WebKit/UIProcess/mac/DisplayLink.h
    A Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.cpp
    A Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.h
    M Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm

  Log Message:
  -----------
  Prepare DisplayLink to support UI-side compositing
https://bugs.webkit.org/show_bug.cgi?id=246694
rdar://101296426

Reviewed by Chris Dumez.

The DisplayLink class has clients (currently denoted by IPC::Connection::UniqueID), and each client
has a collection of DisplayLinkObserverID, whose values are only unique in that context of that client.
In addition, each client has some extra state in the form of "wants full speed updates" which is used
for 120Hz scrolling animations and event handling.

With UI-side compositing, we'll need a client in the UI process. So replace IPC::Connection::UniqueID
with a Client class. For web process clients, DisplayLinkProcessProxyClient implements DisplayLink::Client,
and handles the IPC to the web process. WebProcessProxy owns an instance of DisplayLinkProcessProxyClient.
Getting WebProcessProxy's IPC connection isn't thread-safe, so we cache the IPC::Connection on
the main thread. DisplayLink::Client is accessed via a thread-safe CheckedPtr<> to catch lifetime
issues.

* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::startDisplayLink):
(WebKit::WebProcessPool::stopDisplayLink):
(WebKit::WebProcessPool::stopDisplayLinks):
(WebKit::WebProcessPool::setDisplayLinkPreferredFramesPerSecond):
(WebKit::WebProcessPool::setDisplayLinkForDisplayWantsFullSpeedUpdates):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::updateDisplayLinkFrequency):
(WebKit::WebPageProxy::windowScreenDidChange):
* Source/WebKit/UIProcess/WebProcessPool.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::~WebProcessProxy):
(WebKit::WebProcessProxy::connectionWillOpen):
(WebKit::WebProcessProxy::processWillShutDown):
* Source/WebKit/UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::displayLinkClient):
* Source/WebKit/UIProcess/mac/DisplayLink.cpp:
(WebKit::DisplayLink::addObserver):
(WebKit::DisplayLink::removeObserver):
(WebKit::DisplayLink::removeClient):
(WebKit::DisplayLink::removeInfoForClientIfUnused):
(WebKit::DisplayLink::incrementFullSpeedRequestClientCount):
(WebKit::DisplayLink::decrementFullSpeedRequestClientCount):
(WebKit::DisplayLink::setObserverPreferredFramesPerSecond):
(WebKit::DisplayLink::notifyObserversDisplayWasRefreshed):
(WebKit::DisplayLink::removeObservers): Deleted.
(WebKit::DisplayLink::removeInfoForConnectionIfPossible): Deleted.
(WebKit::DisplayLink::setPreferredFramesPerSecond): Deleted.
* Source/WebKit/UIProcess/mac/DisplayLink.h:
(WebKit::DisplayLink::displayID const):
(WebKit::DisplayLink::setShouldSendIPCOnBackgroundQueue): Deleted.
* Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.cpp: Added.
(WebKit::DisplayLinkProcessProxyClient::setConnection):
(WebKit::DisplayLinkProcessProxyClient::displayLinkFired):
* Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.h: Added.
* Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm:
(WebKit::WebProcessProxy::startDisplayLink):
(WebKit::WebProcessProxy::stopDisplayLink):
(WebKit::WebProcessProxy::setDisplayLinkPreferredFramesPerSecond):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
(WebKit::RemoteLayerTreeDisplayRefreshMonitor::requestRefreshCallback):

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




More information about the webkit-changes mailing list