]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/mem/Meter.h
2 * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 #ifndef SQUID_SRC_MEM_METER_H
10 #define SQUID_SRC_MEM_METER_H
12 #include "SquidTime.h"
18 * object to track per-action memory usage (e.g. #idle objects)
23 Meter() : level(0), hwater_level(0), hwater_stamp(0) {}
25 /// flush the meter level back to 0, but leave peak records
26 void flush() {level
=0;}
28 ssize_t
currentLevel() const {return level
;}
29 ssize_t
peak() const {return hwater_level
;}
30 time_t peakTime() const {return hwater_stamp
;}
32 Meter
&operator ++() {++level
; checkHighWater(); return *this;}
33 Meter
&operator --() {--level
; return *this;}
35 Meter
&operator +=(ssize_t n
) { level
+= n
; checkHighWater(); return *this;}
36 Meter
&operator -=(ssize_t n
) { level
-= n
; return *this;}
39 /// check the high-water level of this meter and raise if necessary
40 /// recording the timestamp of last high-water peak change
41 void checkHighWater() {
42 if (hwater_level
< level
) {
44 hwater_stamp
= squid_curtime
? squid_curtime
: time(NULL
);
48 ssize_t level
; ///< current level (count or volume)
49 ssize_t hwater_level
; ///< high water mark
50 time_t hwater_stamp
; ///< timestamp of last high water mark change
55 #endif /* SQUID_SRC_MEM_METER_H */