X-Git-Url: http://rtime.felk.cvut.cz/gitweb/can-benchmark.git/blobdiff_plain/119d82ff6134622d288d16b507b3a314d8508aea..674c0ded83b6568e54048a405e5c9876702090e8:/latester/latester.c diff --git a/latester/latester.c b/latester/latester.c index 63d96e5..55234dd 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -103,22 +103,23 @@ static inline char *tstamp_str(const void *ctx, struct timespec *tstamp) tstamp->tv_sec, tstamp->tv_nsec/1000); } -void print_msg_info(struct msg_info *mi) +void msg_info_print(FILE *f, struct msg_info *mi) { struct timespec diff; void *local = talloc_new (NULL); + static long num = 0; #define S(ts) tstamp_str(local, &ts) #define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff)) if (num_interfaces == 2) - printf("%s -> %s (%s) = %s (%s)\n", - S(mi->ts_sent), S(mi->ts_rx_final_kern), S(mi->ts_rx_final), + fprintf(f, "%ld: %s -> %s (%s) = %s (%s)\n", + num, S(mi->ts_sent), S(mi->ts_rx_final_kern), S(mi->ts_rx_final), DIFF(mi->ts_sent, mi->ts_rx_final_kern), DIFF(mi->ts_sent, mi->ts_rx_final)); else - printf("%s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n", - S(mi->ts_sent), + fprintf(f, "%ld: %s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n", + num, S(mi->ts_sent), S(mi->ts_rx_onwire_kern), S(mi->ts_rx_onwire), S(mi->ts_rx_final_kern), S(mi->ts_rx_final), DIFF(mi->ts_sent, mi->ts_rx_onwire_kern), @@ -127,6 +128,7 @@ void print_msg_info(struct msg_info *mi) DIFF(mi->ts_rx_onwire, mi->ts_rx_final)); #undef S #undef DIFF + num++; talloc_free (local); } @@ -134,17 +136,18 @@ int msg_info_store(FILE *f, struct msg_info *mi) { struct timespec diff; void *local = talloc_new (NULL); + static long num = 0; #define S(ts) tstamp_str(local, &ts) #define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff)) if (num_interfaces == 2) - fprintf(f, "%d %d %s\n", - mi->id, mi->length, + fprintf(f, "%ld %d %d %s\n", + num, mi->id, mi->length, DIFF(mi->ts_sent, mi->ts_rx_final_kern)); else - fprintf(f, "%d %d %s\n", - mi->id, mi->length, + fprintf(f, "%ld %d %d %s\n", + num, mi->id, mi->length, DIFF(mi->ts_rx_onwire_kern, mi->ts_rx_final_kern)); #undef S #undef DIFF @@ -562,7 +565,7 @@ int main(int argc, const char *argv[]) signal(SIGTERM, term_handler); if (opt.histogram) { - histogram_init(&histogram, 1000000, 1); + histogram_init(&histogram, 5000000, 1); } ret = pipe(completion_pipe); @@ -576,7 +579,8 @@ int main(int argc, const char *argv[]) struct timespec next, now, diff; clock_gettime(CLOCK_MONOTONIC, &next); - while (!finish_flag && (opt.count == 0 || count < opt.count)) { + int completed = 0; + while (!finish_flag && (opt.count == 0 || completed < opt.count)) { struct pollfd pfd[1]; pfd[0].fd = completion_pipe[0]; pfd[0].events = POLLIN; @@ -585,10 +589,14 @@ int main(int argc, const char *argv[]) error(1, errno, "poll main"); if (ret > 0 && (pfd[0].revents & POLLIN)) { struct msg_info *mi; - read(completion_pipe[0], &mi, sizeof(mi)); + int ret; + ret = read(completion_pipe[0], &mi, sizeof(mi)); + if (ret < sizeof(mi)) + error(1, errno, "read completion returned %d", ret); if (opt.file) - msg_info_store(opt.file, mi); + msg_info_print(opt.file, mi); msg_info_free(mi); + completed++; } clock_gettime(CLOCK_MONOTONIC, &now);