merge from dev3; make medium bin larger than other

This commit is contained in:
daanx 2025-01-02 12:24:27 -08:00
commit 670ebd0348
2 changed files with 11 additions and 7 deletions

View file

@ -1325,10 +1325,10 @@ static int mi_page_commit_usage(mi_page_t* page) {
return (int)(used_size * 100 / committed_size); return (int)(used_size * 100 / committed_size);
} }
static size_t mi_debug_show_page_bfield(mi_bfield_t field, char* buf, size_t* k, mi_arena_t* arena, size_t slice_index) { static size_t mi_debug_show_page_bfield(mi_bfield_t field, char* buf, size_t* k, mi_arena_t* arena, size_t slice_index, long* pbit_of_page, mi_ansi_color_t* pcolor_of_page ) {
size_t bit_set_count = 0; size_t bit_set_count = 0;
long bit_of_page = 0; long bit_of_page = *pbit_of_page;
mi_ansi_color_t color = MI_GRAY; mi_ansi_color_t color = *pcolor_of_page;
mi_ansi_color_t prev_color = MI_GRAY; mi_ansi_color_t prev_color = MI_GRAY;
for (int bit = 0; bit < MI_BFIELD_BITS; bit++, bit_of_page--) { for (int bit = 0; bit < MI_BFIELD_BITS; bit++, bit_of_page--) {
bool is_set = ((((mi_bfield_t)1 << bit) & field) != 0); bool is_set = ((((mi_bfield_t)1 << bit) & field) != 0);
@ -1337,9 +1337,9 @@ static size_t mi_debug_show_page_bfield(mi_bfield_t field, char* buf, size_t* k,
if (is_set) { if (is_set) {
mi_assert_internal(bit_of_page <= 0); mi_assert_internal(bit_of_page <= 0);
bit_set_count++; bit_set_count++;
mi_page_t* page = (mi_page_t*)start;
c = 'p'; c = 'p';
color = MI_GRAY; color = MI_GRAY;
mi_page_t* page = (mi_page_t*)start;
if (mi_page_is_abandoned_mapped(page)) { c = 'a'; } if (mi_page_is_abandoned_mapped(page)) { c = 'a'; }
else if (mi_page_is_abandoned(page)) { c = (mi_page_is_singleton(page) ? 's' : 'f'); } else if (mi_page_is_abandoned(page)) { c = (mi_page_is_singleton(page) ? 's' : 'f'); }
int commit_usage = mi_page_commit_usage(page); int commit_usage = mi_page_commit_usage(page);
@ -1369,6 +1369,8 @@ static size_t mi_debug_show_page_bfield(mi_bfield_t field, char* buf, size_t* k,
buf[*k] = c; *k += 1; buf[*k] = c; *k += 1;
} }
mi_debug_color(buf, k, MI_GRAY); mi_debug_color(buf, k, MI_GRAY);
*pbit_of_page = bit_of_page;
*pcolor_of_page = color;
return bit_set_count; return bit_set_count;
} }
@ -1400,6 +1402,8 @@ static size_t mi_debug_show_chunks(const char* header, size_t slice_count, size_
buf[k++] = chunk_kind; buf[k++] = chunk_kind;
buf[k++] = ' '; buf[k++] = ' ';
long bit_of_page = 0;
mi_ansi_color_t color_of_page = MI_GRAY;
for (size_t j = 0; j < MI_BCHUNK_FIELDS; j++) { for (size_t j = 0; j < MI_BCHUNK_FIELDS; j++) {
if (j > 0 && (j % MI_FIELDS_PER_LINE) == 0) { if (j > 0 && (j % MI_FIELDS_PER_LINE) == 0) {
// buf[k++] = '\n'; _mi_memset(buf+k,' ',7); k += 7; // buf[k++] = '\n'; _mi_memset(buf+k,' ',7); k += 7;
@ -1410,7 +1414,7 @@ static size_t mi_debug_show_chunks(const char* header, size_t slice_count, size_
if (bit_count < slice_count) { if (bit_count < slice_count) {
mi_bfield_t bfield = chunk->bfields[j]; mi_bfield_t bfield = chunk->bfields[j];
if (invert) bfield = ~bfield; if (invert) bfield = ~bfield;
size_t xcount = (arena!=NULL ? mi_debug_show_page_bfield(bfield, buf, &k, arena, bit_count) size_t xcount = (arena!=NULL ? mi_debug_show_page_bfield(bfield, buf, &k, arena, bit_count, &bit_of_page, &color_of_page)
: mi_debug_show_bfield(bfield, buf, &k)); : mi_debug_show_bfield(bfield, buf, &k));
if (invert) xcount = MI_BFIELD_BITS - xcount; if (invert) xcount = MI_BFIELD_BITS - xcount;
bit_set_count += xcount; bit_set_count += xcount;

View file

@ -218,9 +218,9 @@ bool _mi_bitmap_forall_setc_ranges(mi_bitmap_t* bitmap, mi_forall_set_fun_t* vis
typedef enum mi_bbin_e { typedef enum mi_bbin_e {
MI_BBIN_NONE, // no bin assigned yet (the chunk is completely free) MI_BBIN_NONE, // no bin assigned yet (the chunk is completely free)
MI_BBIN_SMALL, // slice_count == 1 MI_BBIN_SMALL, // slice_count == 1
MI_BBIN_OTHER, // slice_count: any other from the other bins, and 1 <= slice_count <= MI_BCHUNK_BITS
MI_BBIN_MEDIUM, // slice_count == 8 MI_BBIN_MEDIUM, // slice_count == 8
MI_BBIN_LARGE, // slice_count == MI_BFIELD_BITS -- not used for now! MI_BBIN_LARGE, // slice_count == MI_BFIELD_BITS -- not used for now!
MI_BBIN_OTHER, // slice_count: any other from the other bins, and 1 <= slice_count <= MI_BCHUNK_BITS
MI_BBIN_COUNT MI_BBIN_COUNT
} mi_bbin_t; } mi_bbin_t;