Branch: refs/heads/webkitglib/2.54
Home: https://github.com/WebKit/WebKit
Commit: d88d1024d30f00812aa271c48d23dc27234e645e
https://github.com/WebKit/WebKit/commit/d88d1024d30f00812aa271c48d23dc27234e645e
Author: Devin Rousso <[email protected]>
Date: 2026-09-23 (Wed, 23 Sep 2026)
Changed paths:
A
LayoutTests/platform/gtk/non-compositing/reparent-view-without-damage-expected.txt
A LayoutTests/platform/gtk/non-compositing/reparent-view-without-damage.html
A LayoutTests/platform/gtk/reparent-view-without-damage-expected.txt
A LayoutTests/platform/gtk/reparent-view-without-damage.html
A LayoutTests/platform/gtk/resources/reparent-view-without-damage.js
M Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
M Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.cpp
M Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.h
M
Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphicsGLib.cpp
M
Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphicsGLib.h
M
Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/NonCompositedFrameRenderer.cpp
M Source/WebKit/WebProcess/WebPage/DrawingArea.messages.in
M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/glib/TestWebKitWebView.cpp
M Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp
Log Message:
-----------
Cherry-pick 321558@main (99fe659f25c8).
https://bugs.webkit.org/show_bug.cgi?id=323978
[GTK] skip non-composited frames without damage
https://bugs.webkit.org/show_bug.cgi?id=323978
Reviewed by Carlos Alberto Lopez Perez.
GTK can still (re)present frames even after `requestAnimationFrame`
callbacks with no rendering changes.
Removing that waste also exposes cases where GTK loses its displayed image
without any WebCore damage.
*
Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/NonCompositedFrameRenderer.cpp:
(WebKit::NonCompositedFrameRenderer::updateRendering):
Skipping unnecessary frames must not stop animation callbacks or strand
callers waiting for an explicit repaint.
* Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.h:
* Source/WebKit/UIProcess/gtk/AcceleratedBackingStore.cpp:
(WebKit::AcceleratedBackingStore::realize):
(WebKit::AcceleratedBackingStore::unrealize):
Removing and reinserting a view in one callback can coalesce visibility
changes (i.e. `resume` may never run).
Recovery must follow actual buffer loss without requesting another frame
when one is already pending.
* Source/WebKit/WebProcess/WebPage/DrawingArea.messages.in:
*
Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphicsGLib.h:
*
Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphicsGLib.cpp:
(WebKit::DrawingAreaCoordinatedGraphics::didDiscardBackingStore): Added.
The UIProcess knows when GTK lost the image even though the WebProcess owns
damage and rendering.
The missing picture requires full recovery, including when painting was
suspended.
* Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseSnapshotFromWidget):
GTK events can invalidate the allocation during reparenting and attempting
to snapshot that state can cause a null PNG data dereference.
*
LayoutTests/platform/gtk/non-compositing/reparent-view-without-damage.html:
Added.
*
LayoutTests/platform/gtk/non-compositing/reparent-view-without-damage-expected.txt:
Added.
* LayoutTests/platform/gtk/reparent-view-without-damage.html: Added.
* LayoutTests/platform/gtk/reparent-view-without-damage-expected.txt: Added.
* LayoutTests/platform/gtk/resources/reparent-view-without-damage.js: Added.
* Tools/WebKitTestRunner/gtk/TestControllerGtk.cpp:
(WTR::TestController::takeViewPortSnapshot):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/glib/TestWebKitWebView.cpp:
(PresentationWebViewTest): Added.
(PresentationWebViewTest::PresentationWebViewTest): Added.
(PresentationWebViewTest::~PresentationWebViewTest): Added.
(PresentationWebViewTest::waitForColor): Added.
(PresentationWebViewTest::waitForNextFrame): Added.
(PresentationWebViewTest::waitForAnimationFrames): Added.
(PresentationWebViewTest::assertAnimationFramesWithoutDamage): Added.
(PresentationWebViewTest::loadPageForReparenting): Added.
(AcceleratedPresentationWebViewTest): Added.
(AcceleratedPresentationWebViewTest::AcceleratedPresentationWebViewTest):
Added.
(testWebViewPresentationWithoutDamage): Added.
(testWebViewPresentationAfterReparentToNewWindow): Added.
(testWebViewPresentationAfterRapidReparent): Added.
(testWebViewPresentationAfterReparentDuringLoad): Added.
(testWebViewCloseAfterReparent): Added.
(beforeAll):
Canonical link: https://commits.webkit.org/321558@main
Canonical link: https://commits.webkit.org/317695.345@webkitglib/2.54
Commit: 9cf6fd3c6d9e8d66a677db8e02c4234079ac8396
https://github.com/WebKit/WebKit/commit/9cf6fd3c6d9e8d66a677db8e02c4234079ac8396
Author: Nikolas Zimmermann <[email protected]>
Date: 2026-09-23 (Wed, 23 Sep 2026)
Changed paths:
M Source/WebCore/platform/graphics/skia/SkiaBackingStore.cpp
Log Message:
-----------
Cherry-pick 321493@main (9a32d7b70a01).
https://bugs.webkit.org/show_bug.cgi?id=324631
[GTK][WPE] Do not rasterize the part of a tile that the clip drops
https://bugs.webkit.org/show_bug.cgi?id=324631
Reviewed by Carlos Garcia Campos.
A backing store draws each tile as one quad, at the full size of the tile.
The
clip then throws away the parts that are not visible, but the rasterizer has
already filled them.
In a normal frame this costs almost nothing, because a tile is about as
large as
the clip. It costs a lot when a subtree is painted into a surface that
covers
one layer only, with the layer transform on the canvas.
Cut the quad down to the clip before drawing it, and cut the source rect the
same way. A tile that already fits inside the clip is drawn as before.
* Source/WebCore/platform/graphics/skia/SkiaBackingStore.cpp:
(WebCore::clipTileToBounds):
(WebCore::SkiaBackingStore::paintToCanvas):
(WebCore::SkiaBackingStore::appendImageSetEntries const):
Canonical link: https://commits.webkit.org/321493@main
Canonical link: https://commits.webkit.org/317695.346@webkitglib/2.54
Compare: https://github.com/WebKit/WebKit/compare/14ef410d5d74...9cf6fd3c6d9e
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications