]> rtime.felk.cvut.cz Git - can-benchmark.git/blobdiff - latester/latester.c
latester update
[can-benchmark.git] / latester / latester.c
index 63d96e5381d5f549bac39dc823a3b9fe618f0083..55234dd01fd8b5697ec8b845813edf2d74a7737b 100644 (file)
@@ -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);