summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngus Gratton <angus@redyak.com.au>2023-09-05 10:58:19 +1000
committerDamien George <damien@micropython.org>2023-09-15 12:19:13 +1000
commit3e8aed9fcce9068f40780b23148feaa1e041a18a (patch)
tree9771d7460caf22d8ec28c53e7c2560ff0445dfb4
parent174bb28d8e27c7b082d2c8d7b18f7bf2cdf2c62e (diff)
py/gc: Add "max new split" value in result of gc.mem_free().
Follow-up to 519c24dd487 when MICROPY_GC_SPLIT_HEAP_AUTO is enabled, based on discussion at https://github.com/orgs/micropython/discussions/12316#discussioncomment-6858007 gc.mem_free() is always a heuristic, but this makes it a more useful heuristic for common use cases. Signed-off-by: Angus Gratton <angus@redyak.com.au>
-rw-r--r--py/gc.c7
-rw-r--r--py/gc.h3
-rw-r--r--py/modgc.c5
3 files changed, 14 insertions, 1 deletions
diff --git a/py/gc.c b/py/gc.c
index b2e4aa4aa..80e5f8036 100644
--- a/py/gc.c
+++ b/py/gc.c
@@ -701,6 +701,11 @@ void gc_info(gc_info_t *info) {
info->used *= BYTES_PER_BLOCK;
info->free *= BYTES_PER_BLOCK;
+
+ #if MICROPY_GC_SPLIT_HEAP_AUTO
+ info->max_new_split = gc_get_max_new_split();
+ #endif
+
GC_EXIT();
}
@@ -1159,7 +1164,7 @@ void gc_dump_info(const mp_print_t *print) {
mp_printf(print, "GC: total: %u, used: %u, free: %u",
(uint)info.total, (uint)info.used, (uint)info.free);
#if MICROPY_GC_SPLIT_HEAP_AUTO
- mp_printf(print, ", max new split: %u", (uint)gc_get_max_new_split());
+ mp_printf(print, ", max new split: %u", (uint)info.max_new_split);
#endif
mp_printf(print, "\n No. of 1-blocks: %u, 2-blocks: %u, max blk sz: %u, max free sz: %u\n",
(uint)info.num_1block, (uint)info.num_2block, (uint)info.max_block, (uint)info.max_free);
diff --git a/py/gc.h b/py/gc.h
index 7eec6265c..361776330 100644
--- a/py/gc.h
+++ b/py/gc.h
@@ -75,6 +75,9 @@ typedef struct _gc_info_t {
size_t num_1block;
size_t num_2block;
size_t max_block;
+ #if MICROPY_GC_SPLIT_HEAP_AUTO
+ size_t max_new_split;
+ #endif
} gc_info_t;
void gc_info(gc_info_t *info);
diff --git a/py/modgc.c b/py/modgc.c
index c11bcaecd..7b18045b0 100644
--- a/py/modgc.c
+++ b/py/modgc.c
@@ -64,7 +64,12 @@ MP_DEFINE_CONST_FUN_OBJ_0(gc_isenabled_obj, gc_isenabled);
STATIC mp_obj_t gc_mem_free(void) {
gc_info_t info;
gc_info(&info);
+ #if MICROPY_GC_SPLIT_HEAP_AUTO
+ // Include max_new_split value here as a more useful heuristic
+ return MP_OBJ_NEW_SMALL_INT(info.free + info.max_new_split);
+ #else
return MP_OBJ_NEW_SMALL_INT(info.free);
+ #endif
}
MP_DEFINE_CONST_FUN_OBJ_0(gc_mem_free_obj, gc_mem_free);