1*277b6efdSDavid du Colombier /*
2*277b6efdSDavid du Colombier * high-watermark measurements
3*277b6efdSDavid du Colombier */
4*277b6efdSDavid du Colombier #include "u.h"
5*277b6efdSDavid du Colombier #include "../port/lib.h"
6*277b6efdSDavid du Colombier #include "mem.h"
7*277b6efdSDavid du Colombier #include "dat.h"
8*277b6efdSDavid du Colombier #include "fns.h"
9*277b6efdSDavid du Colombier
10*277b6efdSDavid du Colombier void
initmark(Watermark * wp,int max,char * name)11*277b6efdSDavid du Colombier initmark(Watermark *wp, int max, char *name)
12*277b6efdSDavid du Colombier {
13*277b6efdSDavid du Colombier memset(wp, 0, sizeof *wp);
14*277b6efdSDavid du Colombier wp->max = max;
15*277b6efdSDavid du Colombier wp->name = name;
16*277b6efdSDavid du Colombier }
17*277b6efdSDavid du Colombier
18*277b6efdSDavid du Colombier void
notemark(Watermark * wp,int val)19*277b6efdSDavid du Colombier notemark(Watermark *wp, int val)
20*277b6efdSDavid du Colombier {
21*277b6efdSDavid du Colombier /* enforce obvious limits */
22*277b6efdSDavid du Colombier if (val < 0)
23*277b6efdSDavid du Colombier val = 0;
24*277b6efdSDavid du Colombier else if (val > wp->max)
25*277b6efdSDavid du Colombier val = wp->max;
26*277b6efdSDavid du Colombier
27*277b6efdSDavid du Colombier if (val > wp->highwater) {
28*277b6efdSDavid du Colombier wp->highwater = val;
29*277b6efdSDavid du Colombier if (val == wp->max && wp->curr < val)
30*277b6efdSDavid du Colombier wp->hitmax++;
31*277b6efdSDavid du Colombier }
32*277b6efdSDavid du Colombier wp->curr = val;
33*277b6efdSDavid du Colombier }
34*277b6efdSDavid du Colombier
35*277b6efdSDavid du Colombier char *
seprintmark(char * buf,char * ebuf,Watermark * wp)36*277b6efdSDavid du Colombier seprintmark(char *buf, char *ebuf, Watermark *wp)
37*277b6efdSDavid du Colombier {
38*277b6efdSDavid du Colombier return seprint(buf, ebuf, "%s:\thighwater %d/%d curr %d hitmax %d\n",
39*277b6efdSDavid du Colombier wp->name, wp->highwater, wp->max, wp->curr, wp->hitmax);
40*277b6efdSDavid du Colombier }
41