From b1728f85b3388ed93a35b07a39fff739564f210c Mon Sep 17 00:00:00 2001 From: cristian-stoica Date: Wed, 15 Jan 2025 08:31:05 +0200 Subject: [PATCH] fix(os): add support for thread names (#7579) Signed-off-by: Cristian Stoica --- docs/details/integration/chip/nxp.rst | 4 ++-- env_support/cmsis-pack/lv_os_custom_c.txt | 3 ++- examples/porting/osal/lv_example_osal.c | 3 ++- src/draw/dma2d/lv_draw_dma2d.c | 3 ++- src/draw/nema_gfx/lv_draw_nema_gfx.c | 2 +- src/draw/nxp/pxp/lv_draw_pxp.c | 2 +- src/draw/nxp/vglite/lv_draw_vglite.c | 3 ++- src/draw/renesas/dave2d/lv_draw_dave2d.c | 3 ++- src/draw/sw/lv_draw_sw.c | 3 ++- src/osal/lv_cmsis_rtos2.c | 4 +++- src/osal/lv_freertos.c | 8 +++----- src/osal/lv_mqx.c | 5 +++-- src/osal/lv_os.h | 10 ++++++---- src/osal/lv_pthread.c | 4 +++- src/osal/lv_rtthread.c | 5 +++-- src/osal/lv_sdl2.c | 6 +++--- src/osal/lv_windows.c | 2 ++ 17 files changed, 42 insertions(+), 28 deletions(-) diff --git a/docs/details/integration/chip/nxp.rst b/docs/details/integration/chip/nxp.rst index a56d41ca8..152f980f3 100644 --- a/docs/details/integration/chip/nxp.rst +++ b/docs/details/integration/chip/nxp.rst @@ -75,7 +75,7 @@ handle the supported draw tasks. .. code-block:: c #if LV_USE_PXP_DRAW_THREAD - lv_thread_init(&draw_pxp_unit->thread, LV_THREAD_PRIO_HIGH, _pxp_render_thread_cb, 2 * 1024, draw_pxp_unit); + lv_thread_init(&draw_pxp_unit->thread, "pxpdraw", LV_THREAD_PRIO_HIGH, _pxp_render_thread_cb, 2 * 1024, draw_pxp_unit); #endif If `LV_USE_PXP_DRAW_THREAD` is not defined, then no additional draw thread will be created @@ -274,7 +274,7 @@ handle the supported draw tasks. .. code-block:: c #if LV_USE_VGLITE_DRAW_THREAD - lv_thread_init(&draw_vglite_unit->thread, LV_THREAD_PRIO_HIGH, _vglite_render_thread_cb, 2 * 1024, draw_vglite_unit); + lv_thread_init(&draw_vglite_unit->thread, "vglitedraw", LV_THREAD_PRIO_HIGH, _vglite_render_thread_cb, 2 * 1024, draw_vglite_unit); #endif If `LV_USE_VGLITE_DRAW_THREAD` is not defined, then no additional draw thread will be created diff --git a/env_support/cmsis-pack/lv_os_custom_c.txt b/env_support/cmsis-pack/lv_os_custom_c.txt index 87427b240..3d31ce0ac 100644 --- a/env_support/cmsis-pack/lv_os_custom_c.txt +++ b/env_support/cmsis-pack/lv_os_custom_c.txt @@ -36,10 +36,11 @@ * GLOBAL FUNCTIONS **********************/ -lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, +lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, void * user_data) { LV_UNUSED(thread); + LV_UNUSED(name); LV_UNUSED(callback); LV_UNUSED(prio); LV_UNUSED(stack_size); diff --git a/examples/porting/osal/lv_example_osal.c b/examples/porting/osal/lv_example_osal.c index d9566d722..7d27b49ed 100644 --- a/examples/porting/osal/lv_example_osal.c +++ b/examples/porting/osal/lv_example_osal.c @@ -51,7 +51,8 @@ void lv_example_osal(void) LV_LOG_ERROR("Error initializing thread sync"); } - if(lv_thread_init(&increment_thread, LV_THREAD_PRIO_MID, increment_thread_entry, 2048, NULL) != LV_RESULT_OK) { + if(lv_thread_init(&increment_thread, "inc_th", LV_THREAD_PRIO_MID, increment_thread_entry, 2048, + NULL) != LV_RESULT_OK) { LV_LOG_ERROR("Error initializing thread"); } } diff --git a/src/draw/dma2d/lv_draw_dma2d.c b/src/draw/dma2d/lv_draw_dma2d.c index 1fdbf8f7a..bfab4bf55 100644 --- a/src/draw/dma2d/lv_draw_dma2d.c +++ b/src/draw/dma2d/lv_draw_dma2d.c @@ -69,7 +69,8 @@ void lv_draw_dma2d_init(void) #if LV_DRAW_DMA2D_ASYNC g_unit = draw_dma2d_unit; - lv_result_t res = lv_thread_init(&draw_dma2d_unit->thread, LV_THREAD_PRIO_HIGH, thread_cb, 2 * 1024, draw_dma2d_unit); + lv_result_t res = lv_thread_init(&draw_dma2d_unit->thread, "dma2d", LV_THREAD_PRIO_HIGH, thread_cb, 2 * 1024, + draw_dma2d_unit); LV_ASSERT(res == LV_RESULT_OK); #endif diff --git a/src/draw/nema_gfx/lv_draw_nema_gfx.c b/src/draw/nema_gfx/lv_draw_nema_gfx.c index 939d6030f..437185ad3 100644 --- a/src/draw/nema_gfx/lv_draw_nema_gfx.c +++ b/src/draw/nema_gfx/lv_draw_nema_gfx.c @@ -116,7 +116,7 @@ void lv_draw_nema_gfx_init(void) #if LV_USE_OS - lv_thread_init(&draw_nema_gfx_unit->thread, LV_THREAD_PRIO_HIGH, nema_gfx_render_thread_cb, 2 * 1024, + lv_thread_init(&draw_nema_gfx_unit->thread, "nemagfx", LV_THREAD_PRIO_HIGH, nema_gfx_render_thread_cb, 2 * 1024, draw_nema_gfx_unit); #endif } diff --git a/src/draw/nxp/pxp/lv_draw_pxp.c b/src/draw/nxp/pxp/lv_draw_pxp.c index 9ad876575..94032e9f1 100644 --- a/src/draw/nxp/pxp/lv_draw_pxp.c +++ b/src/draw/nxp/pxp/lv_draw_pxp.c @@ -95,7 +95,7 @@ void lv_draw_pxp_init(void) draw_pxp_unit->base_unit.name = "NXP_PXP"; #if LV_USE_PXP_DRAW_THREAD - lv_thread_init(&draw_pxp_unit->thread, LV_THREAD_PRIO_HIGH, _pxp_render_thread_cb, 2 * 1024, draw_pxp_unit); + lv_thread_init(&draw_pxp_unit->thread, "pxpdraw", LV_THREAD_PRIO_HIGH, _pxp_render_thread_cb, 2 * 1024, draw_pxp_unit); #endif #endif /*LV_USE_DRAW_PXP*/ } diff --git a/src/draw/nxp/vglite/lv_draw_vglite.c b/src/draw/nxp/vglite/lv_draw_vglite.c index e3f8bbe7e..5ad2bd2e8 100644 --- a/src/draw/nxp/vglite/lv_draw_vglite.c +++ b/src/draw/nxp/vglite/lv_draw_vglite.c @@ -118,7 +118,8 @@ void lv_draw_vglite_init(void) draw_vglite_unit->base_unit.name = "NXP_VGLITE"; #if LV_USE_VGLITE_DRAW_THREAD - lv_thread_init(&draw_vglite_unit->thread, LV_THREAD_PRIO_HIGH, _vglite_render_thread_cb, 2 * 1024, draw_vglite_unit); + lv_thread_init(&draw_vglite_unit->thread, "vglitedraw", LV_THREAD_PRIO_HIGHEST, _vglite_render_thread_cb, 2 * 1024, + draw_vglite_unit); #endif } diff --git a/src/draw/renesas/dave2d/lv_draw_dave2d.c b/src/draw/renesas/dave2d/lv_draw_dave2d.c index b35c7ed05..962c797e7 100644 --- a/src/draw/renesas/dave2d/lv_draw_dave2d.c +++ b/src/draw/renesas/dave2d/lv_draw_dave2d.c @@ -99,7 +99,8 @@ void lv_draw_dave2d_init(void) lv_ll_init(&_ll_Dave2D_Tasks, 4); #if LV_USE_OS - lv_thread_init(&draw_dave2d_unit->thread, LV_THREAD_PRIO_HIGH, _dave2d_render_thread_cb, 8 * 1024, draw_dave2d_unit); + lv_thread_init(&draw_dave2d_unit->thread, "dave2d", LV_THREAD_PRIO_HIGH, _dave2d_render_thread_cb, 8 * 1024, + draw_dave2d_unit); #endif } diff --git a/src/draw/sw/lv_draw_sw.c b/src/draw/sw/lv_draw_sw.c index 014149336..c56344ccb 100644 --- a/src/draw/sw/lv_draw_sw.c +++ b/src/draw/sw/lv_draw_sw.c @@ -85,7 +85,8 @@ void lv_draw_sw_init(void) draw_sw_unit->base_unit.name = "SW"; #if LV_USE_OS - lv_thread_init(&draw_sw_unit->thread, LV_THREAD_PRIO_HIGH, render_thread_cb, LV_DRAW_THREAD_STACK_SIZE, draw_sw_unit); + lv_thread_init(&draw_sw_unit->thread, "swdraw", LV_THREAD_PRIO_HIGH, render_thread_cb, LV_DRAW_THREAD_STACK_SIZE, + draw_sw_unit); #endif } diff --git a/src/osal/lv_cmsis_rtos2.c b/src/osal/lv_cmsis_rtos2.c index ed414c8da..4a5628012 100644 --- a/src/osal/lv_cmsis_rtos2.c +++ b/src/osal/lv_cmsis_rtos2.c @@ -42,9 +42,11 @@ * GLOBAL FUNCTIONS **********************/ -lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, +lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, lv_thread_prio_t prio, + void (*callback)(void *), size_t stack_size, void * user_data) { + LV_UNUSED(name); static const osPriority_t prio_map[] = { [LV_THREAD_PRIO_LOWEST] = osPriorityLow, [LV_THREAD_PRIO_LOW] = osPriorityBelowNormal, diff --git a/src/osal/lv_freertos.c b/src/osal/lv_freertos.c index 3744f5855..c1eeccdf0 100644 --- a/src/osal/lv_freertos.c +++ b/src/osal/lv_freertos.c @@ -26,9 +26,6 @@ *********************/ #define ulMAX_COUNT 10U -#ifndef pcTASK_NAME - #define pcTASK_NAME "lvglDraw" -#endif #define globals LV_GLOBAL_DEFAULT() @@ -85,7 +82,8 @@ static void prvTestAndDecrement(lv_thread_sync_t * pxCond, * GLOBAL FUNCTIONS **********************/ -lv_result_t lv_thread_init(lv_thread_t * pxThread, lv_thread_prio_t xSchedPriority, +lv_result_t lv_thread_init(lv_thread_t * pxThread, const char * const name, + lv_thread_prio_t xSchedPriority, void (*pvStartRoutine)(void *), size_t usStackSize, void * xAttr) { @@ -94,7 +92,7 @@ lv_result_t lv_thread_init(lv_thread_t * pxThread, lv_thread_prio_t xSchedPriori BaseType_t xTaskCreateStatus = xTaskCreate( prvRunThread, - pcTASK_NAME, + name, (configSTACK_DEPTH_TYPE)(usStackSize / sizeof(StackType_t)), (void *)pxThread, tskIDLE_PRIORITY + xSchedPriority, diff --git a/src/osal/lv_mqx.c b/src/osal/lv_mqx.c index fed82f428..7d27d752d 100644 --- a/src/osal/lv_mqx.c +++ b/src/osal/lv_mqx.c @@ -37,7 +37,8 @@ * GLOBAL FUNCTIONS **********************/ -lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, +lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, lv_thread_prio_t prio, + void (*callback)(void *), size_t stack_size, void * user_data) { TASK_TEMPLATE_STRUCT task_template; @@ -47,7 +48,7 @@ lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*c task_template.TASK_ADDRESS = (TASK_FPTR)callback; task_template.TASK_STACKSIZE = stack_size; task_template.TASK_PRIORITY = _sched_get_min_priority(0) - prio; - task_template.TASK_NAME = "lvglDraw"; + task_template.TASK_NAME = name; task_template.CREATION_PARAMETER = (uint32_t)user_data; *thread = _task_create(0, 0, (uint32_t)&task_template); diff --git a/src/osal/lv_os.h b/src/osal/lv_os.h index 2231d5da2..d4e230603 100644 --- a/src/osal/lv_os.h +++ b/src/osal/lv_os.h @@ -70,13 +70,15 @@ typedef enum { /** * Create a new thread * @param thread a variable in which the thread will be stored + * @param name the name of the thread * @param prio priority of the thread * @param callback function of the thread * @param stack_size stack size in bytes * @param user_data arbitrary data, will be available in the callback * @return LV_RESULT_OK: success; LV_RESULT_INVALID: failure */ -lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, +lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, + lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, void * user_data); /** @@ -187,11 +189,11 @@ void lv_unlock(void); * optimizations and avoid the call overhead of the OS API to ensure no performance penalty. */ -static inline lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), - size_t stack_size, - void * user_data) +static inline lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, lv_thread_prio_t prio, + void (*callback)(void *), size_t stack_size, void * user_data) { LV_UNUSED(thread); + LV_UNUSED(name); LV_UNUSED(callback); LV_UNUSED(prio); LV_UNUSED(stack_size); diff --git a/src/osal/lv_pthread.c b/src/osal/lv_pthread.c index ec53a4b33..665efd2e3 100644 --- a/src/osal/lv_pthread.c +++ b/src/osal/lv_pthread.c @@ -38,9 +38,11 @@ static void * generic_callback(void * user_data); * GLOBAL FUNCTIONS **********************/ -lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, +lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, lv_thread_prio_t prio, + void (*callback)(void *), size_t stack_size, void * user_data) { + LV_UNUSED(name); LV_UNUSED(prio); pthread_attr_t attr; pthread_attr_init(&attr); diff --git a/src/osal/lv_rtthread.c b/src/osal/lv_rtthread.c index e781634e1..b719152b5 100644 --- a/src/osal/lv_rtthread.c +++ b/src/osal/lv_rtthread.c @@ -38,10 +38,11 @@ * GLOBAL FUNCTIONS **********************/ -lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, +lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, lv_thread_prio_t prio, + void (*callback)(void *), size_t stack_size, void * user_data) { - thread->thread = rt_thread_create("thread", + thread->thread = rt_thread_create(name, callback, user_data, stack_size, diff --git a/src/osal/lv_sdl2.c b/src/osal/lv_sdl2.c index 328e6fae5..bfbeac0cd 100644 --- a/src/osal/lv_sdl2.c +++ b/src/osal/lv_sdl2.c @@ -38,13 +38,13 @@ static int generic_callback(void * user_data); * GLOBAL FUNCTIONS **********************/ -lv_result_t lv_thread_init(lv_thread_t * thread, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, - void * user_data) +lv_result_t lv_thread_init(lv_thread_t * thread, const char * const name, lv_thread_prio_t prio, + void (*callback)(void *), size_t stack_size, void * user_data) { LV_UNUSED(prio); thread->callback = callback; thread->user_data = user_data; - thread->thread = SDL_CreateThreadWithStackSize(generic_callback, "LVGL", stack_size, thread); + thread->thread = SDL_CreateThreadWithStackSize(generic_callback, name, stack_size, thread); if(thread->thread == NULL) { LV_LOG_ERROR("Error: %s", SDL_GetError()); return LV_RESULT_INVALID; diff --git a/src/osal/lv_windows.c b/src/osal/lv_windows.c index 62217c266..33822577c 100644 --- a/src/osal/lv_windows.c +++ b/src/osal/lv_windows.c @@ -46,11 +46,13 @@ static unsigned __stdcall thread_start_routine(void * parameter); lv_result_t lv_thread_init( lv_thread_t * thread, + const char * const name, lv_thread_prio_t prio, void (*callback)(void *), size_t stack_size, void * user_data) { + LV_UNUSED(name); if(!thread) { return LV_RESULT_INVALID; }