X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Flttv%2Ftraceset.c;h=b4a14384ef80ec42024ef89ee8a6dabf9a64c92a;hb=3d1e7ee596d5eef4a50ff7e77d3617643eca133e;hp=35c84395af6678aa54356876ec5c3aef9097ffb9;hpb=3685e022fa515d5d17a4b8a81fa596408d0cd4ab;p=lttv.git diff --git a/lttv/lttv/traceset.c b/lttv/lttv/traceset.c index 35c84395..b4a14384 100644 --- a/lttv/lttv/traceset.c +++ b/lttv/lttv/traceset.c @@ -60,7 +60,7 @@ LttvTraceset *lttv_traceset_new(void) // NULL); s->iter = 0; s->event_hooks = lttv_hooks_new(); - + s->state_trace_handle_index = g_ptr_array_new(); @@ -118,7 +118,11 @@ static LttvTrace *lttv_trace_create(LttvTraceset *ts, const char *path) new_trace->traceset = ts; new_trace->state = g_new(LttvTraceState,1); lttv_trace_state_init(new_trace->state,new_trace); - ts->tmpState = new_trace->state; + + /* Add the state to the trace_handle to state index */ + g_ptr_array_set_size(ts->state_trace_handle_index,id+1); + g_ptr_array_index(ts->state_trace_handle_index,id) = new_trace->state; + return new_trace; } @@ -150,6 +154,7 @@ LttvTraceset *lttv_traceset_copy(LttvTraceset *s_orig) s = g_new(LttvTraceset, 1); s->filename = NULL; s->traces = g_ptr_array_new(); + s->state_trace_handle_index = g_ptr_array_new(); for(i=0;itraces->len;i++) { trace = g_ptr_array_index(s_orig->traces, i); @@ -157,6 +162,10 @@ LttvTraceset *lttv_traceset_copy(LttvTraceset *s_orig) /* WARNING: this is an alias, not a copy. */ g_ptr_array_add(s->traces, trace); + + g_ptr_array_set_size(s->state_trace_handle_index,trace->id+1); + g_ptr_array_index(s->state_trace_handle_index,trace->id) = trace->state; + } s->context = s_orig->context; bt_context_get(s->context); @@ -385,19 +394,30 @@ guint lttv_trace_get_num_cpu(LttvTrace *t) LttvTracesetPosition *lttv_traceset_create_position(LttvTraceset *traceset) { -#warning "TODO" - return NULL; + LttvTracesetPosition *traceset_pos; + + traceset_pos = g_new(LttvTracesetPosition, 1); + + /* Check in the new passed */ + if(traceset_pos == NULL) { + return NULL; + } + + traceset_pos->iter = traceset->iter; + traceset_pos->bt_pos = bt_iter_get_pos(bt_ctf_get_iter(traceset->iter)); + + return traceset_pos; } void lttv_traceset_destroy_position(LttvTracesetPosition *traceset_pos) { -#warning "TODO" - return NULL; + bt_iter_free_pos(traceset_pos->bt_pos); + g_free(traceset_pos); } void lttv_traceset_seek_to_position(LttvTracesetPosition *traceset_pos) { -#warning "TODO" + bt_iter_set_pos(traceset_pos->iter, traceset_pos->bt_pos); } guint lttv_traceset_get_cpuid_from_event(LttvEvent *event)