Branch: refs/heads/webkitglib/2.40
Home: https://github.com/WebKit/WebKit
Commit: 90e92d2420f19938b3f5299080f9ded2da6fde6f
https://github.com/WebKit/WebKit/commit/90e92d2420f19938b3f5299080f9ded2da6fde6f
Author: Žan Doberšek <[email protected]>
Date: 2023-03-03 (Fri, 03 Mar 2023)
Changed paths:
M Source/WebCore/page/scrolling/nicosia/ScrollingTreeNicosia.cpp
M Source/WebCore/page/scrolling/nicosia/ScrollingTreeNicosia.h
M
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp
M
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h
M
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp
M
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h
M Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp
Log Message:
-----------
Cherry-pick 261124@main (06b9ec1834d2).
https://bugs.webkit.org/show_bug.cgi?id=252467
[CoordinatedGraphics] Provide scheduled display-update events for better
scrolling handling
https://bugs.webkit.org/show_bug.cgi?id=252467
Reviewed by Carlos Garcia Campos.
In ThreadedCompositor, a timer is established on the composition thread
that is
used to mimic display updates at the desired update frequency. This is
necessary
in order to provide opportunities for update producers like the scrolling
thread
to actually enact the desired composition changes, like scrolling,
independently
of the main thread.
The timer is put on the composition thread, matching the compositing-thread
update timer in priority. Its delay is based on the established frequency
of the
display updates.
ThreadedCompositor::displayUpdateFired() method is added and is dispatched
upon
every firing of the timer. It notifies the scrolling thread(s) for the given
display ID through the EventDispatcher instance on the WebProcess singleton,
and the next firing of the timer is then scheduled.
When ThreadedCompositor enters into the composition phase, the display
update
timer is stopped, and the displayUpdateFired() dispatcher is invoked
manually
when the frame-complete signal is returned from the embedder's environment.
This
allows aligning the display update timer with the environment's vsync
signals
without disturbing the composition itself.
The target update frequency logic is pulled from
ThreadedDisplayRefreshMonitor
into ThreadedCompositor, with the desired DisplayUpdate object now also
kept in
that class. In order for ThreadedDisplayRefreshMonitor to use a sensible
DisplayUpdate object for each of its own dispatches, the DisplayUpdate
object
is passed through the requiresDisplayRefreshCallback() method to the
monitor,
where it's then stored for next invocation on the main thread, if it occurs.
ScrollingTreeNicosia::applyLayerPositionsInternal() override is provided,
establishing an update scope when running on the scrolling thread. This will
cause the applied positions to actually go through composition whenever the
scrolling is being handled on the scrolling thread, meaning outside of the
usual
update process.
* Source/WebCore/page/scrolling/nicosia/ScrollingTreeNicosia.cpp:
(WebCore::ScrollingTreeNicosia::applyLayerPositionsInternal):
* Source/WebCore/page/scrolling/nicosia/ScrollingTreeNicosia.h:
*
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
(WebKit::m_displayRefreshMonitor):
(WebKit::ThreadedCompositor::renderLayerTree):
(WebKit::ThreadedCompositor::sceneUpdateFinished):
(WebKit::ThreadedCompositor::frameComplete):
(WebKit::ThreadedCompositor::targetRefreshRateDidChange):
(WebKit::ThreadedCompositor::displayUpdateFired):
*
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
*
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.cpp:
(WebKit::ThreadedDisplayRefreshMonitor::ThreadedDisplayRefreshMonitor):
(WebKit::ThreadedDisplayRefreshMonitor::requiresDisplayRefreshCallback):
(WebKit::ThreadedDisplayRefreshMonitor::invalidate):
(WebKit::ThreadedDisplayRefreshMonitor::displayRefreshCallback):
(WebKit::ThreadedDisplayRefreshMonitor::setTargetRefreshRate): Deleted.
*
Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedDisplayRefreshMonitor.h:
* Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
(WebKit::LayerTreeHost::displayDidRefresh):
Canonical link: https://commits.webkit.org/261124@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes