Index: tools/Stats.h |
diff --git a/tools/Stats.h b/tools/Stats.h |
index 5128897d8563e0df29fdc1dc82b2467766a9630d..67bd45d863737944fc83728daf25a31be801cf6d 100644 |
--- a/tools/Stats.h |
+++ b/tools/Stats.h |
@@ -1,8 +1,13 @@ |
#ifndef Stats_DEFINED |
#define Stats_DEFINED |
+#include <math.h> |
+ |
+#include "SkString.h" |
#include "SkTSort.h" |
+static const char* kBars[] = { "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" }; |
+ |
struct Stats { |
Stats(const double samples[], int n) { |
min = samples[0]; |
@@ -28,13 +33,25 @@ struct Stats { |
memcpy(sorted.get(), samples, n * sizeof(double)); |
SkTQSort(sorted.get(), sorted.get() + n - 1); |
median = sorted[n/2]; |
+ |
+ for (int i = 0; i < n; i++) { |
+ double s = samples[i]; |
+ // Normalize samples to [min, max] in as many quanta as we have distinct bars to print. |
+ s -= min; |
+ s /= (max - min); |
+ s *= (SK_ARRAY_COUNT(kBars) - 1); |
+ const size_t bar = (size_t)round(s); |
+ SK_ALWAYSBREAK(bar < SK_ARRAY_COUNT(kBars)); |
+ plot.append(kBars[bar]); |
+ } |
} |
double min; |
double max; |
- double mean; // Estimate of population mean. |
- double var; // Estimate of population variance. |
+ double mean; // Estimate of population mean. |
+ double var; // Estimate of population variance. |
double median; |
+ SkString plot; // A single-line bar chart (_not_ histogram) of the samples. |
}; |
#endif//Stats_DEFINED |