Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0ca300a709eed3e70130a5e13cab0e5b5887b9b6
      
https://github.com/WebKit/WebKit/commit/0ca300a709eed3e70130a5e13cab0e5b5887b9b6
  Author: Simon Fraser <[email protected]>
  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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to