[webkit-changes] [WebKit/WebKit] 4aad34: [GTK] Add a DisplayLink implementation

alexgcastro noreply at github.com
Fri Sep 29 06:29:46 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4aad349224a3cf6246969fef86972f191b280fc1
      https://github.com/WebKit/WebKit/commit/4aad349224a3cf6246969fef86972f191b280fc1
  Author: Alejandro G. Castro <alex at igalia.com>
  Date:   2023-09-29 (Fri, 29 Sep 2023)

  Changed paths:
    M Source/WTF/wtf/PlatformHave.h
    M Source/WebCore/SourcesGTK.txt
    M Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp
    R Source/WebCore/platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp
    R Source/WebCore/platform/graphics/gtk/DisplayRefreshMonitorGtk.h
    M Source/WebKit/PlatformGTK.cmake
    M Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp
    M Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h
    M Source/WebKit/Shared/Extensions/WebExtensionAlarmParameters.h
    M Source/WebKit/Sources.txt
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/SourcesGTK.txt
    M Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
    M Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp
    M Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h
    A Source/WebKit/UIProcess/DisplayLink.cpp
    A Source/WebKit/UIProcess/DisplayLink.h
    A Source/WebKit/UIProcess/DisplayLinkProcessProxyClient.cpp
    A Source/WebKit/UIProcess/DisplayLinkProcessProxyClient.h
    M Source/WebKit/UIProcess/DrawingAreaProxy.cpp
    M Source/WebKit/UIProcess/DrawingAreaProxy.h
    M Source/WebKit/UIProcess/Extensions/WebExtensionAlarm.cpp
    M Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxyInternals.h
    M Source/WebKit/UIProcess/WebProcessPool.h
    M Source/WebKit/UIProcess/WebProcessProxy.cpp
    M Source/WebKit/UIProcess/WebProcessProxy.h
    M Source/WebKit/UIProcess/WebProcessProxy.messages.in
    A Source/WebKit/UIProcess/glib/DisplayLinkGLib.cpp
    A Source/WebKit/UIProcess/glib/DisplayVBlankMonitor.cpp
    A Source/WebKit/UIProcess/glib/DisplayVBlankMonitor.h
    A Source/WebKit/UIProcess/glib/DisplayVBlankMonitorDRM.cpp
    A Source/WebKit/UIProcess/glib/DisplayVBlankMonitorDRM.h
    A Source/WebKit/UIProcess/glib/DisplayVBlankMonitorTimer.cpp
    A Source/WebKit/UIProcess/glib/DisplayVBlankMonitorTimer.h
    M Source/WebKit/UIProcess/gtk/ScreenManager.cpp
    M Source/WebKit/UIProcess/gtk/ScreenManager.h
    R Source/WebKit/UIProcess/mac/DisplayLink.cpp
    R Source/WebKit/UIProcess/mac/DisplayLink.h
    A Source/WebKit/UIProcess/mac/DisplayLinkMac.cpp
    R Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.cpp
    R 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/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp
    M Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h
    M Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp
    M Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h
    M Source/WebKit/WebProcess/WebPage/DrawingArea.messages.in
    M Source/WebKit/WebProcess/WebPage/EventDispatcher.cpp
    M Source/WebKit/WebProcess/WebPage/EventDispatcher.h
    M Source/WebKit/WebProcess/WebPage/EventDispatcher.messages.in
    A Source/WebKit/WebProcess/WebPage/WebDisplayRefreshMonitor.cpp
    A Source/WebKit/WebProcess/WebPage/WebDisplayRefreshMonitor.h
    R Source/WebKit/WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp
    R Source/WebKit/WebProcess/WebPage/mac/DisplayRefreshMonitorMac.h
    M Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm
    M Source/WebKit/WebProcess/WebProcess.cpp
    M Source/WebKit/WebProcess/WebProcess.h
    M Source/WebKit/WebProcess/WebProcess.messages.in

  Log Message:
  -----------
  [GTK] Add a DisplayLink implementation
https://bugs.webkit.org/show_bug.cgi?id=261673

Reviewed by Simon Fraser.

Add DisplayLink implementation using DRM API when available to get the
vblank signal from monitor. When DRM is not available we fallback to use
a timer. The patch includes some refactorings needed to share the
implementation with other ports for non-platform specific parts. The
platform display ID is no longer generated based on the drawing area
identifier, but assigned by the screen manager to every monitor.
ThreadedDisplayRefreshMonitor and DisplayRefreshMonitorGtk are no longer
needed now.

