Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: fa67a26252252fec5d3f124b05398ce812cfdffc
https://github.com/WebKit/WebKit/commit/fa67a26252252fec5d3f124b05398ce812cfdffc
Author: Matt Woodrow <[email protected]>
Date: 2023-06-06 (Tue, 06 Jun 2023)
Changed paths:
M Source/WebCore/page/ChromeClient.h
M Source/WebCore/page/Page.cpp
M Source/WebCore/page/Page.h
M Source/WebCore/page/RenderingUpdateScheduler.cpp
M Source/WebCore/page/RenderingUpdateScheduler.h
M Source/WebKit/SourcesCocoa.txt
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
M Source/WebKit/WebProcess/WebPage/DrawingArea.h
R
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h
R
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm
M
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h
M
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm
Log Message:
-----------
Schedule rendering via RemoteLayerTreeDrawingArea directly, rather than using
a 'fake' DisplayRefreshMonitor.
https://bugs.webkit.org/show_bug.cgi?id=257290
<rdar://problem/109953504>
Reviewed by Simon Fraser.
RemoteLayerTreeDisplayRefreshMonitor is mostly just a wrapper around asking the
RemoteLayerTreeDrawingArea to schedule when it wants to display next.
This is specific to that drawing area, and can be throttled if the drawing area
is failing to commit layer trees as fast as expected.
DisplayRefreshMonitorManager caches DisplayRefreshMonitors, and shares them
between all WebCore::Page/RenderingUpdateSchedulers on the same Display.
This means if we have multiple RemoteLayerTreeDrawingAreas on the same display
(and in the same process), we'll be sharing a single
RemoteLayerTreeDisplayRefreshMonitor, driven at the effective rate of one of
the drawing areas.
If the first drawing area is trying to hit full frame rate, but rendering takes
too long, it'll run at the fastest rate it can manage. Any other drawing areas
that are using the shared display refresh
monitor will then be throttled to that same rate, even if they could otherwise
run at full speed.
DrawingAreaCoordinatedGraphics is currently working around this by synthesizing
a DisplayID for each drawing area, to prevent DisplayRefreshMonitor sharing.
This change makes WebChromeClient pass the scheduleRenderingUpdate request onto
RemoteLayerTreeDrawingArea directly, so we can avoid falling back to the
RenderingUpdateScheduler/DisplayRefreshMonitor implementation.
RemoteLayerTreeDisplayRefreshMonitor is removed, since it should never be used.
* Source/WebCore/page/ChromeClient.h:
(WebCore::ChromeClient::renderingUpdateFrequencyChanged):
* Source/WebCore/page/Page.cpp:
(WebCore::Page::windowScreenDidChange):
(WebCore::Page::triggerRenderingUpdateForTesting):
(WebCore::Page::timelineControllerMaximumAnimationFrameRateDidChange):
(WebCore::Page::setIsVisuallyIdleInternal):
(WebCore::Page::handleLowModePowerChange):
* Source/WebCore/page/Page.h:
* Source/WebCore/page/RenderingUpdateScheduler.cpp:
(WebCore::RenderingUpdateScheduler::triggerRenderingUpdateForTesting): Deleted.
* Source/WebCore/page/RenderingUpdateScheduler.h:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::scheduleRenderingUpdate):
(WebKit::WebChromeClient::renderingUpdateFrequencyChanged):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebPage/DrawingArea.h:
(WebKit::DrawingArea::scheduleRenderingUpdate):
(WebKit::DrawingArea::renderingUpdateFrequencyChanged):
*
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.h:
Removed.
*
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDisplayRefreshMonitor.mm:
Removed.
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
*
Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
(WebKit::RemoteLayerTreeDrawingArea::createDisplayRefreshMonitor):
(WebKit::RemoteLayerTreeDrawingArea::displayDidRefresh):
(WebKit::RemoteLayerTreeDrawingArea::scheduleRenderingUpdate):
(WebKit::RemoteLayerTreeDrawingArea::renderingUpdateFrequencyChanged):
(WebKit::RemoteLayerTreeDrawingArea::willDestroyDisplayRefreshMonitor): Deleted.
(WebKit::RemoteLayerTreeDrawingArea::adoptDisplayRefreshMonitorsFromDrawingArea):
Deleted.
Canonical link: https://commits.webkit.org/264920@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes