X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=converter%2Fbabeltrace.c;h=2701a0cd2517661122fec747e6038c3748b87f95;hp=22ec92446c5c32ea337706e1355496a5b1be93c7;hb=4c15b06b5ac992bd66c2c9900096589406462897;hpb=fa709ab2ef8c8331fcccb6408fc7740918fc286d diff --git a/converter/babeltrace.c b/converter/babeltrace.c index 22ec9244..2701a0cd 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include @@ -101,7 +101,7 @@ static void list_formats(FILE *fp) static void usage(FILE *fp) { - fprintf(fp, "BabelTrace Trace Converter %s\n\n", VERSION); + fprintf(fp, "BabelTrace Trace Viewer and Converter %s\n\n", VERSION); fprintf(fp, "usage : babeltrace [OPTIONS] INPUT \n"); fprintf(fp, "\n"); fprintf(fp, " INPUT Input trace path\n"); @@ -167,7 +167,6 @@ static int get_fields_args(poptContext *pc) { char *str, *strlist, *strctx; - opt_payload_field_names = 0; strlist = (char *) poptGetOptArg(*pc); if (!strlist) { return -EINVAL; @@ -301,6 +300,10 @@ static void init_trace_collection(struct trace_collection *tc) { tc->array = g_ptr_array_sized_new(DEFAULT_FILE_ARRAY_SIZE); tc->clocks = g_hash_table_new(g_direct_hash, g_direct_equal); + tc->single_clock_offset_avg = 0; + tc->offset_first = 0; + tc->delta_offset_first_sum = 0; + tc->offset_nr = 0; } /* @@ -375,13 +378,18 @@ static void clock_add(gpointer key, gpointer value, gpointer user_data) if (!tc_clock) { /* * For now, we only support CTF that has one - * single clock. + * single clock uuid or name (absolute ref). */ if (g_hash_table_size(tc_clocks) > 0) { fprintf(stderr, "[error] Only CTF traces with a single clock description are supported by this babeltrace version.\n"); } - if (!clock_match->tc->single_clock) { - clock_match->tc->single_clock = value; + if (!clock_match->tc->offset_nr) { + clock_match->tc->offset_first = + (t_clock->offset_s * 1000000000ULL) + t_clock->offset; + clock_match->tc->delta_offset_first_sum = 0; + clock_match->tc->offset_nr++; + clock_match->tc->single_clock_offset_avg = + clock_match->tc->offset_first; } g_hash_table_insert(tc_clocks, (gpointer) (unsigned long) v, @@ -402,10 +410,18 @@ static void clock_add(gpointer key, gpointer value, gpointer user_data) 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", + fprintf(stderr, "[warning] Clock \"%s\" offset differs between traces (delta %" PRIu64 " ns). Using average.\n", g_quark_to_string(tc_clock->name), diff_ns < 0 ? -diff_ns : diff_ns); } + /* Compute average */ + clock_match->tc->delta_offset_first_sum += + (t_clock->offset_s * 1000000000ULL) + t_clock->offset + - clock_match->tc->offset_first; + clock_match->tc->offset_nr++; + clock_match->tc->single_clock_offset_avg = + clock_match->tc->offset_first + + (clock_match->tc->delta_offset_first_sum / clock_match->tc->offset_nr); } } } @@ -465,36 +481,36 @@ error: int convert_trace(struct trace_descriptor *td_write, struct bt_context *ctx) { - struct babeltrace_iter *iter; + struct bt_iter *iter; struct ctf_stream *stream; struct ctf_stream_event *event; struct ctf_text_stream_pos *sout; - struct trace_collection_pos begin_pos; + struct bt_iter_pos begin_pos; int ret; sout = container_of(td_write, struct ctf_text_stream_pos, trace_descriptor); begin_pos.type = BT_SEEK_BEGIN; - iter = babeltrace_iter_create(ctx, &begin_pos, NULL); + iter = bt_iter_create(ctx, &begin_pos, NULL); if (!iter) { ret = -1; goto error_iter; } - while (babeltrace_iter_read_event(iter, &stream, &event) == 0) { + while (bt_iter_read_event(iter, &stream, &event) == 0) { ret = sout->parent.event_cb(&sout->parent, stream); if (ret) { fprintf(stderr, "[error] Writing event failed.\n"); goto end; } - ret = babeltrace_iter_next(iter); + ret = bt_iter_next(iter); if (ret < 0) goto end; } ret = 0; end: - babeltrace_iter_destroy(iter); + bt_iter_destroy(iter); error_iter: return ret; }