{
char *str, *strlist, *strctx;
- opt_payload_field_names = 0;
strlist = (char *) poptGetOptArg(*pc);
if (!strlist) {
return -EINVAL;
{
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;
}
/*
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,
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);
}
}
}
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;
}