1*d83cc019SAndroid Build Coastguard Worker /* 2*d83cc019SAndroid Build Coastguard Worker * Copyright © 2015 Intel Corporation 3*d83cc019SAndroid Build Coastguard Worker * 4*d83cc019SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 5*d83cc019SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 6*d83cc019SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 7*d83cc019SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*d83cc019SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the 9*d83cc019SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions: 10*d83cc019SAndroid Build Coastguard Worker * 11*d83cc019SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next 12*d83cc019SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 13*d83cc019SAndroid Build Coastguard Worker * Software. 14*d83cc019SAndroid Build Coastguard Worker * 15*d83cc019SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*d83cc019SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*d83cc019SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18*d83cc019SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*d83cc019SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20*d83cc019SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21*d83cc019SAndroid Build Coastguard Worker * IN THE SOFTWARE. 22*d83cc019SAndroid Build Coastguard Worker * 23*d83cc019SAndroid Build Coastguard Worker */ 24*d83cc019SAndroid Build Coastguard Worker 25*d83cc019SAndroid Build Coastguard Worker #ifndef __IGT_STATS_H__ 26*d83cc019SAndroid Build Coastguard Worker #define __IGT_STATS_H__ 27*d83cc019SAndroid Build Coastguard Worker 28*d83cc019SAndroid Build Coastguard Worker #include <stdint.h> 29*d83cc019SAndroid Build Coastguard Worker #include <stdbool.h> 30*d83cc019SAndroid Build Coastguard Worker #include <math.h> 31*d83cc019SAndroid Build Coastguard Worker 32*d83cc019SAndroid Build Coastguard Worker #ifdef __cplusplus 33*d83cc019SAndroid Build Coastguard Worker extern "C" { 34*d83cc019SAndroid Build Coastguard Worker #endif 35*d83cc019SAndroid Build Coastguard Worker 36*d83cc019SAndroid Build Coastguard Worker /** 37*d83cc019SAndroid Build Coastguard Worker * igt_stats_t: 38*d83cc019SAndroid Build Coastguard Worker * @values_u64: An array containing pushed integer values 39*d83cc019SAndroid Build Coastguard Worker * @is_float: Whether @values_f or @values_u64 is valid 40*d83cc019SAndroid Build Coastguard Worker * @values_f: An array containing pushed float values 41*d83cc019SAndroid Build Coastguard Worker * @n_values: The number of pushed values 42*d83cc019SAndroid Build Coastguard Worker */ 43*d83cc019SAndroid Build Coastguard Worker typedef struct { 44*d83cc019SAndroid Build Coastguard Worker unsigned int n_values; 45*d83cc019SAndroid Build Coastguard Worker unsigned int is_float : 1; 46*d83cc019SAndroid Build Coastguard Worker union { 47*d83cc019SAndroid Build Coastguard Worker uint64_t *values_u64; 48*d83cc019SAndroid Build Coastguard Worker double *values_f; 49*d83cc019SAndroid Build Coastguard Worker }; 50*d83cc019SAndroid Build Coastguard Worker 51*d83cc019SAndroid Build Coastguard Worker /*< private >*/ 52*d83cc019SAndroid Build Coastguard Worker unsigned int capacity; 53*d83cc019SAndroid Build Coastguard Worker unsigned int is_population : 1; 54*d83cc019SAndroid Build Coastguard Worker unsigned int mean_variance_valid : 1; 55*d83cc019SAndroid Build Coastguard Worker unsigned int sorted_array_valid : 1; 56*d83cc019SAndroid Build Coastguard Worker 57*d83cc019SAndroid Build Coastguard Worker uint64_t min, max; 58*d83cc019SAndroid Build Coastguard Worker double range[2]; 59*d83cc019SAndroid Build Coastguard Worker double mean, variance; 60*d83cc019SAndroid Build Coastguard Worker 61*d83cc019SAndroid Build Coastguard Worker union { 62*d83cc019SAndroid Build Coastguard Worker uint64_t *sorted_u64; 63*d83cc019SAndroid Build Coastguard Worker double *sorted_f; 64*d83cc019SAndroid Build Coastguard Worker }; 65*d83cc019SAndroid Build Coastguard Worker } igt_stats_t; 66*d83cc019SAndroid Build Coastguard Worker 67*d83cc019SAndroid Build Coastguard Worker void igt_stats_init(igt_stats_t *stats); 68*d83cc019SAndroid Build Coastguard Worker void igt_stats_init_with_size(igt_stats_t *stats, unsigned int capacity); 69*d83cc019SAndroid Build Coastguard Worker void igt_stats_fini(igt_stats_t *stats); 70*d83cc019SAndroid Build Coastguard Worker bool igt_stats_is_population(igt_stats_t *stats); 71*d83cc019SAndroid Build Coastguard Worker void igt_stats_set_population(igt_stats_t *stats, bool full_population); 72*d83cc019SAndroid Build Coastguard Worker void igt_stats_push(igt_stats_t *stats, uint64_t value); 73*d83cc019SAndroid Build Coastguard Worker void igt_stats_push_float(igt_stats_t *stats, double value); 74*d83cc019SAndroid Build Coastguard Worker void igt_stats_push_array(igt_stats_t *stats, 75*d83cc019SAndroid Build Coastguard Worker const uint64_t *values, unsigned int n_values); 76*d83cc019SAndroid Build Coastguard Worker uint64_t igt_stats_get_min(igt_stats_t *stats); 77*d83cc019SAndroid Build Coastguard Worker uint64_t igt_stats_get_max(igt_stats_t *stats); 78*d83cc019SAndroid Build Coastguard Worker uint64_t igt_stats_get_range(igt_stats_t *stats); 79*d83cc019SAndroid Build Coastguard Worker void igt_stats_get_quartiles(igt_stats_t *stats, 80*d83cc019SAndroid Build Coastguard Worker double *q1, double *q2, double *q3); 81*d83cc019SAndroid Build Coastguard Worker double igt_stats_get_iqr(igt_stats_t *stats); 82*d83cc019SAndroid Build Coastguard Worker double igt_stats_get_iqm(igt_stats_t *stats); 83*d83cc019SAndroid Build Coastguard Worker double igt_stats_get_mean(igt_stats_t *stats); 84*d83cc019SAndroid Build Coastguard Worker double igt_stats_get_trimean(igt_stats_t *stats); 85*d83cc019SAndroid Build Coastguard Worker double igt_stats_get_median(igt_stats_t *stats); 86*d83cc019SAndroid Build Coastguard Worker double igt_stats_get_variance(igt_stats_t *stats); 87*d83cc019SAndroid Build Coastguard Worker double igt_stats_get_std_deviation(igt_stats_t *stats); 88*d83cc019SAndroid Build Coastguard Worker 89*d83cc019SAndroid Build Coastguard Worker /** 90*d83cc019SAndroid Build Coastguard Worker * igt_mean: 91*d83cc019SAndroid Build Coastguard Worker * 92*d83cc019SAndroid Build Coastguard Worker * Structure to compute running statistical numbers. Needs to be initialized 93*d83cc019SAndroid Build Coastguard Worker * with igt_mean_init(). Read out data using igt_mean_get() and 94*d83cc019SAndroid Build Coastguard Worker * igt_mean_get_variance(). 95*d83cc019SAndroid Build Coastguard Worker */ 96*d83cc019SAndroid Build Coastguard Worker struct igt_mean { 97*d83cc019SAndroid Build Coastguard Worker /*< private >*/ 98*d83cc019SAndroid Build Coastguard Worker double mean, sq, min, max; 99*d83cc019SAndroid Build Coastguard Worker unsigned long count; 100*d83cc019SAndroid Build Coastguard Worker }; 101*d83cc019SAndroid Build Coastguard Worker 102*d83cc019SAndroid Build Coastguard Worker void igt_mean_init(struct igt_mean *m); 103*d83cc019SAndroid Build Coastguard Worker void igt_mean_add(struct igt_mean *m, double v); 104*d83cc019SAndroid Build Coastguard Worker double igt_mean_get(struct igt_mean *m); 105*d83cc019SAndroid Build Coastguard Worker double igt_mean_get_variance(struct igt_mean *m); 106*d83cc019SAndroid Build Coastguard Worker 107*d83cc019SAndroid Build Coastguard Worker #ifdef __cplusplus 108*d83cc019SAndroid Build Coastguard Worker } 109*d83cc019SAndroid Build Coastguard Worker #endif 110*d83cc019SAndroid Build Coastguard Worker 111*d83cc019SAndroid Build Coastguard Worker #endif /* __IGT_STATS_H__ */ 112