ts->event_hooks = lttv_hooks_new();
ts->state_trace_handle_index = g_ptr_array_new();
+ ts->has_precomputed_states = FALSE;
+ 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;
}
traceset_pos->iter = traceset->iter;
traceset_pos->bt_pos = bt_iter_get_pos(bt_ctf_get_iter(traceset->iter));
-
+ traceset_pos->timestamp = G_MAXUINT64;
+ traceset_pos->cpu_id = INT_MAX;
+
return traceset_pos;
}
}
traceset_pos->iter = traceset->iter;
- traceset_pos->bt_pos = bt_iter_create_time_pos(
+ traceset_pos->bt_pos = bt_iter_create_time_pos(
bt_ctf_get_iter(traceset_pos->iter),
ltt_time_to_uint64(timestamp));
-
+ traceset_pos->timestamp = G_MAXUINT64;
+ traceset_pos->cpu_id = INT_MAX;
return traceset_pos;
}
LttvTracesetPosition begin_position;
struct bt_iter_pos pos;
begin_position.bt_pos = &pos;
+ begin_position.timestamp = G_MAXUINT64;
+ begin_position.cpu_id = INT_MAX;
/* Assign iterator to the beginning of the traces */
begin_position.bt_pos->type = BT_SEEK_BEGIN;
return lttv_traceset_position_get_timestamp(&begin_position);
}
+guint64 lttv_traceset_get_timestamp_last_event(LttvTraceset *ts)
+{
+ LttvTracesetPosition last_position;
+ struct bt_iter_pos pos;
+ 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);
+}
+
/*
* lttv_traceset_get_timestamp_begin : returns the minimum timestamp of
* all the traces in the 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;
}
{
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;
}
}
/*
* lttv_traceset_get_time_span_real : return a TimeInterval representing the
- * minimum timestamp dans le maximum timestamp of the traceset.
+ * minimum timestamp and the maximum timestamp of the traceset.
*
*/
TimeInterval lttv_traceset_get_time_span_real(LttvTraceset *ts)
{
- TimeInterval time_span;
- time_span.start_time =ltt_time_from_uint64(lttv_traceset_get_timestamp_first_event(ts));
- time_span.end_time = ltt_time_from_uint64(lttv_traceset_get_timestamp_end(ts));
- return time_span;
+
+
+ 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));
+#ifdef BABEL_HAS_SEEK_LAST
+ ts->time_span.end_time = ltt_time_from_uint64(
+ lttv_traceset_get_timestamp_end(ts));
+#else
+ ts->time_span.end_time = lttv_traceset_get_time_span(ts).end_time;
+#endif
+ }
+ return ts->time_span;
}
/*
* lttv_traceset_get_time_span : return a TimeInterval representing the
- * minimum timestamp dans le maximum timestamp of the traceset.
+ * minimum timestamp and the maximum timestamp of the traceset.
*
*/
TimeInterval lttv_traceset_get_time_span(LttvTraceset *ts)
{
- TimeInterval time_span;
- time_span.start_time =ltt_time_from_uint64(lttv_traceset_get_timestamp_begin(ts));
- time_span.end_time = ltt_time_from_uint64(lttv_traceset_get_timestamp_end(ts));
- return time_span;
+ if(ltt_time_compare(ts->time_span.start_time, ltt_time_zero) == 0){
+ ts->time_span.start_time =ltt_time_from_uint64(
+ lttv_traceset_get_timestamp_begin(ts));
+ ts->time_span.end_time = ltt_time_from_uint64(
+ lttv_traceset_get_timestamp_end(ts));
+ }
+ return ts->time_span;
}
const char *lttv_traceset_get_name_from_event(LttvEvent *event)
return bt_ctf_event_name(event->bt_event);
}
-guint64 lttv_traceset_position_get_timestamp(const LttvTracesetPosition *pos)
-{
- guint64 timestamp = 0;
- /*We save the current iterator,so we can reassign it after the seek*/
- LttvTracesetPosition previous_pos;
- previous_pos.iter = pos->iter;
- previous_pos.bt_pos = bt_iter_get_pos(bt_ctf_get_iter(pos->iter));
+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);
+ lttv_traceset_seek_to_position(pos);
/*Read the event*/
- struct bt_ctf_event *event = bt_ctf_iter_read_event(pos->iter);
-
+ struct bt_ctf_event *event = bt_ctf_iter_read_event(pos->iter);
+
if(event != NULL){
- timestamp = bt_ctf_get_timestamp_raw(event);
+ ((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);
}
- /* Reassign the previously saved position */
- lttv_traceset_seek_to_position(&previous_pos);
- return timestamp;
+ 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);
+ return 1;
+}
+
+guint64 lttv_traceset_position_get_timestamp(const LttvTracesetPosition *pos)
+{
+ if(pos->timestamp == G_MAXUINT64){
+ if(set_values_position(pos) == 0){
+ return 0;
+ }
+ }
+
+ return pos->timestamp;
+}
+
+int lttv_traceset_position_get_cpuid(const LttvTracesetPosition *pos){
+ if(pos->cpu_id == INT_MAX ){
+ if(set_values_position(pos) == 0){
+ return 0;
+ }
+ }
+ return pos->cpu_id;
}
LttTime lttv_traceset_position_get_time(const LttvTracesetPosition *pos)
guint64 timeStampPos1,timeStampPos2;
guint cpuId1, cpuId2;
- LttvEvent event1, event2;
- int ret;
timeStampPos1 = lttv_traceset_position_get_timestamp(pos1);
timeStampPos2 = lttv_traceset_position_get_timestamp(pos2);
- event1.bt_event = bt_ctf_iter_read_event(pos1->iter);
- event2.bt_event = bt_ctf_iter_read_event(pos2->iter);
- if(event1.bt_event == NULL || event2.bt_event == NULL){
- return -1;
- }
-
- cpuId1 = lttv_traceset_get_cpuid_from_event(&event1);
- cpuId2 = lttv_traceset_get_cpuid_from_event(&event2);
+ cpuId1 = lttv_traceset_position_get_cpuid(pos1);
+ cpuId2 = lttv_traceset_position_get_cpuid(pos2);
if(timeStampPos1 == timeStampPos2 && cpuId1 == cpuId2){
return 0;