Skip to content

Release 0.9.4 dev.9

piggei edited this page Oct 3, 2026 · 1 revision

Release 0.9.4-dev.9

Release: 0.9.4
Build: 0.9.4-dev.9
Stable behavioral baseline: 0.9.3
Target: Waveshare ESP32-S3-RGB-Matrix / WLED 17.0.0-devV5

Purpose

Dev.9 is a refactor-only preparation build. It keeps the dev.7 whole-file GIF source-staging policy and the dev.8 corrected telemetry unchanged while moving active stage ownership, guards and counters into IDotMatrixGifSourceStage. No persistent PSRAM source reuse, prefetch or Carousel preload is enabled yet.

Qualified baseline inherited from dev.8

The reported dev.8 Carousel/GIF soak reached about 22 minutes with:

gifStage=state:psram bytes:1981 peak:173821 attempts:266 ok:266 fallback:0
psram=total:15269888 free:15116612 minFree:14942920 peakUsed:326968 largest:14942208 minLargest:14680064

All PSRAM snapshot invariants passed. The current largest block recovered to 14,942,208 bytes after the temporary 256 KiB low-water excursion, and no persistent staging-related leak or fragmentation was observed in the reported window.

Code change

  • adds IDotMatrixGifSourceStage.h/.cpp;
  • moves the existing staged-buffer lifetime and gifStage counters into that component;
  • preserves the 2 MiB maximum, 4 MiB reserve, 4096-byte chunk copy and scheduler yield;
  • preserves AnimatedGIF callback semantics and automatic LittleFS fallback;
  • preserves release order: close AnimatedGIF first, release the stage immediately afterward;
  • keeps all other targets and the no-PSRAM frame-cache path unchanged.

Qualification

Host/package regression must pass. A short real-device Carousel/GIF smoke is required because the staging code was structurally moved. A new long soak is not required solely for this refactor if repeated stage/release transitions, telemetry invariants, playback timing, AudioReactive and Matrix Auto Rotation remain clean.

16x16 -> 64x64 and 32x32 -> 64x64 Waveshare scaling remain separately pending.

Clone this wiki locally