mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-06 15:29:31 +03:00
merge subproc stats on delete
This commit is contained in:
parent
dece8a587b
commit
95aeda4cdd
3 changed files with 16 additions and 12 deletions
|
@ -203,6 +203,7 @@ void _mi_heap_page_reclaim(mi_heap_t* heap, mi_page_t* page);
|
||||||
|
|
||||||
// "stats.c"
|
// "stats.c"
|
||||||
void _mi_stats_done(mi_stats_t* stats);
|
void _mi_stats_done(mi_stats_t* stats);
|
||||||
|
void _mi_stats_merge_from(mi_stats_t* to, mi_stats_t* from);
|
||||||
mi_msecs_t _mi_clock_now(void);
|
mi_msecs_t _mi_clock_now(void);
|
||||||
mi_msecs_t _mi_clock_end(mi_msecs_t start);
|
mi_msecs_t _mi_clock_end(mi_msecs_t start);
|
||||||
mi_msecs_t _mi_clock_start(void);
|
mi_msecs_t _mi_clock_start(void);
|
||||||
|
|
|
@ -382,6 +382,10 @@ void mi_subproc_delete(mi_subproc_id_t subproc_id) {
|
||||||
mi_lock_release(&subproc->os_pages_lock);
|
mi_lock_release(&subproc->os_pages_lock);
|
||||||
}
|
}
|
||||||
if (!safe_to_delete) return;
|
if (!safe_to_delete) return;
|
||||||
|
|
||||||
|
// merge stats back into the main subproc?
|
||||||
|
_mi_stats_merge_from(&_mi_subproc_main()->stats, &subproc->stats);
|
||||||
|
|
||||||
// safe to release
|
// safe to release
|
||||||
// todo: should we refcount subprocesses?
|
// todo: should we refcount subprocesses?
|
||||||
mi_lock_done(&subproc->os_pages_lock);
|
mi_lock_done(&subproc->os_pages_lock);
|
||||||
|
|
23
src/stats.c
23
src/stats.c
|
@ -411,14 +411,6 @@ static mi_stats_t* mi_get_tld_stats(void) {
|
||||||
return &_mi_tld()->stats;
|
return &_mi_tld()->stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mi_stats_merge_from(mi_stats_t* stats) {
|
|
||||||
mi_subproc_t* subproc = _mi_subproc();
|
|
||||||
if (stats != &subproc->stats) {
|
|
||||||
mi_stats_add(&subproc->stats, stats);
|
|
||||||
_mi_memzero(stats, sizeof(mi_stats_t));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mi_stats_reset(void) mi_attr_noexcept {
|
void mi_stats_reset(void) mi_attr_noexcept {
|
||||||
mi_stats_t* stats = mi_get_tld_stats();
|
mi_stats_t* stats = mi_get_tld_stats();
|
||||||
mi_subproc_t* subproc = _mi_subproc();
|
mi_subproc_t* subproc = _mi_subproc();
|
||||||
|
@ -427,16 +419,23 @@ void mi_stats_reset(void) mi_attr_noexcept {
|
||||||
if (mi_process_start == 0) { mi_process_start = _mi_clock_start(); };
|
if (mi_process_start == 0) { mi_process_start = _mi_clock_start(); };
|
||||||
}
|
}
|
||||||
|
|
||||||
void mi_stats_merge(void) mi_attr_noexcept {
|
void _mi_stats_merge_from(mi_stats_t* to, mi_stats_t* from) {
|
||||||
mi_stats_merge_from( mi_get_tld_stats() );
|
if (to != from) {
|
||||||
|
mi_stats_add(to, from);
|
||||||
|
_mi_memzero(from, sizeof(mi_stats_t));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _mi_stats_done(mi_stats_t* stats) { // called from `mi_thread_done`
|
void _mi_stats_done(mi_stats_t* stats) { // called from `mi_thread_done`
|
||||||
mi_stats_merge_from(stats);
|
_mi_stats_merge_from(&_mi_subproc()->stats, stats);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mi_stats_merge(void) mi_attr_noexcept {
|
||||||
|
_mi_stats_done( mi_get_tld_stats() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void mi_stats_print_out(mi_output_fun* out, void* arg) mi_attr_noexcept {
|
void mi_stats_print_out(mi_output_fun* out, void* arg) mi_attr_noexcept {
|
||||||
mi_stats_merge_from(mi_get_tld_stats());
|
mi_stats_merge();
|
||||||
_mi_stats_print(&_mi_subproc()->stats, out, arg);
|
_mi_stats_print(&_mi_subproc()->stats, out, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue