[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