From 4cb5ab4a039aceccd450eb901e7dfc4b4cf57fa2 Mon Sep 17 00:00:00 2001 From: Themba Dube Date: Tue, 10 Dec 2019 20:09:40 -0500 Subject: [PATCH] Suspend the refresh task if a refresh is not necessary --- src/lv_core/lv_refr.c | 8 ++++++++ src/lv_core/lv_refr.h | 2 ++ src/lv_hal/lv_hal_disp.c | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lv_core/lv_refr.c b/src/lv_core/lv_refr.c index d8d4ce6c0..141ac5a07 100644 --- a/src/lv_core/lv_refr.c +++ b/src/lv_core/lv_refr.c @@ -131,6 +131,8 @@ void lv_inv_area(lv_disp_t * disp, const lv_area_t * area_p) lv_area_copy(&disp->inv_areas[disp->inv_p], &scr_area); } disp->inv_p++; + lv_task_set_prio(disp->refr_task, LV_REFR_TASK_PRIO); + dprintf("refr task enabled\n"); } } @@ -164,6 +166,12 @@ void lv_disp_refr_task(lv_task_t * task) uint32_t start = lv_tick_get(); + /* Ensure the task does not run again automatically. + * This is done before refreshing in case refreshing invalidates something else. + */ + lv_task_set_prio(task, LV_TASK_PRIO_OFF); + dprintf("refr task disabled\n"); + disp_refr = task->user_data; lv_refr_join_area(); diff --git a/src/lv_core/lv_refr.h b/src/lv_core/lv_refr.h index 8c0ed03ed..35f2791c8 100644 --- a/src/lv_core/lv_refr.h +++ b/src/lv_core/lv_refr.h @@ -20,6 +20,8 @@ extern "C" { * DEFINES *********************/ +#define LV_REFR_TASK_PRIO LV_TASK_PRIO_MID + /********************** * TYPEDEFS **********************/ diff --git a/src/lv_hal/lv_hal_disp.c b/src/lv_hal/lv_hal_disp.c index 11a3bbcb2..db5461447 100644 --- a/src/lv_hal/lv_hal_disp.c +++ b/src/lv_hal/lv_hal_disp.c @@ -147,7 +147,7 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver) disp_def = disp_def_tmp; /*Revert the default display*/ /*Create a refresh task*/ - disp->refr_task = lv_task_create(lv_disp_refr_task, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, disp); + disp->refr_task = lv_task_create(lv_disp_refr_task, LV_DISP_DEF_REFR_PERIOD, LV_REFR_TASK_PRIO, disp); LV_ASSERT_MEM(disp->refr_task); if(disp->refr_task == NULL) return NULL;