xref: /src/contrib/jemalloc/include/jemalloc/internal/peak.h (revision c43cad87172039ccf38172129c79755ea79e6102)
1 #ifndef JEMALLOC_INTERNAL_PEAK_H
2 #define JEMALLOC_INTERNAL_PEAK_H
3 
4 typedef struct peak_s peak_t;
5 struct 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 
17 static inline uint64_t
peak_max(peak_t * peak)18 peak_max(peak_t *peak) {
19 	return peak->cur_max;
20 }
21 
22 static inline void
peak_update(peak_t * peak,uint64_t alloc,uint64_t dalloc)23 peak_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. */
31 static inline void
peak_set_zero(peak_t * peak,uint64_t alloc,uint64_t dalloc)32 peak_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