Update on what happened in WebKit in the week from August 17 to August 24.
Another periodical packed with updates on the graphics, multimedia, and tooling fronts. Which sure has to do with preparing for the upcoming 2.54.x release series, that now has release candidates published. Also, do not miss a new stable release being published with fixes for security issues, and make sure to update.
Cross-Port 🐱
Extended the webkit-sysprof analyze
tool cover the remaining marks emitted along the rendering pipeline, from
RenderTreeBuild and CompositingUpdate through FinalizeRenderingUpdate,
RenderLayerTree and WaitForCompositionCompletion down to the individual
tile marks, pulling the tile count and the dirty region out of the mark
messages as statistics next to the durations. The statistics tables also gained
mean and median columns, so a captured trace now shows where the time in a
frame actually goes.
Fixed test
fast/canvas/canvas-composite-text-alpha.html, and improved the state of
several other tests which relied on setTimeout().
Implemented moving steps for
<option> elements.
Add support for asynchronous scrolling with touch events.
Touch events are now dispatched to the EventDispatcher thread in the Web
Process, enabling smooth scrolling even when the main thread is busy.
Additionally, this change fixed a bug where precise scrolling delta wheel
events, dispatched by touchpads, failed to trigger asynchronous scrolling.
Fixed several accessibility related tests and added support for missing keywords in the GLib-based ports (GTK & WPE):
Multimedia 🎥
GStreamer-based multimedia support for WebKit, including (but not limited to) playback, capture, WebAudio, WebCodecs, and WebRTC.
Ensure that multimedia on pages restored from the back-forward cache is correctly processed without errors or reloading.
The robustness level is now queried from the CDM (if supported) when using Encrypted Media Extensions (EME).
Added video rendering support for Qualcomm hardware-accelerated decoders when the Skia compositor is in use, complementing the earlier TextureMapper-only support that left such videos blank with the new compositor.
Video frame processing now relies on the driver's implicit YUV to RGB conversion, steered by the colour space and sample range hints taken from the frame colorimetry, with a hint-free import as fallback.
Graphics 🖼️
Fixed how <feImage> paints its referenced
element in the Layer-Based SVG Engine
(LBSE), which still used a helper written for the legacy SVG engine, where SVG
content never had layers, so it used to paint renderers directly and skipped
any child that owns a RenderLayer under LBSE, silently dropping its
opacity, mask, filter or 3D transform. The referenced content is now painted
through the layer tree, the way <mask>,<clipPath>, <pattern> and
<marker> content already is.
Made SVG mask no longer force a
RenderLayer in the Layer-Based SVG
Engine (LBSE), mirroring the earlier change for
clip-path. A mask is now applied
during painting by SVGNonLayerClippingAndMaskingScope, which opens one
transparency layer capturing the renderer's foreground and composites the mask
over it afterwards, and which also absorbed the clips that cannot be expressed
as a path. A container with a mask keeps its layer, since the mask covers its
whole subtree, while a leaf stays layer-free. This further reduces the layer
overhead that has been holding LBSE back against the legacy SVG engine.
Skipped scroll coordination for composited layers that have no scrolling role, where the per-layer update previously walked every branch to detach roles the layer had never registered for, only to hand back the parent node ID unchanged. Cutting that work out shortens every compositing update, which matters for composition-heavy workloads.
Fixed rendering of an outermost <svg> with an empty
viewBox in the Layer-Based SVG
Engine (LBSE), which per the SVG
specification should
disable painting when the width or height is zero, matching what the legacy
engine already did.
Skipped scroll coordination work for layers that have no scrolling
role during compositing updates, where
updateScrollCoordinationForLayer previously walked every branch to detach
roles the layer had never registered for, only to hand back the unchanged
parent node ID.
Releases 📦️
WebKitGTK
2.52.6 and
WPE WebKit 2.52.6 have
been released, including a number of fixes for security issues covered in the
accompanying security advisory WSA-2026-0005
(GTK,
WPE). It is recommended
for everybody to update to these stable releases.
Stabilization for the upcoming 2.54.x release series for both the GTK and WPE ports is ongoing, with the first stable release, 2.54.0, expected around mid-September 2026. In the meantime release candidates WebKitGTK 2.53.91 and WPE WebKit 2.53.91 have been released.
Those interested in previewing the work done by the team in the last half year, including the new Skia-based compositor that is expected to eventually replace the aging TextureMapper, may want to give them a try and report any issues found in Bugzilla.
That’s all for this week!