[webkit-changes] [WebKit/WebKit] c206b6: Adopt CADisplayLink on macOS 14

Antoine Quint noreply at github.com
Tue Jun 4 09:06:24 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: c206b6b473adbc878d70f41e79ec4b2dbe5dc157
      https://github.com/WebKit/WebKit/commit/c206b6b473adbc878d70f41e79ec4b2dbe5dc157
  Author: Antoine Quint <graouts at webkit.org>
  Date:   2024-06-04 (Tue, 04 Jun 2024)

  Changed paths:
    M Source/WTF/wtf/PlatformHave.h
    M Source/WebCore/PAL/pal/spi/cocoa/QuartzCoreSPI.h
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/platform/PlatformScreen.h
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/UIProcess/DisplayLink.h
    R Source/WebKit/UIProcess/mac/DisplayLinkMac.cpp
    A Source/WebKit/UIProcess/mac/DisplayLinkMac.mm
    A Source/WebKit/UIProcess/mac/LegacyDisplayLinkMac.cpp
    M Source/WebKit/UIProcess/mac/WKImmediateActionController.mm
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj

  Log Message:
  -----------
  Adopt CADisplayLink on macOS 14
https://bugs.webkit.org/show_bug.cgi?id=274268
rdar://119217720

Reviewed by Simon Fraser.

The CADisplayLink API is newly available on macOS 14. We add a new `HAVE(CA_DISPLAY_LINK_MAC)`
directive and if it's not available, use a legacy codepath where `CVDisplayLink` is used instead,
in `LegacyDisplayLinkMac.cpp`, and when available use `CADisplayLink` in `DisplayLinkMac.mm`.

In order to preserve a similar behavior to `CVDisplayLink`, we spawn a dedicated thread for each
`CADisplayLink`. Note that on macOS, the creation of a `CADisplayLink` is done through `NSScreen`,
so we also export the `WebCore::screen()` method to be able to get the appropriate `NSScreen` for
a given `DisplayLink` instance.

Patch written with the help of Ben Nham.

* Source/WTF/wtf/PlatformHave.h:
* Source/WebCore/PAL/pal/spi/cocoa/QuartzCoreSPI.h:
* Source/WebCore/platform/PlatformScreen.h:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/DisplayLink.h:
* Source/WebKit/UIProcess/mac/DisplayLinkMac.mm: Added.
(-[WKDisplayLinkHandler initWithScreen:client:]):
(-[WKDisplayLinkHandler threadWasCreated]):
(-[WKDisplayLinkHandler displayLinkFired:]):
(-[WKDisplayLinkHandler invalidate]):
(-[WKDisplayLinkHandler isRunning]):
(-[WKDisplayLinkHandler setRunning:]):
(-[WKDisplayLinkHandler nominalFramesPerSecond]):
(WebKit::DisplayLink::platformInitialize):
(WebKit::DisplayLink::platformFinalize):
(WebKit::DisplayLink::platformIsRunning const):
(WebKit::DisplayLink::platformStart):
(WebKit::DisplayLink::platformStop):
(WebKit::DisplayLink::displayLinkHandlerCallbackFired):
* Source/WebKit/UIProcess/mac/LegacyDisplayLinkMac.cpp: Renamed from Source/WebKit/UIProcess/mac/DisplayLinkMac.cpp.
(WebKit::DisplayLink::platformInitialize):
(WebKit::DisplayLink::platformFinalize):
(WebKit::DisplayLink::nominalFramesPerSecondFromDisplayLink):
(WebKit::DisplayLink::platformIsRunning const):
(WebKit::DisplayLink::platformStart):
(WebKit::DisplayLink::platformStop):
(WebKit::DisplayLink::displayLinkCallback):
* Source/WebKit/UIProcess/mac/WKImmediateActionController.mm:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:

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



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list