mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-20 21:35:19 +08:00
feat(vg_lite): optimize resource reference count management (#7809)
Arduino Lint / lint (push) Waiting to run
MicroPython CI / Build esp32 port (push) Waiting to run
MicroPython CI / Build rp2 port (push) Waiting to run
MicroPython CI / Build stm32 port (push) Waiting to run
MicroPython CI / Build unix port (push) Waiting to run
C/C++ CI / Build OPTIONS_16BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_24BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_FULL_32BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_NORMAL_8BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_SDL - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_VG_LITE - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_16BIT - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_16BIT - gcc - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_24BIT - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_24BIT - gcc - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_FULL_32BIT - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_FULL_32BIT - gcc - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_VG_LITE - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_VG_LITE - gcc - Windows (push) Waiting to run
C/C++ CI / Build ESP IDF ESP32S3 (push) Waiting to run
C/C++ CI / Run tests with 32bit build (push) Waiting to run
C/C++ CI / Run tests with 64bit build (push) Waiting to run
BOM Check / bom-check (push) Waiting to run
Verify that lv_conf_internal.h matches repository state / verify-conf-internal (push) Waiting to run
Verify the widget property name / verify-property-name (push) Waiting to run
Verify code formatting / verify-formatting (push) Waiting to run
Build docs / build-and-deploy (push) Waiting to run
Test API JSON generator / Test API JSON (push) Waiting to run
Check Makefile / Build using Makefile (push) Waiting to run
Check Makefile for UEFI / Build using Makefile for UEFI (push) Waiting to run
Port repo release update / run-release-branch-updater (push) Waiting to run
Verify Kconfig / verify-kconfig (push) Waiting to run
Arduino Lint / lint (push) Waiting to run
MicroPython CI / Build esp32 port (push) Waiting to run
MicroPython CI / Build rp2 port (push) Waiting to run
MicroPython CI / Build stm32 port (push) Waiting to run
MicroPython CI / Build unix port (push) Waiting to run
C/C++ CI / Build OPTIONS_16BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_24BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_FULL_32BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_NORMAL_8BIT - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_SDL - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_VG_LITE - Ubuntu (push) Waiting to run
C/C++ CI / Build OPTIONS_16BIT - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_16BIT - gcc - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_24BIT - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_24BIT - gcc - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_FULL_32BIT - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_FULL_32BIT - gcc - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_VG_LITE - cl - Windows (push) Waiting to run
C/C++ CI / Build OPTIONS_VG_LITE - gcc - Windows (push) Waiting to run
C/C++ CI / Build ESP IDF ESP32S3 (push) Waiting to run
C/C++ CI / Run tests with 32bit build (push) Waiting to run
C/C++ CI / Run tests with 64bit build (push) Waiting to run
BOM Check / bom-check (push) Waiting to run
Verify that lv_conf_internal.h matches repository state / verify-conf-internal (push) Waiting to run
Verify the widget property name / verify-property-name (push) Waiting to run
Verify code formatting / verify-formatting (push) Waiting to run
Build docs / build-and-deploy (push) Waiting to run
Test API JSON generator / Test API JSON (push) Waiting to run
Check Makefile / Build using Makefile (push) Waiting to run
Check Makefile for UEFI / Build using Makefile for UEFI (push) Waiting to run
Port repo release update / run-release-branch-updater (push) Waiting to run
Verify Kconfig / verify-kconfig (push) Waiting to run
Signed-off-by: pengyiqiang <pengyiqiang@xiaomi.com> Co-authored-by: pengyiqiang <pengyiqiang@xiaomi.com>
This commit is contained in:
@@ -20,7 +20,9 @@
|
||||
**********************/
|
||||
|
||||
struct _lv_vg_lite_pending_t {
|
||||
lv_array_t objs;
|
||||
lv_array_t * arr_act;
|
||||
lv_array_t arr_1;
|
||||
lv_array_t arr_2;
|
||||
lv_vg_lite_pending_free_cb_t free_cb;
|
||||
void * user_data;
|
||||
};
|
||||
@@ -45,7 +47,9 @@ lv_vg_lite_pending_t * lv_vg_lite_pending_create(size_t obj_size, uint32_t capac
|
||||
{
|
||||
lv_vg_lite_pending_t * pending = lv_malloc_zeroed(sizeof(lv_vg_lite_pending_t));
|
||||
LV_ASSERT_MALLOC(pending);
|
||||
lv_array_init(&pending->objs, capacity_default, obj_size);
|
||||
lv_array_init(&pending->arr_1, capacity_default, obj_size);
|
||||
lv_array_init(&pending->arr_2, capacity_default, obj_size);
|
||||
pending->arr_act = &pending->arr_1;
|
||||
return pending;
|
||||
}
|
||||
|
||||
@@ -53,7 +57,8 @@ void lv_vg_lite_pending_destroy(lv_vg_lite_pending_t * pending)
|
||||
{
|
||||
LV_ASSERT_NULL(pending);
|
||||
lv_vg_lite_pending_remove_all(pending);
|
||||
lv_array_deinit(&pending->objs);
|
||||
lv_array_deinit(&pending->arr_1);
|
||||
lv_array_deinit(&pending->arr_2);
|
||||
lv_memzero(pending, sizeof(lv_vg_lite_pending_t));
|
||||
lv_free(pending);
|
||||
}
|
||||
@@ -71,7 +76,7 @@ void lv_vg_lite_pending_add(lv_vg_lite_pending_t * pending, void * obj)
|
||||
{
|
||||
LV_ASSERT_NULL(pending);
|
||||
LV_ASSERT_NULL(obj);
|
||||
lv_array_push_back(&pending->objs, obj);
|
||||
lv_array_push_back(pending->arr_act, obj);
|
||||
}
|
||||
|
||||
void lv_vg_lite_pending_remove_all(lv_vg_lite_pending_t * pending)
|
||||
@@ -79,17 +84,23 @@ void lv_vg_lite_pending_remove_all(lv_vg_lite_pending_t * pending)
|
||||
LV_ASSERT_NULL(pending);
|
||||
LV_ASSERT_NULL(pending->free_cb);
|
||||
|
||||
uint32_t size = lv_array_size(&pending->objs);
|
||||
uint32_t size = lv_array_size(pending->arr_act);
|
||||
if(size == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* remove all the pending objects */
|
||||
for(uint32_t i = 0; i < size; i++) {
|
||||
pending->free_cb(lv_array_at(&pending->objs, i), pending->user_data);
|
||||
pending->free_cb(lv_array_at(pending->arr_act, i), pending->user_data);
|
||||
}
|
||||
|
||||
lv_array_clear(&pending->objs);
|
||||
lv_array_clear(pending->arr_act);
|
||||
}
|
||||
|
||||
void lv_vg_lite_pending_swap(lv_vg_lite_pending_t * pending)
|
||||
{
|
||||
lv_vg_lite_pending_remove_all(pending);
|
||||
pending->arr_act = (pending->arr_act == &pending->arr_1) ? &pending->arr_2 : &pending->arr_1;
|
||||
}
|
||||
|
||||
/**********************
|
||||
|
||||
@@ -65,11 +65,17 @@ void lv_vg_lite_pending_set_free_cb(lv_vg_lite_pending_t * pending, lv_vg_lite_p
|
||||
void lv_vg_lite_pending_add(lv_vg_lite_pending_t * pending, void * obj);
|
||||
|
||||
/**
|
||||
* Remove all objects from the pending list
|
||||
* Remove all objects from the active pending list
|
||||
* @param pending pointer to the pending list
|
||||
*/
|
||||
void lv_vg_lite_pending_remove_all(lv_vg_lite_pending_t * pending);
|
||||
|
||||
/**
|
||||
* Rremove all old objects reference and swap new objects reference
|
||||
* @param pending pointer to the pending list
|
||||
*/
|
||||
void lv_vg_lite_pending_swap(lv_vg_lite_pending_t * pending);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
@@ -1315,6 +1315,14 @@ void lv_vg_lite_flush(struct _lv_draw_vg_lite_unit_t * u)
|
||||
#endif
|
||||
|
||||
LV_VG_LITE_CHECK_ERROR(vg_lite_flush(), {});
|
||||
|
||||
/* Rremove all old caches reference and swap new caches reference */
|
||||
if(u->grad_pending) {
|
||||
lv_vg_lite_pending_swap(u->grad_pending);
|
||||
}
|
||||
|
||||
lv_vg_lite_pending_swap(u->image_dsc_pending);
|
||||
|
||||
u->flush_count = 0;
|
||||
LV_PROFILER_DRAW_END;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user