Home | History | Annotate | Line # | Download | only in internal
      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
     18 peak_max(peak_t *peak) {
     19 	return peak->cur_max;
     20 }
     21 
     22 static inline void
     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
     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