summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2011-09-29 17:00:59 +0000
committerShaun Ruffell <sruffell@digium.com>2011-09-29 17:00:59 +0000
commit29344c69579f86672d3e1583f36c75efb054ad8a (patch)
treee763bbf4f684990b491823ec5a1fff3085e53efa
parent2883bd316cf1470a7de65e3ad2247048cbd032ef (diff)
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@digium.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/trunk@10216 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rw-r--r--dahdi_test.c43
1 files 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++;
}