perf: reduce software rendering overhead for NVIDIA+Wayland

Targeted optimizations for the DMABuf-disabled rendering path where
every frame is software-composited:

- Replace infinite CSS scroll-text animation with transition-based
  cycle that only repaints during active scroll, not during pauses
- Remove CSS mask-image on scrolling text (mask + animation was the
  single most expensive continuous repaint)
- Replace wa-icon in track rows with inline SVG — eliminates 30-50
  shadow DOM trees (each with SVG fetch/parse) during scroll
- Remove hover transitions on album cards, artist cards, genre cards,
  fav icons, queue remove buttons — each transition was causing
  per-frame software repaints
- Use visibility:hidden instead of opacity:0 for queue remove button
  (binary switch vs per-frame alpha blend)
- Add decoding=async to now-playing cover art images (prevents
  main-thread blocking during image decode on track change)
- Add contain:strict to fixed-height track rows (33px) and queue
  items (49px) — browser skips size contribution calculations
This commit is contained in:
2026-03-15 09:00:59 -04:00
parent 3bf7852e1d
commit 199c91013f
6 changed files with 116 additions and 49 deletions
@@ -319,6 +319,7 @@ export class QueuePanel
box-sizing: border-box;
height: 49px;
overflow: hidden;
contain: strict;
}
.track-item:hover {
@@ -384,12 +385,11 @@ export class QueuePanel
padding: 4px;
display: flex;
align-items: center;
opacity: 0;
transition: opacity 0.15s;
visibility: hidden;
}
.track-item:hover .remove-button {
opacity: 1;
visibility: visible;
}
.remove-button:hover {