X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=lttv%2Flttv%2Ftraceset.c;h=765e3cf5552243e90e6e0bec608d0c6f9c196ba2;hb=cfddb03e13ef1d0033f748e7a20910522d6e434e;hp=af65190e0c1e069f67840e0a2dabe4b3cb0d8a60;hpb=eda74fe8155fe06b436256cae5199bb367711ec4;p=lttv.git diff --git a/lttv/lttv/traceset.c b/lttv/lttv/traceset.c index af65190e..765e3cf5 100644 --- a/lttv/lttv/traceset.c +++ b/lttv/lttv/traceset.c @@ -72,7 +72,7 @@ LttvTraceset *lttv_traceset_new(void) ts->time_span.start_time = ltt_time_zero; ts->time_span.end_time = ltt_time_zero; - + lttv_traceset_get_time_span_real(ts); return ts; } @@ -486,7 +486,7 @@ guint lttv_traceset_get_cpuid_from_event(LttvEvent *event) if (timestamp == -1ULL) { return 0; } - const struct definition *scope = bt_ctf_get_top_level_scope(ctf_event, BT_STREAM_PACKET_CONTEXT); + const struct bt_definition *scope = bt_ctf_get_top_level_scope(ctf_event, BT_STREAM_PACKET_CONTEXT); if (bt_ctf_field_get_error()) { return 0; } @@ -520,11 +520,11 @@ guint64 lttv_traceset_get_timestamp_last_event(LttvTraceset *ts) last_position.bt_pos = &pos; last_position.timestamp = G_MAXUINT64; last_position.cpu_id = INT_MAX; -#ifdef BABEL_HAS_SEEK_LAST + /* Assign iterator to the last event of the traces */ last_position.bt_pos->type = BT_SEEK_LAST; last_position.iter = ts->iter; -#endif + return lttv_traceset_position_get_timestamp(&last_position); } @@ -550,7 +550,8 @@ guint64 lttv_traceset_get_timestamp_begin(LttvTraceset *traceset) { currentTrace = g_ptr_array_index(traceset->traces,i); timestamp_cur = bt_trace_handle_get_timestamp_begin(bt_ctx, - currentTrace->id); + currentTrace->id, + BT_CLOCK_REAL); if(timestamp_cur < timestamp_min) timestamp_min = timestamp_cur; } @@ -582,7 +583,8 @@ guint64 lttv_traceset_get_timestamp_end(LttvTraceset *traceset) { currentTrace = g_ptr_array_index(traceset->traces,i); timestamp_cur = bt_trace_handle_get_timestamp_end(bt_ctx, - currentTrace->id); + currentTrace->id, + BT_CLOCK_REAL); if(timestamp_cur > timestamp_max){ timestamp_max = timestamp_cur; } @@ -597,19 +599,16 @@ guint64 lttv_traceset_get_timestamp_end(LttvTraceset *traceset) */ TimeInterval lttv_traceset_get_time_span_real(LttvTraceset *ts) { -#ifdef BABEL_HAS_SEEK_LAST + if(ltt_time_compare(ts->time_span.start_time, ltt_time_zero) == 0 && ts->traces->len > 0){ ts->time_span.start_time = ltt_time_from_uint64( lttv_traceset_get_timestamp_first_event(ts)); ts->time_span.end_time = ltt_time_from_uint64( - lttv_traceset_get_timestamp_last_event(ts)); + lttv_traceset_get_timestamp_last_event(ts)); } return ts->time_span; -#else - return lttv_traceset_get_time_span(ts); -#endif } /* @@ -644,7 +643,7 @@ int set_values_position(const LttvTracesetPosition *pos) struct bt_ctf_event *event = bt_ctf_iter_read_event(pos->iter); if(event != NULL){ - ((LttvTracesetPosition *)pos)->timestamp = bt_ctf_get_timestamp_raw(event); + ((LttvTracesetPosition *)pos)->timestamp = bt_ctf_get_timestamp(event); LttvEvent lttv_event; lttv_event.bt_event = event; @@ -659,6 +658,10 @@ int set_values_position(const LttvTracesetPosition *pos) 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; } guint64 lttv_traceset_position_get_timestamp(const LttvTracesetPosition *pos) @@ -687,29 +690,41 @@ LttTime lttv_traceset_position_get_time(const LttvTracesetPosition *pos) } - +/* 0 if equals, other is different */ int lttv_traceset_position_compare(const LttvTracesetPosition *pos1, const LttvTracesetPosition *pos2) { #warning " TODO :Rename for lttv_traceset_position_equals && Must return COMPARAISON OF THE 2 POSITION && verify if it is the best way to compare position" if(pos1 == NULL || pos2 == NULL){ return -1; } - - guint64 timeStampPos1,timeStampPos2; - guint cpuId1, cpuId2; - - timeStampPos1 = lttv_traceset_position_get_timestamp(pos1); - timeStampPos2 = lttv_traceset_position_get_timestamp(pos2); - - - cpuId1 = lttv_traceset_position_get_cpuid(pos1); - cpuId2 = lttv_traceset_position_get_cpuid(pos2); - - if(timeStampPos1 == timeStampPos2 && cpuId1 == cpuId2){ - return 0; + + int res = -1; +#ifdef HAVE_BT_ITER_EQUALS_POS + if(pos1->timestamp == G_MAXUINT64 || pos2->timestamp == G_MAXUINT64) { + res = bt_iter_equals_pos(pos1->bt_pos, pos2->bt_pos); } - else{ - return 1; +#endif + if (res < 0) { + + guint64 timeStampPos1,timeStampPos2; + guint cpuId1, cpuId2; + + timeStampPos1 = lttv_traceset_position_get_timestamp(pos1); + timeStampPos2 = lttv_traceset_position_get_timestamp(pos2); + + if (timeStampPos1 == timeStampPos2) { + + cpuId1 = lttv_traceset_position_get_cpuid(pos1); + cpuId2 = lttv_traceset_position_get_cpuid(pos2); + + if(cpuId1 == cpuId2){ + return 0; + } + } + return 1; + } else { + + return !res; } }