+guint64 lttv_traceset_get_timestamp_first_event(LttvTraceset *ts)
+{
+ 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;
+ begin_position.iter = ts->iter;
+
+ 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.
+ *
+ */
+guint64 lttv_traceset_get_timestamp_begin(LttvTraceset *traceset)
+{
+ struct bt_context *bt_ctx;
+ bt_ctx = lttv_traceset_get_context(traceset);
+ guint64 timestamp_min, timestamp_cur = 0;
+ int i;
+ int trace_count;
+ LttvTrace *currentTrace;
+ trace_count = traceset->traces->len;
+ if(trace_count == 0)
+ timestamp_min = 0;
+ else{
+ timestamp_min = G_MAXUINT64;
+ for(i = 0; i < trace_count;i++)
+ {
+ currentTrace = g_ptr_array_index(traceset->traces,i);
+ timestamp_cur = bt_trace_handle_get_timestamp_begin(bt_ctx,
+ currentTrace->id);
+ if(timestamp_cur < timestamp_min)
+ timestamp_min = timestamp_cur;
+ }
+ }
+ return timestamp_min;
+}
+
+/*
+ * lttv_traceset_get_timestamp_end: returns the maximum timestamp of
+ * all the traces in the traceset.
+ *
+ */
+guint64 lttv_traceset_get_timestamp_end(LttvTraceset *traceset)
+{
+ struct bt_context *bt_ctx;
+ bt_ctx = lttv_traceset_get_context(traceset);
+ guint64 timestamp_max, timestamp_cur = 0;
+ int i;
+ int trace_count;
+ LttvTrace *currentTrace;
+ trace_count = traceset->traces->len;
+
+ if(trace_count == 0){
+ timestamp_max = 1;
+ }
+ else{
+ timestamp_max = 0;
+ for(i =0; i < trace_count;i++)
+ {
+ currentTrace = g_ptr_array_index(traceset->traces,i);
+ timestamp_cur = bt_trace_handle_get_timestamp_end(bt_ctx,
+ currentTrace->id);
+ if(timestamp_cur > timestamp_max){
+ timestamp_max = timestamp_cur;
+ }
+ }
+ }
+ return timestamp_max;
+}
+/*
+ * lttv_traceset_get_time_span_real : return a TimeInterval representing the
+ * minimum timestamp and the maximum timestamp of the 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_from_uint64(0)) == 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));
+ }
+ return ts->time_span;
+#else
+ return lttv_traceset_get_time_span(ts);
+#endif
+}
+
+/*
+ * lttv_traceset_get_time_span : return a TimeInterval representing the
+ * minimum timestamp and the maximum timestamp of the traceset.
+ *
+ */
+TimeInterval lttv_traceset_get_time_span(LttvTraceset *ts)
+{
+ if(ltt_time_compare(ts->time_span.start_time, ltt_time_from_uint64(0)) == 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;
+}
+