Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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@igalia.com> Canonical link: https://commits.webkit.org/268646@main
- Loading branch information