1#ifndef JEMALLOC_INTERNAL_PEAK_H
2#define JEMALLOC_INTERNAL_PEAK_H
3
4typedef struct peak_s peak_t;
5struct peak_s {
6 /* The highest recorded peak value, after adjustment (see below). */
7 uint64_t cur_max;
8 /*
9 * The difference between alloc and dalloc at the last set_zero call;
10 * this lets us cancel out the appropriate amount of excess.
11 */
12 uint64_t adjustment;
13};
14
15#define PEAK_INITIALIZER {0, 0}
16
17static inline uint64_t
18peak_max(peak_t *peak) {
19 return peak->cur_max;
20}
21
22static inline void
23peak_update(peak_t *peak, uint64_t alloc, uint64_t dalloc) {
24 int64_t candidate_max = (int64_t)(alloc - dalloc - peak->adjustment);
25 if (candidate_max > (int64_t)peak->cur_max) {
26 peak->cur_max = candidate_max;
27 }
28}
29
30/* Resets the counter to zero; all peaks are now relative to this point. */
31static inline void
32peak_set_zero(peak_t *peak, uint64_t alloc, uint64_t dalloc) {
33 peak->cur_max = 0;
34 peak->adjustment = alloc - dalloc;
35}
36
37#endif /* JEMALLOC_INTERNAL_PEAK_H */
38