]> rtime.felk.cvut.cz Git - can-benchmark.git/blobdiff - latester/histogram.h
latester: Add percentiles to statistics
[can-benchmark.git] / latester / histogram.h
index 80d629e32d4a9518c90884d54bfabdde3847863a..b7c1cca7a3ed0f8abb6f7b989462693ab009b1d2 100644 (file)
@@ -52,5 +52,41 @@ void histogram_fprint(struct histogram *h, FILE *f)
 }
 
 
+struct histogram_stats {
+       unsigned count;
+       unsigned long long sum;
+       unsigned avg;
+       unsigned percentile[100];
+};
+
+void histogram_stats(struct histogram *h, struct histogram_stats *s)
+{
+       unsigned long long sum;
+       unsigned i, j;
+
+       if (!s)
+               return;
+
+       memset(s, 0, sizeof(*s));
+
+       for (i = 0; i < h->allocated; i++) {
+               s->count += h->data[i];
+               s->sum += h->data[i] * i * h->resolution;
+       }
+       if (s->count == 0)
+               return;
+
+       s->avg = s->sum / s->count;
+
+       for (i = 0, j = 0, sum = 0; i < 100; i++) {
+               while (sum <= i * s->count / 100)
+                       sum += h->data[j++];
+
+               s->percentile[i] = (j-1) * h->resolution;
+       }
+       while (sum < i * s->count / 100)
+               sum += h->data[j++];
+       s->percentile[100] = (j-1) * h->resolution;
+}
 
 #endif