]> rtime.felk.cvut.cz Git - can-benchmark.git/blobdiff - latester/latester.c
Latester can create historgrams from userspace timestamps
[can-benchmark.git] / latester / latester.c
index 85288f75fec923477850ff012cc6ba7f9faecc09..f4185671a1e89196a838cd1572d1ebe7d654e88c 100644 (file)
@@ -60,6 +60,7 @@ struct options {
        FILE *file;
        FILE *histogram;
        int length;
+       int userhist;
 };
 
 struct options opt = {
@@ -228,9 +229,15 @@ static inline unsigned get_msg_latency_us(struct msg_info *mi)
 {
        struct timespec diff;
        if (num_interfaces == 3)
-               timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_rx_onwire_kern);
+               if (opt.userhist)
+                       timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_rx_onwire_kern);
+               else
+                       timespec_subtract(&diff, &mi->ts_rx_final, &mi->ts_rx_onwire);
        else
-               timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_sent);
+               if (opt.userhist)
+                       timespec_subtract(&diff, &mi->ts_rx_final, &mi->ts_sent);
+               else
+                       timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_sent);
        return diff.tv_sec * 1000000 + diff.tv_nsec/1000;
 }
 
@@ -268,7 +275,7 @@ static inline int sock_get_if_index(int s, const char *if_name)
 
 static inline get_tstamp(struct timespec *ts)
 {
-       clock_gettime(CLOCK_MONOTONIC, ts);
+       clock_gettime(CLOCK_REALTIME, ts);
 }
 
 int send_frame(int socket)
@@ -282,7 +289,7 @@ int send_frame(int socket)
 
        MEMSET_ZERO(frame);
        i = curr_msg+1;
-       while (msg_infos[i].id != 0 && i != curr_msg) {
+       while (msg_infos[i].id != -1 && i != curr_msg) {
                i++;
                if (i >= MAX_INFOS)
                        i = 0;
@@ -310,7 +317,7 @@ int send_frame(int socket)
 
 void msg_info_free(struct msg_info *mi)
 {
-       mi->id = 0;
+       mi->id = -1;
 }
 
 static inline void get_next_timeout(struct timespec *timeout)
@@ -546,6 +553,7 @@ struct poptOption optionsTable[] = {
        { "file",   'f', POPT_ARG_STRING,                         NULL, 'f',         "File where to store results", "filename"},
        { "histogram", 'h', POPT_ARG_STRING,                      NULL, 'h',         "Store histogram in file", "filename"},
        { "length", 'l', POPT_ARG_INT|POPT_ARGFLAG_SHOW_DEFAULT,  &opt.length, 0,    "The length of generated messages", "bytes"},
+       { "userhist", 'u', POPT_ARG_NONE,                         &opt.userhist, 0,  "Generate histogram from userspace timestamps"},
        POPT_AUTOHELP
        { NULL, 0, 0, NULL, 0 }
 };
@@ -597,7 +605,7 @@ int main(int argc, const char *argv[])
 {
        pthread_t thread;
        sigset_t set;
-       int ret;
+       int ret, i;
 
        parse_options(argc, argv);
 
@@ -606,6 +614,9 @@ int main(int argc, const char *argv[])
        signal(SIGINT, term_handler);
        signal(SIGTERM, term_handler);
 
+       for (i=0; i<MAX_INFOS; i++)
+               msg_infos[i].id = -1;
+
        if (opt.histogram) {
                histogram_init(&histogram, 5000000, 1);
        }