Update on what happened in WebKit in the week from November 2 to November 10.
This week it's not all fun and games, yet gamepad support gets some polish with reduced latency and support for analog buttons; WebAudio contexts now support choosing outputs; the old compositor gets removed; and anorther flurry of small changes make their way to the new SVG rendering engine.
WebKitGTK 🖥️
Fixed incorrect gamepad button mapping in WebKitGTK, where the North and West facing direction buttons were swapped.
Improved gamepad input latency, reducing delays from up to 50ms down to the 10 to 12ms range, and preventing missed quick button presses.
Cross-Port 🐱
Added support for analog gamepad
buttons when using libmanette.
Fixed a bug that caused
formAssociatedCallback to sometimes fire twice in Safari.
Multimedia 🎥
GStreamer-based multimedia support for WebKit, including (but not limited to) playback, capture, WebAudio, WebCodecs, and WebRTC.
Implemented support for the WebAudio AudioContext.setSinkId() API in the GStreamer multimedia backend.
Graphics 🖼️
Since shipping the new Skia-based compositor enabled by default in September, the team has shipped fixes for a few issues in the 2.54.1 and 2.54.2 releases. The Skia compositor now supports more features than the TextureMapper compositor did, while reducing memory usage and providing better performance.
At this point keeping the TextureMapper code in the source tree did no longer provide any benefit and it was not actively tested, so it was decided to no longer support building TextureMapper to ease maintenance going forward. It has served WebKit well for 16 years.
Fixed a crash in the Layer-Based SVG
Engine (LBSE) that happened when a shape filled or stroked with an SVG
<pattern> got its renderer before the pattern existed. The pattern's image
cache now drops a destroyed shape's entry by itself, and the shape is
registered as a client once the pattern appears, so no stale cache entries are
left behind.
Fixed the composited bounds of accelerated filter
animations, which ignored the blur
outsets of the animated filter because animations running on the compositor
don't trigger style updates. WebKit now uses the largest outsets across all
filter key frames for overlap testing and view transition captures, so a later
sibling that only overlaps the blurred area is composited correctly and no
longer painted below the animated layer
Made SVG fonts obey the font-variant
attribute of <font-face>, so a face
now only matches the variants it lists, following CSS 2 font matching. Text
with small-caps now uses the glyphs of a small-caps face directly instead of
synthesizing scaled-down capitals that these fonts often lack, and normal text
no longer depends on the order in which the faces were registered.
WPE WebKit 📟
WPE Platform API 🧩
New, modern platform API that supersedes usage of libwpe and WPE backends.
Fixed named cursor images being drawn away from the actual pointer location when using the built-in WPEPlatform Wayland implementation.
Infrastructure 🏗️
Replaced the frame cycle with composition-aware
reporting in webkit-sysprof, the
tool that analyzes Sysprof captures
from WebKitGTK and WPE, so frames that the ThreadedCompositor produces on
its own (such as for accelerated animations) are no longer missed. A new
timeline command draws the main
thread and the compositor as “swimlanes” with numbered frames, which makes
dropped frames much easier to track down.
That’s all for this week!