summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Lespiau <damien.lespiau@intel.com>2015-06-27 09:45:42 +0100
committerDamien Lespiau <damien.lespiau@intel.com>2015-06-27 16:04:07 +0100
commit4a89a841a11cb872f9b0b0959c306fcb96f87d75 (patch)
tree63c61d77190a97534af84167e596b641f38685de
parent87009f3d7b155bc2c650d1395f74a2c6e80f0cf6 (diff)
stats: Add functions to retrieve min/max values of the dataset
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
-rw-r--r--lib/igt_stats.c33
-rw-r--r--lib/igt_stats.h3
-rw-r--r--lib/tests/igt_stats.c12
3 files changed, 48 insertions, 0 deletions
diff --git a/lib/igt_stats.c b/lib/igt_stats.c
index bd055503..477d2043 100644
--- a/lib/igt_stats.c
+++ b/lib/igt_stats.c
@@ -28,6 +28,8 @@
#include "igt_core.h"
#include "igt_stats.h"
+#define U64_MAX ((uint64_t)~0ULL)
+
/**
* SECTION:igt_stats
* @short_description: Tools for statistical analysis
@@ -78,6 +80,9 @@ void igt_stats_init(igt_stats_t *stats, unsigned int capacity)
stats->values = calloc(capacity, sizeof(*stats->values));
igt_assert(stats->values);
stats->capacity = capacity;
+
+ stats->min = U64_MAX;
+ stats->max = 0;
}
/**
@@ -151,7 +156,35 @@ void igt_stats_push(igt_stats_t *stats, uint64_t value)
{
igt_assert(stats->n_values < stats->capacity);
stats->values[stats->n_values++] = value;
+
stats->mean_variance_valid = false;
+
+ if (value < stats->min)
+ stats->min = value;
+ if (value > stats->max)
+ stats->max = value;
+}
+
+/**
+ * igt_stats_get_min:
+ * @stats: An #igt_stats_t instance
+ *
+ * Retrieves the minimal value in @stats
+ */
+uint64_t igt_stats_get_min(igt_stats_t *stats)
+{
+ return stats->min;
+}
+
+/**
+ * igt_stats_get_max:
+ * @stats: An #igt_stats_t instance
+ *
+ * Retrieves the maximum value in @stats
+ */
+uint64_t igt_stats_get_max(igt_stats_t *stats)
+{
+ return stats->max;
}
/*
diff --git a/lib/igt_stats.h b/lib/igt_stats.h
index ebc28ca3..145b77b4 100644
--- a/lib/igt_stats.h
+++ b/lib/igt_stats.h
@@ -41,6 +41,7 @@ typedef struct {
unsigned int capacity;
unsigned int is_population : 1;
unsigned int mean_variance_valid : 1;
+ uint64_t min, max;
double mean, variance;
} igt_stats_t;
@@ -49,6 +50,8 @@ void igt_stats_fini(igt_stats_t *stats);
bool igt_stats_is_population(igt_stats_t *stats);
void igt_stats_set_population(igt_stats_t *stats, bool full_population);
void igt_stats_push(igt_stats_t *stats, uint64_t value);
+uint64_t igt_stats_get_min(igt_stats_t *stats);
+uint64_t igt_stats_get_max(igt_stats_t *stats);
double igt_stats_get_mean(igt_stats_t *stats);
double igt_stats_get_variance(igt_stats_t *stats);
double igt_stats_get_std_deviation(igt_stats_t *stats);
diff --git a/lib/tests/igt_stats.c b/lib/tests/igt_stats.c
index 6916f251..dc5fe39c 100644
--- a/lib/tests/igt_stats.c
+++ b/lib/tests/igt_stats.c
@@ -57,6 +57,17 @@ static void test_init(void)
igt_assert(igt_stats_is_population(&stats) == false);
}
+static void test_min_max(void)
+{
+ igt_stats_t stats;
+
+ igt_stats_init(&stats, 5);
+ push_fixture_1(&stats);
+
+ igt_assert(igt_stats_get_min(&stats) == 2);
+ igt_assert(igt_stats_get_max(&stats) == 10);
+}
+
static void test_mean(void)
{
igt_stats_t stats;
@@ -127,6 +138,7 @@ igt_simple_main
{
test_init_zero();
test_init();
+ test_min_max();
test_mean();
test_invalidate_mean();
test_std_deviation();