Warn user of clock offsets do not match
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 30 Jan 2012 17:11:01 +0000 (12:11 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 30 Jan 2012 17:11:01 +0000 (12:11 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
converter/babeltrace.c

index a5499bae5460a9a6b594fc1e4ee462079b262cf4..0cdd42e3611442734efcbe13d33408c260e42ec7 100644 (file)
@@ -36,6 +36,7 @@
 #include <ftw.h>
 #include <dirent.h>
 #include <unistd.h>
+#include <inttypes.h>
 
 #include <babeltrace/ctf-ir/metadata.h>        /* for clocks */
 
@@ -364,10 +365,37 @@ static void clock_add(gpointer key, gpointer value, gpointer user_data)
                v = t_clock->name;
        else
                v = t_clock->uuid;
-       if (v)
-               g_hash_table_insert(tc_clocks,
-                       (gpointer) (unsigned long) v,
-                       value);
+       if (v) {
+               struct ctf_clock *tc_clock;
+
+               tc_clock = g_hash_table_lookup(tc_clocks,
+                               (gpointer) (unsigned long) v);
+               if (!tc_clock) {
+                       g_hash_table_insert(tc_clocks,
+                               (gpointer) (unsigned long) v,
+                               value);
+               } else {
+                       int64_t diff_ns;
+
+                       /*
+                        * Check that the offsets match. If not, warn
+                        * the user that we do an arbitrary choice.
+                        */
+                       diff_ns = tc_clock->offset_s;
+                       diff_ns -= t_clock->offset_s;
+                       diff_ns *= 1000000000ULL;
+                       diff_ns += tc_clock->offset;
+                       diff_ns -= t_clock->offset;
+                       printf_debug("Clock \"%s\" offset between traces has a delta of %" PRIu64 " ns.",
+                               g_quark_to_string(tc_clock->name),
+                               diff_ns < 0 ? -diff_ns : diff_ns);
+                       if (diff_ns > 10000) {
+                               fprintf(stderr, "[warning] Clock \"%s\" offset differs between traces (delta %" PRIu64 " ns). Choosing one arbitrarily.\n",
+                               g_quark_to_string(tc_clock->name),
+                               diff_ns < 0 ? -diff_ns : diff_ns);
+                       }
+               }
+       }
 }
 
 /*
This page took 0.025008 seconds and 4 git commands to generate.