static int convert_trace(struct bt_trace_descriptor *td_write, struct bt_context *ctx) { struct bt_ctf_iter *iter; struct ctf_text_stream_pos *sout; struct bt_iter_pos *begin_pos = NULL, *end_pos = NULL; struct bt_ctf_event *ctf_event; int ret; sout = container_of(td_write, struct ctf_text_stream_pos, trace_descriptor); if (!sout->parent.event_cb) { return 0; } if (opt_stream_intersection) { iter = bt_ctf_iter_create_intersect(ctx, &begin_pos, &end_pos); } else { begin_pos = bt_iter_create_time_pos(NULL, 0); begin_pos->type = BT_SEEK_BEGIN; iter = bt_ctf_iter_create(ctx, begin_pos, NULL); } if (!iter) { ret = -1; goto error_iter; } while ((ctf_event = bt_ctf_iter_read_event(iter))) { ret = sout->parent.event_cb(&sout->parent, ctf_event->parent->stream); if (ret) { fprintf(stderr, "[error] Writing event failed.\n"); goto end; } ret = bt_iter_next(bt_ctf_get_iter(iter)); if (ret < 0) { goto end; } } ret = 0; end: bt_ctf_iter_destroy(iter); error_iter: bt_iter_free_pos(begin_pos); bt_iter_free_pos(end_pos); return ret; }
int set_values_position(const LttvTracesetPosition *pos) { LttvTracesetPosition previous_pos; previous_pos.iter = pos->iter; previous_pos.bt_pos = bt_iter_get_pos(bt_ctf_get_iter(pos->iter)); /* Seek to the new desired position */ lttv_traceset_seek_to_position(pos); /*Read the event*/ struct bt_ctf_event *event = bt_ctf_iter_read_event(pos->iter); if(event != NULL){ ((LttvTracesetPosition *)pos)->timestamp = bt_ctf_get_timestamp(event); LttvEvent lttv_event; lttv_event.bt_event = event; ((LttvTracesetPosition *)pos)->cpu_id = lttv_traceset_get_cpuid_from_event(<tv_event); } else { /* The event is null */ return 0; } /* Reassign the previously saved position */ lttv_traceset_seek_to_position(&previous_pos); /*We must desallocate because the function bt_iter_get_pos() does a g_new */ bt_iter_free_pos(previous_pos.bt_pos); if (pos->timestamp == G_MAXUINT64) { return 0; } return 1; }
void lttv_traceset_destroy_position(LttvTracesetPosition *traceset_pos) { bt_iter_free_pos(traceset_pos->bt_pos); g_free(traceset_pos); }