* Source/WebCore/SourcesGTK.txt:
* Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp:
(WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor):
(WebCore::DisplayRefreshMonitor::requestRefreshCallback):
* Source/WebCore/platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp: Removed.
* Source/WebKit/PlatformGTK.cmake:
* Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
(WebKit::ThreadedCompositor::create):
(WebKit::ThreadedCompositor::ThreadedCompositor):
(WebKit::ThreadedCompositor::invalidate):
(WebKit::ThreadedCompositor::renderLayerTree):
(WebKit::ThreadedCompositor::sceneUpdateFinished):
(WebKit::ThreadedCompositor::frameComplete):
* Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
* Source/WebKit/Sources.txt:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/SourcesGTK.txt:
* Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseUpdateDisplayID):
(toplevelWindowConfigureEvent):
(webkitWebViewBaseSetToplevelOnScreenWindow):
(webkitWebViewBaseRealize):
(toplevelWindowMonitorsChanged):
(toplevelWindowRealized):
(toplevelWindowUnrealized):
(webkitWebViewBaseRoot):
(webkitWebViewBaseUnroot):
(webkitWebViewBaseCreateWebPage):
(webkitWebViewBaseDidRelaunchWebProcess):
* Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp:
(WebKit::DrawingAreaProxyCoordinatedGraphics::displayNominalFramesPerSecond):
* Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h:
* Source/WebKit/UIProcess/DisplayLink.cpp: Renamed from Source/WebKit/UIProcess/mac/DisplayLink.cpp.
(WebKit::DisplayLink::DisplayLink):
(WebKit::DisplayLink::~DisplayLink):
(WebKit::DisplayLink::addObserver):
(WebKit::DisplayLink::notifyObserversDisplayDidRefresh):
(WebKit::DisplayLinkCollection::stopDisplayLinks):
* Source/WebKit/UIProcess/DisplayLink.h: Renamed from Source/WebKit/UIProcess/mac/DisplayLink.h.
* Source/WebKit/UIProcess/DisplayLinkProcessProxyClient.cpp: Renamed from Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.cpp.
* Source/WebKit/UIProcess/DisplayLinkProcessProxyClient.h: Copied from Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.h.
* Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h:
* Source/WebKit/UIProcess/DrawingAreaProxy.h:
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.cpp:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::Internals::Internals):
(WebKit::WebPageProxy::sendWheelEvent):
(WebKit::WebPageProxy::updateWheelEventActivityAfterProcessSwap):
(WebKit::WebPageProxy::windowScreenDidChange):
(WebKit::WebPageProxy::setHasActiveAnimatedScrolls):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxyInternals.h:
* Source/WebKit/UIProcess/WebProcessPool.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::~WebProcessProxy):
(WebKit::WebProcessProxy::connectionWillOpen):
(WebKit::WebProcessProxy::processWillShutDown):
(WebKit::WebProcessProxy::nominalFramesPerSecondForDisplay):
(WebKit::WebProcessProxy::startDisplayLink):
(WebKit::WebProcessProxy::stopDisplayLink):
(WebKit::WebProcessProxy::setDisplayLinkPreferredFramesPerSecond):
(WebKit::WebProcessProxy::setDisplayLinkForDisplayWantsFullSpeedUpdates):
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/UIProcess/glib/DisplayLinkGLib.cpp: Renamed from Source/WebKit/UIProcess/mac/DisplayLinkProcessProxyClient.h.
(WebKit::DisplayLink::platformInitialize):
(WebKit::DisplayLink::platformFinalize):
(WebKit::DisplayLink::platformIsRunning const):
(WebKit::DisplayLink::platformStart):
(WebKit::DisplayLink::platformStop):
* Source/WebKit/UIProcess/glib/DisplayVBlankMonitor.cpp: Added.
(WebKit::DisplayVBlankMonitor::create):
(WebKit::DisplayVBlankMonitor::DisplayVBlankMonitor):
(WebKit::DisplayVBlankMonitor::~DisplayVBlankMonitor):
(WebKit::DisplayVBlankMonitor::startThreadIfNeeded):
(WebKit::DisplayVBlankMonitor::start):
(WebKit::DisplayVBlankMonitor::stop):
(WebKit::DisplayVBlankMonitor::invalidate):
(WebKit::DisplayVBlankMonitor::isActive):
(WebKit::DisplayVBlankMonitor::setHandler):
(WebKit::DisplayVBlankMonitor::destroyThreadTimerFired):
* Source/WebKit/UIProcess/glib/DisplayVBlankMonitor.h: Copied from Source/WebKit/UIProcess/gtk/ScreenManager.h.
(WebKit::DisplayVBlankMonitor::refreshRate const):
(WebKit::DisplayVBlankMonitor::WTF_GUARDED_BY_LOCK):
* Source/WebKit/UIProcess/glib/DisplayVBlankMonitorDRM.cpp: Added.
(WebKit::findCrtc):
(WebKit::DisplayVBlankMonitorDRM::create):
(WebKit::DisplayVBlankMonitorDRM::DisplayVBlankMonitorDRM):
(WebKit::DisplayVBlankMonitorDRM::waitForVBlank const):
* Source/WebKit/UIProcess/glib/DisplayVBlankMonitorDRM.h: Renamed from Source/WebCore/platform/graphics/gtk/DisplayRefreshMonitorGtk.h.
* Source/WebKit/UIProcess/glib/DisplayVBlankMonitorTimer.cpp: Copied from Source/WebKit/UIProcess/gtk/ScreenManager.h.
(WebKit::DisplayVBlankMonitorTimer::create):
(WebKit::DisplayVBlankMonitorTimer::DisplayVBlankMonitorTimer):
(WebKit::DisplayVBlankMonitorTimer::waitForVBlank const):
* Source/WebKit/UIProcess/glib/DisplayVBlankMonitorTimer.h: Copied from Source/WebKit/UIProcess/gtk/ScreenManager.h.
* Source/WebKit/UIProcess/gtk/ScreenManager.cpp:
(WebKit::ScreenManager::displayID const):
(WebKit::ScreenManager::monitor const):
* Source/WebKit/UIProcess/gtk/ScreenManager.h:
* Source/WebKit/UIProcess/mac/DisplayLinkMac.cpp: Added.
(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/WebProcessProxyMac.mm:
(WebKit::WebProcessProxy::nominalFramesPerSecondForDisplay): Deleted.
(WebKit::WebProcessProxy::startDisplayLink): Deleted.
(WebKit::WebProcessProxy::stopDisplayLink): Deleted.
(WebKit::WebProcessProxy::setDisplayLinkPreferredFramesPerSecond): Deleted.
(WebKit::WebProcessProxy::setDisplayLinkForDisplayWantsFullSpeedUpdates): Deleted.
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
(WebKit::DrawingAreaCoordinatedGraphics::createDisplayRefreshMonitor):
(WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode):
(WebKit::DrawingAreaCoordinatedGraphics::exitAcceleratedCompositingMode):
* Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.h:
* Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
(WebKit::LayerTreeHost::LayerTreeHost):
(WebKit::LayerTreeHost::layerFlushTimerFired):
(WebKit::LayerTreeHost::didRenderFrame):
* Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.h:
(WebKit::LayerTreeHost::LayerTreeHost):
(WebKit::LayerTreeHost::deviceOrPageScaleFactorChanged):
(WebKit::LayerTreeHost::createDisplayRefreshMonitor):
* Source/WebKit/WebProcess/WebPage/DrawingArea.messages.in:
* Source/WebKit/WebProcess/WebPage/EventDispatcher.cpp:
* Source/WebKit/WebProcess/WebPage/EventDispatcher.h:
* Source/WebKit/WebProcess/WebPage/EventDispatcher.messages.in:
* Source/WebKit/WebProcess/WebPage/WebDisplayRefreshMonitor.cpp: Renamed from Source/WebKit/WebProcess/WebPage/mac/DisplayRefreshMonitorMac.cpp.
(WebKit::WebDisplayRefreshMonitor::WebDisplayRefreshMonitor):
(WebKit::WebDisplayRefreshMonitor::~WebDisplayRefreshMonitor):
(WebKit::WebDisplayRefreshMonitor::dispatchDisplayDidRefresh):
(WebKit::WebDisplayRefreshMonitor::startNotificationMechanism):
(WebKit::WebDisplayRefreshMonitor::stopNotificationMechanism):
(WebKit::WebDisplayRefreshMonitor::adjustPreferredFramesPerSecond):
* Source/WebKit/WebProcess/WebPage/WebDisplayRefreshMonitor.h: Renamed from Source/WebKit/WebProcess/WebPage/mac/DisplayRefreshMonitorMac.h.
* Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::createDisplayRefreshMonitor):
* Source/WebKit/WebProcess/WebProcess.cpp:
* Source/WebKit/WebProcess/WebProcess.h:
* Source/WebKit/WebProcess/WebProcess.messages.in:

Co-authored-by: Carlos Garcia Campos <cgarcia at igalia.com>
Canonical link: https://commits.webkit.org/268646@main




More information about the webkit-changes mailing list