1 #include "jemalloc/internal/jemalloc_preamble.h"
2 #include "jemalloc/internal/jemalloc_internal_includes.h"
3
4 #include "jemalloc/internal/peak_event.h"
5
6 #include "jemalloc/internal/activity_callback.h"
7 #include "jemalloc/internal/peak.h"
8
9 /*
10 * Update every 64K by default. We're not exposing this as a configuration
11 * option for now; we don't want to bind ourselves too tightly to any particular
12 * performance requirements for small values, or guarantee that we'll even be
13 * able to provide fine-grained accuracy.
14 */
15 #define PEAK_EVENT_WAIT (64 * 1024)
16
17 /* Update the peak with current tsd state. */
18 void
peak_event_update(tsd_t * tsd)19 peak_event_update(tsd_t *tsd) {
20 uint64_t alloc = tsd_thread_allocated_get(tsd);
21 uint64_t dalloc = tsd_thread_deallocated_get(tsd);
22 peak_t *peak = tsd_peakp_get(tsd);
23 peak_update(peak, alloc, dalloc);
24 }
25
26 static void
peak_event_activity_callback(tsd_t * tsd)27 peak_event_activity_callback(tsd_t *tsd) {
28 activity_callback_thunk_t *thunk = tsd_activity_callback_thunkp_get(
29 tsd);
30 uint64_t alloc = tsd_thread_allocated_get(tsd);
31 uint64_t dalloc = tsd_thread_deallocated_get(tsd);
32 if (thunk->callback != NULL) {
33 thunk->callback(thunk->uctx, alloc, dalloc);
34 }
35 }
36
37 /* Set current state to zero. */
38 void
peak_event_zero(tsd_t * tsd)39 peak_event_zero(tsd_t *tsd) {
40 uint64_t alloc = tsd_thread_allocated_get(tsd);
41 uint64_t dalloc = tsd_thread_deallocated_get(tsd);
42 peak_t *peak = tsd_peakp_get(tsd);
43 peak_set_zero(peak, alloc, dalloc);
44 }
45
46 uint64_t
peak_event_max(tsd_t * tsd)47 peak_event_max(tsd_t *tsd) {
48 peak_t *peak = tsd_peakp_get(tsd);
49 return peak_max(peak);
50 }
51
52 uint64_t
peak_alloc_new_event_wait(tsd_t * tsd)53 peak_alloc_new_event_wait(tsd_t *tsd) {
54 return PEAK_EVENT_WAIT;
55 }
56
57 uint64_t
peak_alloc_postponed_event_wait(tsd_t * tsd)58 peak_alloc_postponed_event_wait(tsd_t *tsd) {
59 return TE_MIN_START_WAIT;
60 }
61
62 void
peak_alloc_event_handler(tsd_t * tsd,uint64_t elapsed)63 peak_alloc_event_handler(tsd_t *tsd, uint64_t elapsed) {
64 peak_event_update(tsd);
65 peak_event_activity_callback(tsd);
66 }
67
68 uint64_t
peak_dalloc_new_event_wait(tsd_t * tsd)69 peak_dalloc_new_event_wait(tsd_t *tsd) {
70 return PEAK_EVENT_WAIT;
71 }
72
73 uint64_t
peak_dalloc_postponed_event_wait(tsd_t * tsd)74 peak_dalloc_postponed_event_wait(tsd_t *tsd) {
75 return TE_MIN_START_WAIT;
76 }
77
78 void
peak_dalloc_event_handler(tsd_t * tsd,uint64_t elapsed)79 peak_dalloc_event_handler(tsd_t *tsd, uint64_t elapsed) {
80 peak_event_update(tsd);
81 peak_event_activity_callback(tsd);
82 }
83