X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=lttv%2Flttv%2Ftraceset.h;h=9761c9198a7064a97501ea0d17357ec174525831;hb=190724cdfc53eeebfd895b594f875b53a72adf37;hp=e9bbc2740f177f95f3f2f1a743a075114419570b;hpb=922581a4a91dcb870a6168112a6198a1afacf0bb;p=lttv.git diff --git a/lttv/lttv/traceset.h b/lttv/lttv/traceset.h index e9bbc274..9761c919 100644 --- a/lttv/lttv/traceset.h +++ b/lttv/lttv/traceset.h @@ -21,23 +21,65 @@ #include #include -#include +#include +#include +#include /* A traceset is a set of traces to be analyzed together. */ typedef struct _LttvTraceset LttvTraceset; -typedef struct _LttvTrace LttvTrace; +typedef struct _LttvTracesetPosition LttvTracesetPosition; struct bt_context; + +//TODO ybrosseau 2012-05-15 put these struct in the .c to make them opaque +struct _LttvTraceset { + char * filename; + GPtrArray *traces; /* Array of pointers to LttvTrace */ + struct bt_context *context; + LttvAttribute *a; + LttvHooks *event_hooks; + struct bt_ctf_iter *iter; + GPtrArray *state_trace_handle_index; + gboolean has_precomputed_states; + TimeInterval time_span; + char *common_path; +}; + +#define TRACE_NAME_SIZE 100 + +struct _LttvTrace { + // Trace id for babeltrace + LttvTraceset *traceset; /* container traceset */ + gint id; + LttvAttribute *a; + guint ref_count; + LttvTraceState *state; + char short_name[TRACE_NAME_SIZE]; + char *full_path; +}; + +/* In babeltrace, the position concept is an iterator. */ +struct _LttvTracesetPosition { + struct bt_ctf_iter *iter; + struct bt_iter_pos *bt_pos; + guint64 timestamp; + int cpu_id; +}; + /* Tracesets may be added to, removed from and their content listed. */ -LttvTraceset *lttv_traceset_new(); +LttvTraceset *lttv_traceset_new(void); char * lttv_traceset_name(LttvTraceset * s); +#ifdef BABEL_CLEANUP LttvTrace *lttv_trace_new(LttTrace *t); +#endif + +void get_absolute_pathname(const gchar *pathname, gchar * abs_pathname); LttvTraceset *lttv_traceset_copy(LttvTraceset *s_orig); @@ -46,33 +88,76 @@ LttvTraceset *lttv_traceset_load(const gchar *filename); struct bt_context *lttv_traceset_get_context(LttvTraceset *s); + gint lttv_traceset_save(LttvTraceset *s); void lttv_traceset_destroy(LttvTraceset *s); -void lttv_trace_destroy(LttvTrace *t); +LttvHooks *lttv_traceset_get_hooks(LttvTraceset *s); void lttv_traceset_add(LttvTraceset *s, LttvTrace *t); +/* + * lttv_trace_create : Add all traces recursively to a traceset from a path + * + * + * ts is the traceset in which will be contained the traces + * + * trace_path is the path where to find a set of trace. + * Traverse the path recursively to add all traces within. + * + * return 0 on success or a negative integer on failure + */ +int lttv_traceset_add_path(LttvTraceset *ts, char *path); + unsigned lttv_traceset_number(LttvTraceset *s); LttvTrace *lttv_traceset_get(LttvTraceset *s, unsigned i); void lttv_traceset_remove(LttvTraceset *s, unsigned i); +int lttv_traceset_get_trace_index_from_event(LttvEvent *event); + +int lttv_traceset_get_trace_index_from_handle_id(LttvTraceset *ts, int handle_id); + /* An attributes table is attached to the set and to each trace in the set. */ LttvAttribute *lttv_traceset_attribute(LttvTraceset *s); -LttvAttribute *lttv_trace_attribute(LttvTrace *t); +/* Take a position snapshot */ +LttvTracesetPosition *lttv_traceset_create_current_position(LttvTraceset *traceset); -LttTrace *lttv_trace(LttvTrace *t); +/* Destroy position snapshot */ +void lttv_traceset_destroy_position(LttvTracesetPosition *traceset_pos); -guint lttv_trace_get_ref_number(LttvTrace * t); +void lttv_traceset_seek_to_position(const LttvTracesetPosition *traceset_pos); -guint lttv_trace_ref(LttvTrace * t); +guint lttv_traceset_get_cpuid_from_event(LttvEvent *event); +/* Returns the minimum timestamp of the traces in the traceset */ +guint64 lttv_traceset_get_timestamp_begin(LttvTraceset *traceset); +/* Returns the maximum timestamp of the traces in the traceset */ +guint64 lttv_traceset_get_timestamp_end(LttvTraceset *traceset); +/* Return a TimeInterval from timestamp of the first event to the last event [experimentale]*/ +TimeInterval lttv_traceset_get_time_span_real(LttvTraceset *ts); +/* Returns a TimeInterval struct that represents the min and max of the traceset */ +TimeInterval lttv_traceset_get_time_span(LttvTraceset *traceset); -guint lttv_trace_unref(LttvTrace * t); +const char *lttv_traceset_get_name_from_event(LttvEvent *event); -#endif // TRACESET_H +LttvTracesetPosition *lttv_traceset_create_time_position(LttvTraceset *ts, LttTime timestamp); + +guint64 lttv_traceset_position_get_timestamp(const LttvTracesetPosition *pos); + +LttTime lttv_traceset_position_get_time(const LttvTracesetPosition *pos); + +LttTime lttv_traceset_get_current_time(const LttvTraceset *ts); +int lttv_traceset_position_compare(const LttvTracesetPosition *pos1, const LttvTracesetPosition *pos2); + +int lttv_traceset_position_time_compare(const LttvTracesetPosition *pos1, + const LttvTracesetPosition *pos2); + +int lttv_traceset_position_compare_current(const LttvTraceset *ts, + const LttvTracesetPosition *pos); + +#endif // TRACESET_H