System Monitor (sysmon)¶
The System Monitor module provides real-time monitoring of system performance metrics directly on your display. It supports both performance monitoring (CPU usage and FPS) and memory monitoring (used memory and fragmentation).
Dependencies¶
Requires
LV_USE_LABEL = 1
in lv_conf.hRequires
LV_USE_OBSERVER = 1
in lv_conf.hRequires
LV_USE_SYSMON = 1
in lv_conf.h
Usage¶
Configuration¶
Enable in lv_conf.h
:
/* Main sysmon enable */
#define LV_USE_SYSMON 1
/* Performance monitor (CPU% and FPS) */
#define LV_USE_PERF_MONITOR 1
/* Memory monitor (used + fragmentation) */
#define LV_USE_MEM_MONITOR 1
/* Optional: refresh period in ms */
#define LV_SYSMON_REFR_PERIOD_DEF 300
/* Optional: log to console instead of screen */
#define LV_USE_PERF_MONITOR_LOG_MODE 0
Creating Monitors¶
/* Create generic monitor */
lv_obj_t * sysmon = lv_sysmon_create(lv_display_get_default());
/* Create performance monitor */
lv_sysmon_show_performance(NULL); /* NULL = default display */
/* Create memory monitor */
lv_sysmon_show_memory(NULL);
Performance Monitor¶
Tracks: - FPS (Frames Per Second) - CPU usage (%) - Render time (ms) - Flush time (ms) - Self CPU usage (%) if enabled
Display format: .. code-block:
32 FPS, 45% CPU
8 ms
Where: - Line 1: FPS, Total CPU% - Line 2: Total time (Render | Flush)
Pause and Resume¶
lv_sysmon_performance_pause(disp) pauses the perf monitor.
lv_sysmon_performance_resume(disp) resumes the perf monitor.
Memory Monitor¶
Displays: - Current memory usage (kB and %) - Peak memory usage (kB) - Fragmentation (%)
Display format: .. code-block:
24.8 kB (76%)
32.4 kB max, 18% frag.
Positioning¶
Configure positions in lv_conf.h:
/* Top-right corner */
#define LV_USE_PERF_MONITOR_POS LV_ALIGN_TOP_RIGHT
/* Bottom-right corner */
#define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT
Implementation Details¶
Initialization¶
Maintains:
- Global memory monitor (sysmon_mem
)
- Per-display performance structures
Performance Measurement¶
Event-based collection:
Event |
Measurement |
---|---|
LV_EVENT_REFR_START |
Refresh interval start |
LV_EVENT_REFR_READY |
Record refresh duration |
LV_EVENT_RENDER_START |
Render time start |
LV_EVENT_RENDER_READY |
Record render duration |
LV_EVENT_FLUSH_* |
Measure flush operations |
Timers¶
Performance:
perf_update_timer_cb
Memory:
mem_update_timer_cb
Default period: 300ms (
LV_SYSMON_REFR_PERIOD_DEF
)