fix(freetype): correct cache release behavior and change glyph cache cnt macro name (#5219)

This commit is contained in:
Benign X
2024-01-08 17:01:44 +08:00
committed by GitHub
parent ba75d64eec
commit 6550608e83
7 changed files with 27 additions and 20 deletions
+2 -3
View File
@@ -1156,9 +1156,8 @@ menu "LVGL configuration"
config LV_FREETYPE_CACHE_FT_SIZES
int "The maximum number of FT_Size"
default 8
config LV_FREETYPE_CACHE_FT_OUTLINES
int "The maximum number of Outline"
depends on LV_FREETYPE_CACHE_TYPE_OUTLINE
config LV_FREETYPE_CACHE_FT_GLYPH_CNT
int "The maximum number of Glyph in count"
default 256
endmenu
+1 -1
View File
@@ -662,7 +662,7 @@
/* (0:use system defaults) */
#define LV_FREETYPE_CACHE_FT_FACES 8
#define LV_FREETYPE_CACHE_FT_SIZES 8
#define LV_FREETYPE_CACHE_FT_OUTLINES 256
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256
#endif
/* Built-in TTF decoder */
+13 -2
View File
@@ -20,6 +20,10 @@
#define ft_ctx LV_GLOBAL_DEFAULT()->ft_context
#define LV_FREETYPE_OUTLINE_REF_SIZE_DEF 128
#if LV_FREETYPE_CACHE_FT_GLYPH_CNT <= 0
#error "LV_FREETYPE_CACHE_FT_GLYPH_CNT must be greater than 0"
#endif
/**********************
* TYPEDEFS
**********************/
@@ -161,6 +165,7 @@ lv_font_t * lv_freetype_font_create(const char * pathname, lv_freetype_font_rend
FT_Size ft_size = lv_freetype_lookup_size(dsc);
if(!ft_size || !lv_freetype_on_font_create(dsc)) {
lv_cache_release(ctx->cache_node_cache, dsc->cache_node_entry, NULL);
lv_freetype_drop_face_id(ctx, dsc->face_id);
lv_free(dsc);
return NULL;
@@ -390,8 +395,14 @@ static bool cache_node_cache_create_cb(lv_freetype_cache_node_t * node, void * u
}
static void cache_node_cache_free_cb(lv_freetype_cache_node_t * node, void * user_data)
{
lv_cache_destroy(node->glyph_cache, user_data);
lv_cache_destroy(node->draw_data_cache, user_data);
if(node->glyph_cache) {
lv_cache_destroy(node->glyph_cache, user_data);
node->glyph_cache = NULL;
}
if(node->draw_data_cache) {
lv_cache_destroy(node->draw_data_cache, user_data);
node->draw_data_cache = NULL;
}
}
static lv_cache_compare_res_t cache_node_cache_compare_cb(const lv_freetype_cache_node_t * lhs,
const lv_freetype_cache_node_t * rhs)
+1 -1
View File
@@ -15,7 +15,7 @@
* DEFINES
*********************/
#define LV_FREETYPE_GLYPH_DSC_CACHE_SIZE (LV_FREETYPE_CACHE_FT_OUTLINES * 2)
#define LV_FREETYPE_GLYPH_DSC_CACHE_SIZE (LV_FREETYPE_CACHE_FT_GLYPH_CNT * 2)
/**********************
* TYPEDEFS
**********************/
+5 -4
View File
@@ -74,10 +74,11 @@ bool lv_freetype_image_font_create(lv_freetype_font_dsc_t * dsc)
}
dsc->cache_node->draw_data_cache = lv_cache_create(&lv_cache_class_lru_rb_count, sizeof(lv_freetype_image_cache_data_t),
LV_FREETYPE_CACHE_FT_OUTLINES, ops);
if(dsc->cache_node->draw_data_cache == NULL || dsc->cache_node->glyph_cache == NULL) {
LV_LOG_ERROR("lv_cache_create failed");
return NULL;
LV_FREETYPE_CACHE_FT_GLYPH_CNT, ops);
if(dsc->cache_node->draw_data_cache == NULL
|| dsc->cache_node->glyph_cache == NULL) {
LV_LOG_ERROR("draw data cache creating failed");
return false;
}
return true;
+1 -5
View File
@@ -15,10 +15,6 @@
* DEFINES
*********************/
#if LV_FREETYPE_CACHE_FT_OUTLINES <= 0
#error "LV_FREETYPE_CACHE_FT_OUTLINES must be greater than 0"
#endif
/**********************
* TYPEDEFS
**********************/
@@ -77,7 +73,7 @@ bool lv_freetype_outline_font_create(lv_freetype_font_dsc_t * dsc)
}
dsc->cache_node->draw_data_cache = lv_cache_create(&lv_cache_class_lru_rb_count, sizeof(lv_freetype_outline_node_t),
LV_FREETYPE_CACHE_FT_OUTLINES,
LV_FREETYPE_CACHE_FT_GLYPH_CNT,
glyph_outline_cache_ops);
LV_LOG_INFO("outline cache(name: %s, style: 0x%x) create %p, ref_cnt = %d",
+4 -4
View File
@@ -2206,11 +2206,11 @@
#define LV_FREETYPE_CACHE_FT_SIZES 8
#endif
#endif
#ifndef LV_FREETYPE_CACHE_FT_OUTLINES
#ifdef CONFIG_LV_FREETYPE_CACHE_FT_OUTLINES
#define LV_FREETYPE_CACHE_FT_OUTLINES CONFIG_LV_FREETYPE_CACHE_FT_OUTLINES
#ifndef LV_FREETYPE_CACHE_FT_GLYPH_CNT
#ifdef CONFIG_LV_FREETYPE_CACHE_FT_GLYPH_CNT
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT CONFIG_LV_FREETYPE_CACHE_FT_GLYPH_CNT
#else
#define LV_FREETYPE_CACHE_FT_OUTLINES 256
#define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256
#endif
#endif
#endif