More GC debugging improvements.
This commit is contained in:
parent
20632e4d3f
commit
723a6ed371
11
py/gc.c
11
py/gc.c
|
@ -240,7 +240,7 @@ void gc_info(gc_info_t *info) {
|
||||||
|
|
||||||
void *gc_alloc(machine_uint_t n_bytes) {
|
void *gc_alloc(machine_uint_t n_bytes) {
|
||||||
machine_uint_t n_blocks = ((n_bytes + BYTES_PER_BLOCK - 1) & (~(BYTES_PER_BLOCK - 1))) / BYTES_PER_BLOCK;
|
machine_uint_t n_blocks = ((n_bytes + BYTES_PER_BLOCK - 1) & (~(BYTES_PER_BLOCK - 1))) / BYTES_PER_BLOCK;
|
||||||
//printf("gc_alloc(%u bytes -> %u blocks)\n", n_bytes, n_blocks);
|
DEBUG_printf("gc_alloc(%u bytes -> %u blocks)\n", n_bytes, n_blocks);
|
||||||
|
|
||||||
// check for 0 allocation
|
// check for 0 allocation
|
||||||
if (n_blocks == 0) {
|
if (n_blocks == 0) {
|
||||||
|
@ -267,6 +267,7 @@ void *gc_alloc(machine_uint_t n_bytes) {
|
||||||
if (collected) {
|
if (collected) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
DEBUG_printf("gc_alloc(" UINT_FMT "): no free mem, triggering GC\n", n_bytes);
|
||||||
gc_collect();
|
gc_collect();
|
||||||
collected = 1;
|
collected = 1;
|
||||||
}
|
}
|
||||||
|
@ -341,6 +342,14 @@ void *gc_realloc(void *ptr, machine_uint_t n_bytes) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gc_dump_info() {
|
||||||
|
gc_info_t info;
|
||||||
|
gc_info(&info);
|
||||||
|
printf("GC: total: " UINT_FMT ", used: " UINT_FMT ", free: " UINT_FMT "\n", info.total, info.used, info.free);
|
||||||
|
printf(" No. of 1-blocks: " UINT_FMT ", 2-blocks: " UINT_FMT ", max blk sz: " UINT_FMT "\n",
|
||||||
|
info.num_1block, info.num_2block, info.max_block);
|
||||||
|
}
|
||||||
|
|
||||||
#if DEBUG_PRINT
|
#if DEBUG_PRINT
|
||||||
static void gc_dump_at(void) {
|
static void gc_dump_at(void) {
|
||||||
for (machine_uint_t bl = 0; bl < gc_alloc_table_byte_len * BLOCKS_PER_ATB; bl++) {
|
for (machine_uint_t bl = 0; bl < gc_alloc_table_byte_len * BLOCKS_PER_ATB; bl++) {
|
||||||
|
|
|
@ -48,6 +48,8 @@ void gc_helper_get_regs(regs_t arr) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void gc_collect(void) {
|
void gc_collect(void) {
|
||||||
|
//gc_dump_info();
|
||||||
|
|
||||||
gc_collect_start();
|
gc_collect_start();
|
||||||
// this traces .data and .bss sections
|
// this traces .data and .bss sections
|
||||||
extern char __bss_start, _end;
|
extern char __bss_start, _end;
|
||||||
|
@ -59,14 +61,8 @@ void gc_collect(void) {
|
||||||
gc_collect_root((void**)®s, ((uint32_t)stack_top - (uint32_t)®s) / sizeof(uint32_t));
|
gc_collect_root((void**)®s, ((uint32_t)stack_top - (uint32_t)®s) / sizeof(uint32_t));
|
||||||
gc_collect_end();
|
gc_collect_end();
|
||||||
|
|
||||||
if (0) {
|
//printf("-----\n");
|
||||||
// print GC info
|
//gc_dump_info();
|
||||||
gc_info_t info;
|
|
||||||
gc_info(&info);
|
|
||||||
printf("GC: total: " UINT_FMT ", used: " UINT_FMT ", free: " UINT_FMT "\n", info.total, info.used, info.free);
|
|
||||||
printf(" No. of 1-blocks: " UINT_FMT ", 2-blocks: " UINT_FMT ", max blk sz: " UINT_FMT "\n",
|
|
||||||
info.num_1block, info.num_2block, info.max_block);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //MICROPY_ENABLE_GC
|
#endif //MICROPY_ENABLE_GC
|
||||||
|
|
Loading…
Reference in New Issue