1 #include "jemalloc/internal/jemalloc_preamble.h" 2 #include "jemalloc/internal/jemalloc_internal_includes.h" 3 4 #include "jemalloc/internal/prof_stats.h" 5 6 bool opt_prof_stats = false; 7 malloc_mutex_t prof_stats_mtx; 8 static prof_stats_t prof_stats_live[PROF_SC_NSIZES]; 9 static prof_stats_t prof_stats_accum[PROF_SC_NSIZES]; 10 11 static void 12 prof_stats_enter(tsd_t *tsd, szind_t ind) { 13 assert(opt_prof && opt_prof_stats); 14 assert(ind < SC_NSIZES); 15 malloc_mutex_lock(tsd_tsdn(tsd), &prof_stats_mtx); 16 } 17 18 static void 19 prof_stats_leave(tsd_t *tsd) { 20 malloc_mutex_unlock(tsd_tsdn(tsd), &prof_stats_mtx); 21 } 22 23 void 24 prof_stats_inc(tsd_t *tsd, szind_t ind, size_t size) { 25 cassert(config_prof); 26 prof_stats_enter(tsd, ind); 27 prof_stats_live[ind].req_sum += size; 28 prof_stats_live[ind].count++; 29 prof_stats_accum[ind].req_sum += size; 30 prof_stats_accum[ind].count++; 31 prof_stats_leave(tsd); 32 } 33 34 void 35 prof_stats_dec(tsd_t *tsd, szind_t ind, size_t size) { 36 cassert(config_prof); 37 prof_stats_enter(tsd, ind); 38 prof_stats_live[ind].req_sum -= size; 39 prof_stats_live[ind].count--; 40 prof_stats_leave(tsd); 41 } 42 43 void 44 prof_stats_get_live(tsd_t *tsd, szind_t ind, prof_stats_t *stats) { 45 cassert(config_prof); 46 prof_stats_enter(tsd, ind); 47 memcpy(stats, &prof_stats_live[ind], sizeof(prof_stats_t)); 48 prof_stats_leave(tsd); 49 } 50 51 void 52 prof_stats_get_accum(tsd_t *tsd, szind_t ind, prof_stats_t *stats) { 53 cassert(config_prof); 54 prof_stats_enter(tsd, ind); 55 memcpy(stats, &prof_stats_accum[ind], sizeof(prof_stats_t)); 56 prof_stats_leave(tsd); 57 } 58