From 70accc147c2372e8fc37d244525ffccb7be73d9a Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 30 Jan 2012 12:11:01 -0500 Subject: [PATCH] Warn user of clock offsets do not match Signed-off-by: Mathieu Desnoyers --- converter/babeltrace.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/converter/babeltrace.c b/converter/babeltrace.c index a5499bae..0cdd42e3 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -36,6 +36,7 @@ #include #include #include +#include #include /* 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); + } + } + } } /* -- 2.34.1