From 990fbc8cdf1229a67f2ee6b91c79b8884b80b7a1 Mon Sep 17 00:00:00 2001 From: bjsylvia Date: Sat, 25 Nov 2023 03:17:10 +0800 Subject: [PATCH] fix(draw): remove LV_LAYER_MAX_MEMORY_USAGE (#4809) Signed-off-by: YanXiaowei Co-authored-by: YanXiaowei --- .devcontainer/__lv_conf.h__ | 3 --- Kconfig | 6 ------ lv_conf_template.h | 3 --- src/draw/lv_draw.c | 38 ++++++++++++----------------------- src/lv_conf_internal.h | 9 --------- tests/src/lv_test_conf_full.h | 1 - 6 files changed, 13 insertions(+), 47 deletions(-) diff --git a/.devcontainer/__lv_conf.h__ b/.devcontainer/__lv_conf.h__ index 9bb90a979..bd8708f48 100644 --- a/.devcontainer/__lv_conf.h__ +++ b/.devcontainer/__lv_conf.h__ @@ -80,9 +80,6 @@ /*Align the start address of draw_buf addresses to this bytes*/ #define LV_DRAW_BUF_ALIGN 4 -/* Max. memory to be used for layers */ -#define LV_LAYER_MAX_MEMORY_USAGE 150 /*[kB]*/ - #define LV_USE_DRAW_SW 1 #if LV_USE_DRAW_SW == 1 /* Set the number of draw unit. diff --git a/Kconfig b/Kconfig index b3c5834f7..ec5eaf3b1 100644 --- a/Kconfig +++ b/Kconfig @@ -174,12 +174,6 @@ menu "LVGL configuration" help Align the start address of draw_buf addresses to this bytes. - config LV_LAYER_MAX_MEMORY_USAGE - int "Max layer memory usage(kB)" - default 150 - help - Max. memory to be used for layers. - config LV_USE_OS int "Default operating system to use" default 0 diff --git a/lv_conf_template.h b/lv_conf_template.h index 00ab1f16f..0dda1f37f 100644 --- a/lv_conf_template.h +++ b/lv_conf_template.h @@ -79,9 +79,6 @@ /*Align the start address of draw_buf addresses to this bytes*/ #define LV_DRAW_BUF_ALIGN 4 -/* Max. memory to be used for layers */ -#define LV_LAYER_MAX_MEMORY_USAGE 150 /*[kB]*/ - #define LV_USE_DRAW_SW 1 #if LV_USE_DRAW_SW == 1 /* Set the number of draw unit. diff --git a/src/draw/lv_draw.c b/src/draw/lv_draw.c index f2e48f099..65bc5d6e2 100644 --- a/src/draw/lv_draw.c +++ b/src/draw/lv_draw.c @@ -27,6 +27,10 @@ **********************/ static bool is_independent(lv_layer_t * layer, lv_draw_task_t * t_check); +static inline uint32_t get_layer_size_kb(uint32_t size_byte) +{ + return size_byte < 1024 ? 1 : size_byte >> 10; +} /********************** * STATIC VARIABLES **********************/ @@ -155,7 +159,6 @@ void lv_draw_dispatch(void) render_running = true; layer = layer->next; } - if(!render_running) { lv_draw_dispatch_request(); } @@ -185,7 +188,7 @@ bool lv_draw_dispatch_layer(struct _lv_display_t * disp, lv_layer_t * layer) int32_t w = lv_area_get_width(&layer_drawn->buf_area); uint32_t layer_size_byte = h * lv_draw_buf_width_to_stride(w, layer_drawn->color_format); - _draw_info.used_memory_for_layers_kb -= layer_size_byte < 1024 ? 1 : layer_size_byte >> 10; + _draw_info.used_memory_for_layers_kb -= get_layer_size_kb(layer_size_byte); LV_LOG_INFO("Layer memory used: %" LV_PRIu32 " kB\n", _draw_info.used_memory_for_layers_kb); lv_draw_buf_free(layer_drawn->buf_unaligned); } @@ -242,27 +245,13 @@ bool lv_draw_dispatch_layer(struct _lv_display_t * disp, lv_layer_t * layer) } /*Assign draw tasks to the draw_units*/ else { - bool layer_ok = true; - if(layer->buf == NULL) { - int32_t h = lv_area_get_height(&layer->buf_area); - int32_t w = lv_area_get_width(&layer->buf_area); - uint32_t layer_size_byte = h * lv_draw_buf_width_to_stride(w, layer->color_format); - - uint32_t kb = layer_size_byte < 1024 ? 1 : layer_size_byte >> 10; - if(_draw_info.used_memory_for_layers_kb + kb > LV_LAYER_MAX_MEMORY_USAGE) { - layer_ok = false; - } - } - - if(layer_ok) { - /*Find a draw unit which is not busy and can take at least one task*/ - /*Let all draw units to pick draw tasks*/ - lv_draw_unit_t * u = _draw_info.unit_head; - while(u) { - int32_t taken_cnt = u->dispatch_cb(u, layer); - if(taken_cnt >= 0) render_running = true; - u = u->next; - } + /*Find a draw unit which is not busy and can take at least one task*/ + /*Let all draw units to pick draw tasks*/ + lv_draw_unit_t * u = _draw_info.unit_head; + while(u) { + int32_t taken_cnt = u->dispatch_cb(u, layer); + if(taken_cnt >= 0) render_running = true; + u = u->next; } } @@ -363,8 +352,7 @@ void * lv_draw_layer_alloc_buf(lv_layer_t * layer) layer->buf = lv_draw_buf_align(layer->buf_unaligned, layer->color_format); - uint32_t kb = layer_size_byte < 1024 ? 1 : layer_size_byte >> 10; - _draw_info.used_memory_for_layers_kb += kb; + _draw_info.used_memory_for_layers_kb += get_layer_size_kb(layer_size_byte); LV_LOG_INFO("Layer memory used: %" LV_PRIu32 " kB\n", _draw_info.used_memory_for_layers_kb); if(lv_color_format_has_alpha(layer->color_format)) { diff --git a/src/lv_conf_internal.h b/src/lv_conf_internal.h index c9238c437..74d576c36 100644 --- a/src/lv_conf_internal.h +++ b/src/lv_conf_internal.h @@ -199,15 +199,6 @@ #endif #endif -/* Max. memory to be used for layers */ -#ifndef LV_LAYER_MAX_MEMORY_USAGE - #ifdef CONFIG_LV_LAYER_MAX_MEMORY_USAGE - #define LV_LAYER_MAX_MEMORY_USAGE CONFIG_LV_LAYER_MAX_MEMORY_USAGE - #else - #define LV_LAYER_MAX_MEMORY_USAGE 150 /*[kB]*/ - #endif -#endif - #ifndef LV_USE_DRAW_SW #ifdef _LV_KCONFIG_PRESENT #ifdef CONFIG_LV_USE_DRAW_SW diff --git a/tests/src/lv_test_conf_full.h b/tests/src/lv_test_conf_full.h index d6a3e0b29..49c391186 100644 --- a/tests/src/lv_test_conf_full.h +++ b/tests/src/lv_test_conf_full.h @@ -1,5 +1,4 @@ #define LV_MEM_SIZE (32 * 1024 * 1024) -#define LV_LAYER_MAX_MEMORY_USAGE (4 * 1024) #define LV_SHADOW_CACHE_SIZE (8 * 1024) #define LV_IMAGE_CACHE_DEF_SIZE 32 #define LV_USE_LOG 1