perf(P4): Nur bei echter Änderung neu zeichnen (1.9.2) #71

Merged
thomas merged 1 commits from perf/nur-bei-aenderung-neu-zeichnen into main 2026-09-03 02:17:21 +02:00
Owner

Die erweiterte Messung war eindeutig: "1 Bereich, 100 % der Fläche" - LVGL zeichnete bei jeder Zustandsmeldung den kompletten Bildschirm neu, also einmal pro Sekunde 240-300 ms lang. Kein Rendering-Tempoproblem, sondern massiv zu viel Invalidierung.

lv_label_set_text invalidiert den Label-Bereich unbedingt, auch bei identischem Text; lv_obj_set_style_text_color ebenso. Auf dem Dashboard wurden pro Sekunde Werte quer über den Bildschirm gesetzt (Uhr oben, Temperaturen Mitte, Bezugswerte unten) - LVGL joint die Bereiche, und die Bounding-Box ist die ganze Fläche.

  • Neue Helfer label_fmt_if_changed() und label_color_if_changed() neben dem vorhandenen label_set_if_changed().
  • Alle 13 zyklischen Textzuweisungen und alle 10 Farbzuweisungen in ui_update darauf umgestellt.

Da sich Temperaturen selten um ein Zehntelgrad ändern und Sollwerte praktisch nie, entfallen die meisten Neuzeichnungen ganz.

Beide Panel-Varianten mit arduino-cli gegengebaut.

🤖 Generated with Claude Code

Die erweiterte Messung war eindeutig: **"1 Bereich, 100 % der Fläche"** - LVGL zeichnete bei jeder Zustandsmeldung den kompletten Bildschirm neu, also einmal pro Sekunde 240-300 ms lang. Kein Rendering-Tempoproblem, sondern massiv zu viel Invalidierung. `lv_label_set_text` invalidiert den Label-Bereich unbedingt, auch bei identischem Text; `lv_obj_set_style_text_color` ebenso. Auf dem Dashboard wurden pro Sekunde Werte quer über den Bildschirm gesetzt (Uhr oben, Temperaturen Mitte, Bezugswerte unten) - LVGL joint die Bereiche, und die Bounding-Box ist die ganze Fläche. - Neue Helfer `label_fmt_if_changed()` und `label_color_if_changed()` neben dem vorhandenen `label_set_if_changed()`. - Alle 13 zyklischen Textzuweisungen und alle 10 Farbzuweisungen in `ui_update` darauf umgestellt. Da sich Temperaturen selten um ein Zehntelgrad ändern und Sollwerte praktisch nie, entfallen die meisten Neuzeichnungen ganz. Beide Panel-Varianten mit arduino-cli gegengebaut. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
thomas added 1 commit 2026-09-03 02:17:20 +02:00
Die erweiterte Messung war eindeutig: "1 Bereich, 100 % der Fläche" - LVGL
zeichnete bei jeder Zustandsmeldung den kompletten Bildschirm neu, also
einmal pro Sekunde 240-300 ms lang. Kein Rendering-Tempoproblem, sondern
massiv zu viel Invalidierung.

lv_label_set_text invalidiert den Label-Bereich unbedingt, auch bei
identischem Text; lv_obj_set_style_text_color ebenso. Auf dem Dashboard
wurden pro Sekunde Werte quer über den Bildschirm gesetzt (Uhr oben,
Temperaturen Mitte, Bezugswerte unten) - LVGL joint die Bereiche, und die
Bounding-Box ist die ganze Fläche.

- Neue Helfer label_fmt_if_changed() und label_color_if_changed() neben dem
  vorhandenen label_set_if_changed().
- Alle 13 zyklischen Textzuweisungen und alle 10 Farbzuweisungen in
  ui_update darauf umgestellt.

Da sich Temperaturen selten um ein Zehntelgrad ändern und Sollwerte
praktisch nie, entfallen die meisten Neuzeichnungen ganz.

Beide Panel-Varianten mit arduino-cli gegengebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
thomas merged commit a91c792491 into main 2026-09-03 02:17:21 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: thomas/Dual-PID#71