perf(l2): screen sent by DMA while the next part is drawn

The panel takes each 24-line band by DMA while LVGL draws the next one
into the other buffer (two 15 KB buffers in internal RAM; LovyanGFX's
4092-byte DMA descriptors leave PSRAM unaligned for the S3's DMA, which
showed as shifted and smeared bands). LVGL draws in the panel's byte
order, and so do map tiles and the frozen screen under a popup, so
nothing is swapped on the way out. Full frames ~10-25% faster (page1
19.9 -> 14.7 ms, Home 21.4 -> 18.2 ms). Without the internal RAM the
screen is sent as before. The arduino2 env keeps the old way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-10-01 20:56:13 +02:00
co-authored by Claude Opus 5.5
parent ca5e66a4a1
commit 0a07dc3deb
5 changed files with 123 additions and 15 deletions
+2
View File
@@ -83,6 +83,7 @@ build_flags =
-D GPS_SKYVIEW ; satellites / signal / DOPs for the GPS screen (helpers/sensors/GpsSky.h)
-D ESP32_LITTLEFS ; internal flash as LittleFS, not SPIFFS (helpers/esp32/InternalFS.h)
-D ENABLE_SCREENSHOT ; the screen over USB for the site's tools (RGB565, UITask::captureFrame)
-DUI_FLUSH_DMA ; the panel fed by DMA while LVGL draws, in its byte order (ui-lvgl/LvglPort.h)
build_src_filter = ${Wio_Tracker_L2.build_src_filter}
+<helpers/esp32/*.cpp>
+<helpers/ui/LGFXDisplay.cpp>
@@ -111,6 +112,7 @@ lib_deps =
[env:Wio_Tracker_L2_companion_solo_lvgl_arduino2]
extends = env:Wio_Tracker_L2_companion_solo_lvgl
platform = ${esp32_base.platform}
build_unflags = -DARDUINO_USB_MODE=1 -DUI_FLUSH_DMA ; DMA flush untried on ESP-IDF 4.4
lib_deps =
${Wio_Tracker_L2.lib_deps}
densaugeo/base64 @ ~1.4.0