diff --git a/src/others/sysmon/lv_sysmon.c b/src/others/sysmon/lv_sysmon.c index a26e828b8f..246706c5ef 100644 --- a/src/others/sysmon/lv_sysmon.c +++ b/src/others/sysmon/lv_sysmon.c @@ -271,10 +271,13 @@ static void mem_observer_cb(lv_observer_t * observer, lv_subject_t * subject) uint32_t used_size = mon->total_size - mon->free_size;; uint32_t used_kb = used_size / 1024; uint32_t used_kb_tenth = (used_size - (used_kb * 1024)) / 102; + uint32_t max_used_kb = mon->max_used / 1024; + uint32_t max_used_kb_tenth = (mon->max_used - (max_used_kb * 1024)) / 102; lv_label_set_text_fmt(label, - "%"LV_PRIu32 ".%"LV_PRIu32 " kB, %d%%\n" - "%d%% frag.", + "%"LV_PRIu32 ".%"LV_PRIu32 " kB (%d%%)\n" + "%"LV_PRIu32 ".%"LV_PRIu32 " kB max, %d%% frag.", used_kb, used_kb_tenth, mon->used_pct, + max_used_kb, max_used_kb_tenth, mon->frag_pct); } diff --git a/src/stdlib/builtin/lv_mem_core_builtin.c b/src/stdlib/builtin/lv_mem_core_builtin.c index c8f3233e32..b7b707de35 100644 --- a/src/stdlib/builtin/lv_mem_core_builtin.c +++ b/src/stdlib/builtin/lv_mem_core_builtin.c @@ -141,10 +141,13 @@ void * lv_malloc_core(size_t size) #if LV_USE_OS lv_mutex_lock(&state.mutex); #endif - state.cur_used += size; - state.max_used = LV_MAX(state.cur_used, state.max_used); void * p = lv_tlsf_malloc(state.tlsf, size); + if(p) { + state.cur_used += lv_tlsf_block_size(p); + state.max_used = LV_MAX(state.cur_used, state.max_used); + } + #if LV_USE_OS lv_mutex_unlock(&state.mutex); #endif @@ -157,8 +160,14 @@ void * lv_realloc_core(void * p, size_t new_size) lv_mutex_lock(&state.mutex); #endif + size_t old_size = lv_tlsf_block_size(p); void * p_new = lv_tlsf_realloc(state.tlsf, p, new_size); + if(p_new) { + state.cur_used -= old_size; + state.cur_used += lv_tlsf_block_size(p_new); + state.max_used = LV_MAX(state.cur_used, state.max_used); + } #if LV_USE_OS lv_mutex_unlock(&state.mutex); #endif @@ -175,7 +184,8 @@ void lv_free_core(void * p) #if LV_MEM_ADD_JUNK lv_memset(p, 0xbb, lv_tlsf_block_size(data)); #endif - size_t size = lv_tlsf_free(state.tlsf, p); + size_t size = lv_tlsf_block_size(p); + lv_tlsf_free(state.tlsf, p); if(state.cur_used > size) state.cur_used -= size; else state.cur_used = 0;