[dahdi-commits] sruffell: tools/trunk r10216 - /tools/trunk/dahdi_test.c

SVN commits to the DAHDI project dahdi-commits at lists.digium.com
Thu Sep 29 12:01:02 CDT 2011


Author: sruffell
Date: Thu Sep 29 12:00:59 2011
New Revision: 10216

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=10216
Log:
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 <sruffell at digium.com>

Modified:
    tools/trunk/dahdi_test.c

Modified: tools/trunk/dahdi_test.c
URL: http://svnview.digium.com/svn/dahdi/tools/trunk/dahdi_test.c?view=diff&rev=10216&r1=10215&r2=10216
==============================================================================
--- tools/trunk/dahdi_test.c (original)
+++ tools/trunk/dahdi_test.c Thu Sep 29 12:00:59 2011
@@ -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 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 @@
 		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++;
 		}




More information about the dahdi-commits mailing list