From e854bea3b6837b22e9b6a69acbb28b4c8b470c81 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 19 Sep 2024 19:22:54 +0200 Subject: misc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- avg.c | 55 +++++++++++++++++++++++++------------------------------ 1 file changed, 25 insertions(+), 30 deletions(-) (limited to 'avg.c') diff --git a/avg.c b/avg.c index 4078c50..f24b174 100644 --- a/avg.c +++ b/avg.c @@ -5,16 +5,11 @@ /* TODO deal with machine and process suspension */ -static struct timespec write_average_begin_times[5]; -static off_t write_average_amounts[ELEMSOF(write_average_begin_times)] = {0}; -static int write_average_i = 0; - - static int -was_write_average_overrun(int i, const struct timespec *now, int seconds) +was_write_average_overrun(int i, int seconds, const struct status *s) { struct timespec diff; - libsimple_difftimespec(&diff, now, &write_average_begin_times[i]); + libsimple_difftimespec(&diff, &s->now, &s->write_average_begin_times[i]); if (diff.tv_sec >= seconds) return 1; if (diff.tv_sec == seconds - 1 && diff.tv_nsec >= DECISECONDS(9)) @@ -24,48 +19,48 @@ was_write_average_overrun(int i, const struct timespec *now, int seconds) static void -shift_write_average(void) +shift_write_average(struct status *s) { - write_average_i--; - memmove(&write_average_begin_times[0], &write_average_begin_times[1], - (size_t)write_average_i * sizeof(*write_average_begin_times)); - memmove(&write_average_amounts[0], &write_average_amounts[1], - (size_t)write_average_i * sizeof(*write_average_amounts)); + s->write_average_i -= 1; + memmove(&s->write_average_begin_times[0], &s->write_average_begin_times[1], + (size_t)s->write_average_i * sizeof(*s->write_average_begin_times)); + memmove(&s->write_average_amounts[0], &s->write_average_amounts[1], + (size_t)s->write_average_i * sizeof(*s->write_average_amounts)); } void -wravg_init(const struct timespec *start_time) +wravg_init(const struct timespec *start_time, struct status *s) { - write_average_begin_times[0] = *start_time; + s->write_average_begin_times[0] = *start_time; } void -wravg_update_write(ssize_t amount) +wravg_update_write(ssize_t amount, struct status *s) { if (amount > 0) - write_average_amounts[write_average_i] += (off_t)amount; + s->write_average_amounts[s->write_average_i] += (off_t)amount; } void -wravg_update_time(const struct timespec *now) +wravg_update_time(struct status *s) { - if (was_write_average_overrun(write_average_i, now, 1)) { - write_average_i++; - if (write_average_i == ELEMSOF(write_average_amounts)) - shift_write_average(); - write_average_begin_times[write_average_i] = *now; - write_average_amounts[write_average_i] = 0; + if (was_write_average_overrun(s->write_average_i, 1, s)) { + s->write_average_i += 1; + if (s->write_average_i == WRAVG_STEPS) + shift_write_average(s); + s->write_average_begin_times[s->write_average_i] = s->now; + s->write_average_amounts[s->write_average_i] = 0; } - while (write_average_i && was_write_average_overrun(0, now, (int)ELEMSOF(write_average_amounts))) - shift_write_average(); + while (s->write_average_i && was_write_average_overrun(0, WRAVG_STEPS, s)) + shift_write_average(s); } const char * -wravg_get(const struct timespec *now) +wravg_get(struct status *s) { static char buf[512]; @@ -74,10 +69,10 @@ wravg_get(const struct timespec *now) double write_average; int i; - for (i = 0; i <= write_average_i; i++) - write_average_sum += write_average_amounts[i]; + for (i = 0; i <= s->write_average_i; i++) + write_average_sum += s->write_average_amounts[i]; - libsimple_difftimespec(&write_average_time, now, &write_average_begin_times[0]); + libsimple_difftimespec(&write_average_time, &s->now, &s->write_average_begin_times[0]); if (write_average_time.tv_sec < 0) return "-"; -- cgit v1.2.3-70-g09d2