mirror of
https://github.com/lvgl/lvgl.git
synced 2026-06-02 01:18:04 +08:00
fix(sysmon): support starting LVGL without having a display (#5518)
This commit is contained in:
committed by
GitHub
parent
f4267177e6
commit
0b7bf00876
@@ -45,8 +45,6 @@
|
|||||||
* STATIC PROTOTYPES
|
* STATIC PROTOTYPES
|
||||||
**********************/
|
**********************/
|
||||||
|
|
||||||
static void sysmon_backend_init_async_cb(void * user_data);
|
|
||||||
|
|
||||||
#if _USE_PERF_MONITOR
|
#if _USE_PERF_MONITOR
|
||||||
static void perf_update_timer_cb(lv_timer_t * t);
|
static void perf_update_timer_cb(lv_timer_t * t);
|
||||||
static void perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
|
static void perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
|
||||||
@@ -82,16 +80,17 @@ void _lv_sysmon_builtin_init(void)
|
|||||||
lv_subject_init_pointer(&sysmon_mem.subject, &mem_info);
|
lv_subject_init_pointer(&sysmon_mem.subject, &mem_info);
|
||||||
sysmon_mem.timer = lv_timer_create(mem_update_timer_cb, SYSMON_REFR_PERIOD_DEF, &mem_info);
|
sysmon_mem.timer = lv_timer_create(mem_update_timer_cb, SYSMON_REFR_PERIOD_DEF, &mem_info);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lv_async_call(sysmon_backend_init_async_cb, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _lv_sysmon_builtin_deinit(void)
|
void _lv_sysmon_builtin_deinit(void)
|
||||||
{
|
{
|
||||||
lv_async_call_cancel(sysmon_backend_init_async_cb, NULL);
|
|
||||||
#if _USE_PERF_MONITOR
|
#if _USE_PERF_MONITOR
|
||||||
lv_timer_delete(sysmon_perf.timer);
|
lv_timer_delete(sysmon_perf.timer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if _USE_MEM_MONITOR
|
||||||
|
lv_timer_delete(sysmon_mem.timer);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_obj_t * lv_sysmon_create(lv_obj_t * parent)
|
lv_obj_t * lv_sysmon_create(lv_obj_t * parent)
|
||||||
@@ -144,10 +143,24 @@ static void perf_monitor_disp_event_cb(lv_event_t * e)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uint32_t lv_os_get_idle_percent(void);
|
|
||||||
|
|
||||||
static void perf_update_timer_cb(lv_timer_t * t)
|
static void perf_update_timer_cb(lv_timer_t * t)
|
||||||
{
|
{
|
||||||
|
/*Wait for a display*/
|
||||||
|
if(!sysmon_perf.inited && lv_display_get_default()) {
|
||||||
|
lv_display_add_event_cb(lv_display_get_default(), perf_monitor_disp_event_cb, LV_EVENT_ALL, NULL);
|
||||||
|
|
||||||
|
lv_obj_t * obj1 = lv_sysmon_create(lv_layer_sys());
|
||||||
|
lv_obj_align(obj1, LV_USE_PERF_MONITOR_POS, 0, 0);
|
||||||
|
lv_subject_add_observer_obj(&sysmon_perf.subject, perf_observer_cb, obj1, NULL);
|
||||||
|
#if LV_USE_PERF_MONITOR_LOG_MODE
|
||||||
|
lv_obj_add_flag(obj1, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
#endif
|
||||||
|
sysmon_perf.inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!sysmon_perf.inited) return;
|
||||||
|
|
||||||
uint32_t LV_SYSMON_GET_IDLE(void);
|
uint32_t LV_SYSMON_GET_IDLE(void);
|
||||||
|
|
||||||
lv_sysmon_perf_info_t * info = lv_timer_get_user_data(t);
|
lv_sysmon_perf_info_t * info = lv_timer_get_user_data(t);
|
||||||
@@ -212,6 +225,16 @@ static void perf_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
|
|||||||
|
|
||||||
static void mem_update_timer_cb(lv_timer_t * t)
|
static void mem_update_timer_cb(lv_timer_t * t)
|
||||||
{
|
{
|
||||||
|
/*Wait for a display*/
|
||||||
|
if(!sysmon_mem.inited && lv_display_get_default()) {
|
||||||
|
lv_obj_t * obj2 = lv_sysmon_create(lv_layer_sys());
|
||||||
|
lv_obj_align(obj2, LV_USE_MEM_MONITOR_POS, 0, 0);
|
||||||
|
lv_subject_add_observer_obj(&sysmon_mem.subject, mem_observer_cb, obj2, NULL);
|
||||||
|
sysmon_mem.inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!sysmon_mem.inited) return;
|
||||||
|
|
||||||
lv_mem_monitor_t * mem_mon = lv_timer_get_user_data(t);
|
lv_mem_monitor_t * mem_mon = lv_timer_get_user_data(t);
|
||||||
lv_mem_monitor(mem_mon);
|
lv_mem_monitor(mem_mon);
|
||||||
lv_subject_set_pointer(&sysmon_mem.subject, mem_mon);
|
lv_subject_set_pointer(&sysmon_mem.subject, mem_mon);
|
||||||
@@ -234,27 +257,4 @@ static void mem_observer_cb(lv_observer_t * observer, lv_subject_t * subject)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void sysmon_backend_init_async_cb(void * user_data)
|
|
||||||
{
|
|
||||||
LV_UNUSED(user_data);
|
|
||||||
|
|
||||||
#if _USE_PERF_MONITOR
|
|
||||||
lv_display_add_event_cb(lv_display_get_default(), perf_monitor_disp_event_cb, LV_EVENT_ALL, NULL);
|
|
||||||
|
|
||||||
lv_obj_t * obj1 = lv_sysmon_create(lv_layer_sys());
|
|
||||||
lv_obj_align(obj1, LV_USE_PERF_MONITOR_POS, 0, 0);
|
|
||||||
lv_subject_add_observer_obj(&sysmon_perf.subject, perf_observer_cb, obj1, NULL);
|
|
||||||
#if LV_USE_PERF_MONITOR_LOG_MODE
|
|
||||||
lv_obj_add_flag(obj1, LV_OBJ_FLAG_HIDDEN);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if _USE_MEM_MONITOR
|
|
||||||
lv_obj_t * obj2 = lv_sysmon_create(lv_layer_sys());
|
|
||||||
lv_obj_align(obj2, LV_USE_MEM_MONITOR_POS, 0, 0);
|
|
||||||
lv_subject_add_observer_obj(&sysmon_mem.subject, mem_observer_cb, obj2, NULL);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /*LV_USE_SYSMON*/
|
#endif /*LV_USE_SYSMON*/
|
||||||
|
|||||||
@@ -38,11 +38,13 @@ extern "C" {
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
lv_subject_t subject;
|
lv_subject_t subject;
|
||||||
lv_timer_t * timer;
|
lv_timer_t * timer;
|
||||||
|
bool inited;
|
||||||
} lv_sysmon_backend_data_t;
|
} lv_sysmon_backend_data_t;
|
||||||
|
|
||||||
#if LV_USE_PERF_MONITOR
|
#if LV_USE_PERF_MONITOR
|
||||||
typedef struct {
|
typedef struct {
|
||||||
struct {
|
struct {
|
||||||
|
bool inited;
|
||||||
uint32_t refr_start;
|
uint32_t refr_start;
|
||||||
uint32_t refr_interval_sum;
|
uint32_t refr_interval_sum;
|
||||||
uint32_t refr_elaps_sum;
|
uint32_t refr_elaps_sum;
|
||||||
|
|||||||
Reference in New Issue
Block a user