[webkit-changes] [WebKit/WebKit] fa67a2: Schedule rendering via RemoteLayerTreeDrawingArea ...

mattwoodrow noreply at github.com
Tue Jun 6 19:18:54 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: fa67a26252252fec5d3f124b05398ce812cfdffc
      https://github.com/WebKit/WebKit/commit/fa67a26252252fec5d3f124b05398ce812cfdffc
  Author: Matt Woodrow <mattwoodrow at apple.com>
  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




More information about the webkit-changes mailing list