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

Reply via email to