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. */
18void
19peak_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
26static void
27peak_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. */
38void
39peak_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
46uint64_t
47peak_event_max(tsd_t *tsd) {
48 peak_t *peak = tsd_peakp_get(tsd);
49 return peak_max(peak);
50}
51
52uint64_t
53peak_alloc_new_event_wait(tsd_t *tsd) {
54 return PEAK_EVENT_WAIT;
55}
56
57uint64_t
58peak_alloc_postponed_event_wait(tsd_t *tsd) {
59 return TE_MIN_START_WAIT;
60}
61
62void
63peak_alloc_event_handler(tsd_t *tsd, uint64_t elapsed) {
64 peak_event_update(tsd);
65 peak_event_activity_callback(tsd);
66}
67
68uint64_t
69peak_dalloc_new_event_wait(tsd_t *tsd) {
70 return PEAK_EVENT_WAIT;
71}
72
73uint64_t
74peak_dalloc_postponed_event_wait(tsd_t *tsd) {
75 return TE_MIN_START_WAIT;
76}
77
78void
79peak_dalloc_event_handler(tsd_t *tsd, uint64_t elapsed) {
80 peak_event_update(tsd);
81 peak_event_activity_callback(tsd);
82}
83