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.astersk.org/svn/dahdi/tools/trunk@10216 17933a7a-c749-41c5-a318-cba88f637d49
This commit is contained in:
parent
cbb0252a6a
commit
78584da122
43
dahdi_test.c
43
dahdi_test.c
@ -40,17 +40,32 @@
|
|||||||
|
|
||||||
#define SIZE 8000
|
#define SIZE 8000
|
||||||
|
|
||||||
|
static int verbose;
|
||||||
static int pass = 0;
|
static int pass = 0;
|
||||||
static float best = 0.0;
|
static float best = 0.0;
|
||||||
static float worst = 100.0;
|
static float worst = 100.0;
|
||||||
static double total = 0.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)
|
void hup_handler(int sig)
|
||||||
{
|
{
|
||||||
|
double accuracy = calculate_accuracy(total_count, total_time);
|
||||||
printf("\n--- Results after %d passes ---\n", pass);
|
printf("\n--- Results after %d passes ---\n", pass);
|
||||||
printf("Best: %.3f -- Worst: %.3f -- Average: %f, Difference: %f\n",
|
printf("Best: %.3f%% -- Worst: %.3f%% -- Average: %f%%\n",
|
||||||
best, worst, pass ? total/pass : 100.00, pass ? delay_total/pass : 100);
|
best, worst, pass ? total/pass : 100.00);
|
||||||
|
printf("Cummulative Accuracy (not per pass): %0.3f\n",
|
||||||
|
pass ? accuracy : 0.0);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,9 +94,7 @@ int main(int argc, char *argv[])
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
int seconds = 0;
|
int seconds = 0;
|
||||||
int curarg = 1;
|
int curarg = 1;
|
||||||
int verbose = 0;
|
|
||||||
char buf[8192];
|
char buf[8192];
|
||||||
float score;
|
|
||||||
float ms;
|
float ms;
|
||||||
struct timeval start, now;
|
struct timeval start, now;
|
||||||
fd = open("/dev/dahdi/pseudo", O_RDWR);
|
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_sec - start.tv_sec) * 8000;
|
||||||
ms += (now.tv_usec - start.tv_usec) / 125.0;
|
ms += (now.tv_usec - start.tv_usec) / 125.0;
|
||||||
if (count >= SIZE) {
|
if (count >= SIZE) {
|
||||||
double percent = 100.0 * (count - ms) / count;
|
const double percent = calculate_accuracy(count, ms);
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
printf("\n%d samples in %0.3f system clock sample intervals (%.3f%%)",
|
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) {
|
} else if (pass > 0 && (pass % 8) == 0) {
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
score = 100.0 - fabs(percent);
|
if (percent > best)
|
||||||
if (score > best)
|
best = percent;
|
||||||
best = score;
|
if (percent < worst)
|
||||||
if (score < worst)
|
worst = percent;
|
||||||
worst = score;
|
|
||||||
if (!verbose)
|
if (!verbose)
|
||||||
printf("%.3f%% ", score);
|
printf("%.3f%% ", percent);
|
||||||
total += score;
|
total += percent;
|
||||||
delay_total += 100 - percent;
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
total_count += count;
|
||||||
|
total_time += ms;
|
||||||
count = 0;
|
count = 0;
|
||||||
pass++;
|
pass++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user