1*e02d1162SDavid du Colombier /*
2*e02d1162SDavid du Colombier * high-watermark measurements
3*e02d1162SDavid du Colombier */
4217e9e83SDavid du Colombier #include "u.h"
5217e9e83SDavid du Colombier #include "../port/lib.h"
6217e9e83SDavid du Colombier #include "mem.h"
7217e9e83SDavid du Colombier #include "dat.h"
8217e9e83SDavid du Colombier #include "fns.h"
9217e9e83SDavid du Colombier
10217e9e83SDavid du Colombier void
initmark(Watermark * wp,int max,char * name)11217e9e83SDavid du Colombier initmark(Watermark *wp, int max, char *name)
12217e9e83SDavid du Colombier {
13217e9e83SDavid du Colombier memset(wp, 0, sizeof *wp);
14217e9e83SDavid du Colombier wp->max = max;
15217e9e83SDavid du Colombier wp->name = name;
16217e9e83SDavid du Colombier }
17217e9e83SDavid du Colombier
18217e9e83SDavid du Colombier void
notemark(Watermark * wp,int val)19217e9e83SDavid du Colombier notemark(Watermark *wp, int val)
20217e9e83SDavid du Colombier {
21217e9e83SDavid du Colombier /* enforce obvious limits */
22217e9e83SDavid du Colombier if (val < 0)
23217e9e83SDavid du Colombier val = 0;
24217e9e83SDavid du Colombier else if (val > wp->max)
25217e9e83SDavid du Colombier val = wp->max;
26217e9e83SDavid du Colombier
27217e9e83SDavid du Colombier if (val > wp->highwater) {
28217e9e83SDavid du Colombier wp->highwater = val;
29217e9e83SDavid du Colombier if (val == wp->max && wp->curr < val)
30217e9e83SDavid du Colombier wp->hitmax++;
31217e9e83SDavid du Colombier }
32217e9e83SDavid du Colombier wp->curr = val;
33217e9e83SDavid du Colombier }
34217e9e83SDavid du Colombier
35217e9e83SDavid du Colombier char *
seprintmark(char * buf,char * ebuf,Watermark * wp)36217e9e83SDavid du Colombier seprintmark(char *buf, char *ebuf, Watermark *wp)
37217e9e83SDavid du Colombier {
38217e9e83SDavid du Colombier return seprint(buf, ebuf, "%s:\thighwater %d/%d curr %d hitmax %d\n",
39217e9e83SDavid du Colombier wp->name, wp->highwater, wp->max, wp->curr, wp->hitmax);
40217e9e83SDavid du Colombier }
41