|
The desktop shell's recurring 100% CPU spin is a Qt bug set off by the
volume OSD. Its grain Canvas called createImageData on every paint, and
Qt 6.11 subtracts that pixel buffer from the V4 unmanaged-heap counter
without having added it. The first GC after an OSD show wrapped the
size_t counter, and from then on every JS allocation ran a full GC until
a restart. The OSD shows on volume keys, track changes and resume, which
is why the spin followed all three.
Found by running each always-on unit of the desktop in its own qs with
GC stats: only the sound module wrapped, 3 s after a resume, and a
volume nudge reproduced it on demand. Qt's qml tool with a bare Canvas
confirms it is createImageData alone: 17,856 of 17,856 GCs wrapped, the
same canvas drawing with fillRect 0 of 5. With the grain removed, 8 OSD
shows under forced GCs left the counter intact.
The grain was alpha 14/255, so the OSD looks nearly the same. vram.sh's
comment blamed the fdinfo parse for the underflow; corrected, and the
lesson is in AGENTS.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|