add memory tracking
This commit is contained in:
parent
edd376b4ba
commit
c2531be115
2 changed files with 18 additions and 20 deletions
36
src/mem.cpp
36
src/mem.cpp
|
@ -39,6 +39,7 @@ Arena *arena_alloc_sized(u64 init_res, u64 init_cmt)
|
||||||
arena->res = res;
|
arena->res = res;
|
||||||
arena->align = 8;
|
arena->align = 8;
|
||||||
arena->grow = true;
|
arena->grow = true;
|
||||||
|
arena->mem_used = arena->mem_peak_used = ARENA_HEADER_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return arena;
|
return arena;
|
||||||
|
@ -59,16 +60,6 @@ void arena_release(Arena *arena)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal u64
|
|
||||||
arena_mem_used(Arena *arena)
|
|
||||||
{
|
|
||||||
u64 tot = 0;
|
|
||||||
for (Arena *node = arena->cur, *prev = 0; node; node = prev) {
|
|
||||||
tot += node->pos - node->base_pos;
|
|
||||||
}
|
|
||||||
return tot;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal
|
internal
|
||||||
u64 arena_huge_push_threshold()
|
u64 arena_huge_push_threshold()
|
||||||
{
|
{
|
||||||
|
@ -117,8 +108,11 @@ void *arena_push_impl(Arena *arena, u64 size)
|
||||||
void *mem = 0;
|
void *mem = 0;
|
||||||
if (cur->cmt >= pos_new) {
|
if (cur->cmt >= pos_new) {
|
||||||
mem = (u8*)cur + pos_mem;
|
mem = (u8*)cur + pos_mem;
|
||||||
|
u64 added_size = pos_new - cur->pos;
|
||||||
|
arena->mem_used += added_size;
|
||||||
|
arena->mem_peak_used = max(arena->mem_peak_used, arena->mem_used);
|
||||||
cur->pos = pos_new;
|
cur->pos = pos_new;
|
||||||
asan_unpoison_memory_region(mem, size);
|
asan_unpoison_memory_region(mem, added_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return mem;
|
return mem;
|
||||||
|
@ -158,15 +152,15 @@ T *arena_push_array(Arena *arena, u64 count)
|
||||||
return ary;
|
return ary;
|
||||||
}
|
}
|
||||||
|
|
||||||
// internal
|
internal
|
||||||
// u8 *arena_push_contiguous(Arena *arena, u64 size)
|
u8 *arena_push_contiguous(Arena *arena, u64 size)
|
||||||
// {
|
{
|
||||||
// b32 restore = arena->grow;
|
b32 restore = arena->grow;
|
||||||
// arena->grow = 0;
|
arena->grow = 0;
|
||||||
// void *mem = arena_push_impl(arena, size);
|
void *mem = arena_push_impl(arena, size);
|
||||||
// arena->grow = restore;
|
arena->grow = restore;
|
||||||
// return (u8 *)mem;
|
return (u8 *)mem;
|
||||||
// }
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
u64 arena_pos(Arena *arena)
|
u64 arena_pos(Arena *arena)
|
||||||
|
@ -197,6 +191,8 @@ void arena_pop_to(Arena *arena, u64 big_pos_unclamped)
|
||||||
// poison popped memory block
|
// poison popped memory block
|
||||||
asan_poison_memory_region((u8*)current + new_pos, (current->pos - new_pos));
|
asan_poison_memory_region((u8*)current + new_pos, (current->pos - new_pos));
|
||||||
|
|
||||||
|
arena->mem_used -= (current->pos - new_pos);
|
||||||
|
|
||||||
// update position
|
// update position
|
||||||
current->pos = new_pos;
|
current->pos = new_pos;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,8 @@ struct Arena {
|
||||||
u64 cmt;
|
u64 cmt;
|
||||||
u64 res;
|
u64 res;
|
||||||
u64 align;
|
u64 align;
|
||||||
|
u64 mem_used;
|
||||||
|
u64 mem_peak_used;
|
||||||
b8 grow;
|
b8 grow;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue