From 78584da122f21761398147bf946c9ede29af342a Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Thu, 29 Sep 2011 17:00:59 +0000 Subject: [PATCH] dahdi_test: Enforce range from 0.0% - 100.0% for accuracy. Also makes sure that the percentage output from the verbose and non-verbose modes of timer_test are the same and print a cumulative accuracy which smooths out the jitter for each pass. If the time it takes to read in 1 second worth of data is longer than 1 second accuracy will be 0%. (closes issue #18573) Reported by: smurfix Signed-off-by: Shaun Ruffell git-svn-id: http://svn.astersk.org/svn/dahdi/tools/trunk@10216 17933a7a-c749-41c5-a318-cba88f637d49 --- dahdi_test.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/dahdi_test.c b/dahdi_test.c index ed71443..d07a1f6 100644 --- a/dahdi_test.c +++ b/dahdi_test.c @@ -40,17 +40,32 @@ #define SIZE 8000 +static int verbose; static int pass = 0; static float best = 0.0; static float worst = 100.0; static double total = 0.0; -static double delay_total = 0.0; +static double total_time = 0.0; +static double total_count = 0.0; + +static inline float _fmin(float a, float b) +{ + return (a < b) ? a : b; +} + +static double calculate_accuracy(double count, double ms) +{ + return ((count - _fmin(count, fabs(count - ms))) / count) * 100.0; +} void hup_handler(int sig) { + double accuracy = calculate_accuracy(total_count, total_time); printf("\n--- Results after %d passes ---\n", pass); - printf("Best: %.3f -- Worst: %.3f -- Average: %f, Difference: %f\n", - best, worst, pass ? total/pass : 100.00, pass ? delay_total/pass : 100); + printf("Best: %.3f%% -- Worst: %.3f%% -- Average: %f%%\n", + best, worst, pass ? total/pass : 100.00); + printf("Cummulative Accuracy (not per pass): %0.3f\n", + pass ? accuracy : 0.0); exit(0); } @@ -79,9 +94,7 @@ int main(int argc, char *argv[]) int count = 0; int seconds = 0; int curarg = 1; - int verbose = 0; char buf[8192]; - float score; float ms; struct timeval start, now; fd = open("/dev/dahdi/pseudo", O_RDWR); @@ -140,23 +153,23 @@ int main(int argc, char *argv[]) ms += (now.tv_sec - start.tv_sec) * 8000; ms += (now.tv_usec - start.tv_usec) / 125.0; if (count >= SIZE) { - double percent = 100.0 * (count - ms) / count; + const double percent = calculate_accuracy(count, ms); if (verbose) { printf("\n%d samples in %0.3f system clock sample intervals (%.3f%%)", - count, ms, 100 - percent); + count, ms, percent); } else if (pass > 0 && (pass % 8) == 0) { printf("\n"); } - score = 100.0 - fabs(percent); - if (score > best) - best = score; - if (score < worst) - worst = score; + if (percent > best) + best = percent; + if (percent < worst) + worst = percent; if (!verbose) - printf("%.3f%% ", score); - total += score; - delay_total += 100 - percent; + printf("%.3f%% ", percent); + total += percent; fflush(stdout); + total_count += count; + total_time += ms; count = 0; pass++; }