X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Ftracecontext.h;h=f1396463e79cfdc15165070a12e5b6239c218bb9;hb=d2ace3a93efa61ccde967a32626090c77e20b583;hp=2c2739029866ac1b30814c66458adb45ecd58866;hpb=8b0bbe19ccf2d978bb68b3c78f5d08b0b6899c8d;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/tracecontext.h b/ltt/branches/poly/lttv/lttv/tracecontext.h index 2c273902..f1396463 100644 --- a/ltt/branches/poly/lttv/lttv/tracecontext.h +++ b/ltt/branches/poly/lttv/lttv/tracecontext.h @@ -93,6 +93,9 @@ struct _LttvTracesetContext { LttvAttribute *ts_a; TimeInterval time_span; GTree *pqueue; + + LttvTracesetContextPosition *sync_position; /* position at which to sync the + trace context */ }; struct _LttvTracesetContextClass { @@ -135,7 +138,8 @@ struct _LttvTraceContext { guint index; /* in ts_context->traces */ LttTrace *t; LttvTrace *vt; - LttvTracefileContext **tracefiles; + //LttvTracefileContext **tracefiles; + GArray *tracefiles; LttvAttribute *a; LttvAttribute *t_a; }; @@ -157,10 +161,10 @@ struct _LttvTracefileContext { GObject parent; LttvTraceContext *t_context; - gboolean control; + // gboolean control; guint index; /* in ts_context->tracefiles */ LttTracefile *tf; - LttEvent *e; + // LttEvent *e; LttvHooks *event; LttvHooksById *event_by_id; LttTime timestamp; @@ -180,12 +184,6 @@ GType lttv_tracefile_context_get_type (void); void lttv_process_traceset(LttvTracesetContext *self, LttTime end, unsigned nb_events); -/* Save the complete tracefile information in the context */ -//void lttv_process_traceset_get_sync_data(LttvTracesetContext *self); - -/* Put all the tracefiles at the tracefile context position */ -void lttv_process_traceset_synchronize_tracefiles(LttvTracesetContext *self); - /* Process traceset can also be done in smaller pieces calling begin, * then seek and middle repeatedly, and end. The middle function return the * number of events processed. It will be smaller than nb_events if the end time @@ -265,14 +263,33 @@ void lttv_tracefile_context_add_hooks_by_id(LttvTracefileContext *self, void lttv_tracefile_context_remove_hooks_by_id(LttvTracefileContext *self, unsigned i); +/* A LttvTraceHook has two arrays of LttvTraceHookByFacility, + * indexed by facility ID and a simple array used to walk all the hooks */ typedef struct _LttvTraceHook { + GArray *fac_index; + GArray *fac_list; +} LttvTraceHook; + +typedef struct _LttvTraceHookByFacility { LttvHook h; guint id; LttField *f1; LttField *f2; LttField *f3; -} LttvTraceHook; + gpointer hook_data; +} LttvTraceHookByFacility; + + +/* Get the first facility corresponding to the name. As the types must be + * compatible, it is relevant to use the field name and sizes of the first + * facility to create data structures and assume the data will be compatible + * thorough the trace */ +LttvTraceHookByFacility *lttv_trace_hook_get_first(LttvTraceHook *th); +LttvTraceHookByFacility *lttv_trace_hook_get_fac( + LttvTraceHook *th, guint facility_id); + +void lttv_trace_hook_destroy(LttvTraceHook *th); /* Search in the trace for the id of the named event type within the named facility. Then, find the three (if non null) named fields. All that @@ -281,8 +298,9 @@ typedef struct _LttvTraceHook { registering a hook using this structure as event data; it already contains the (up to three) needed fields handles. */ -void lttv_trace_find_hook(LttTrace *t, char *facility, char *event_type, - char *field1, char *field2, char *field3, LttvHook h, LttvTraceHook *th); +gint lttv_trace_find_hook(LttTrace *t, GQuark facility, GQuark event_type, + GQuark field1, GQuark field2, GQuark field3, LttvHook h, + gpointer hook_data, LttvTraceHook *th); LttvTracefileContext *lttv_traceset_context_get_current_tfc( LttvTracesetContext *self); @@ -308,5 +326,25 @@ gint lttv_traceset_context_ctx_pos_compare(const LttvTracesetContext *self, LttTime lttv_traceset_context_position_get_time( const LttvTracesetContextPosition *pos); +gint compare_tracefile(gconstpointer a, gconstpointer b); + + +/* Synchronisation helpers : save/restore synchronization between ltt traces and + * a traceset context. */ +void lttv_process_traceset_synchronize_tracefiles(LttvTracesetContext *tsc); + +void lttv_process_traceset_get_sync_data(LttvTracesetContext *tsc); + +/* Seek n events forward and backward (without filtering) : only use these where + * necessary : the seek backward is costy. */ + +#define BACKWARD_SEEK_MUL 2 /* Multiplication factor of time_offset between + backward seek iterations */ + +guint lttv_process_traceset_seek_n_forward(LttvTracesetContext *self, + guint n); + +guint lttv_process_traceset_seek_n_backward(LttvTracesetContext *self, + guint n, LttTime first_offset); #endif // PROCESSTRACE_H