typedef struct _LttvTracesetContextPosition LttvTracesetContextPosition;
typedef struct _LttvTraceContextPosition LttvTraceContextPosition;
+#ifndef LTTVFILTER_TYPE_DEFINED
+typedef struct _LttvFilter LttvFilter;
+#define LTTVFILTER_TYPE_DEFINED
+#endif
+
#define LTTV_TRACESET_CONTEXT_TYPE (lttv_traceset_context_get_type ())
#define LTTV_TRACESET_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACESET_CONTEXT_TYPE, LttvTracesetContext))
#define LTTV_TRACESET_CONTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACESET_CONTEXT_TYPE, LttvTracesetContextClass))
LttvAttribute *ts_a;
TimeInterval time_span;
GTree *pqueue;
+
+ LttvTracesetContextPosition *sync_position; /* position at which to sync the
+ trace context */
};
struct _LttvTracesetContextClass {
GArray *tracefiles;
LttvAttribute *a;
LttvAttribute *t_a;
+ TimeInterval time_span;
};
struct _LttvTraceContextClass {
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
LttField *f1;
LttField *f2;
LttField *f3;
+ gpointer hook_data;
} LttvTraceHookByFacility;
it already contains the (up to three) needed fields handles. */
gint lttv_trace_find_hook(LttTrace *t, GQuark facility, GQuark event_type,
- GQuark field1, GQuark field2, GQuark field3, LttvHook h, LttvTraceHook *th);
+ GQuark field1, GQuark field2, GQuark field3, LttvHook h,
+ gpointer hook_data, LttvTraceHook *th);
LttvTracefileContext *lttv_traceset_context_get_current_tfc(
LttvTracesetContext *self);
-LttvTracesetContextPosition *lttv_traceset_context_position_new();
+LttvTracesetContextPosition *lttv_traceset_context_position_new(
+ const LttvTracesetContext *self);
void lttv_traceset_context_position_save(const LttvTracesetContext *self,
LttvTracesetContextPosition *pos);
LttTime lttv_traceset_context_position_get_time(
const LttvTracesetContextPosition *pos);
-gboolean lttv_process_tracefile_seek_position(LttvTracefileContext *self,
- const LttEventPosition *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 */
+
+static const LttTime seek_back_default_offset = { 1, 0 };
+
+guint lttv_process_traceset_seek_n_forward(LttvTracesetContext *self,
+ guint n,
+ LttvFilter *filter);
+typedef void (*seek_time_fct)(LttvTracesetContext *self, LttTime start);
+
+/* If first_offset is ltt_time_zero, it will choose a default value */
+guint lttv_process_traceset_seek_n_backward(LttvTracesetContext *self,
+ guint n,
+ LttTime first_offset,
+ seek_time_fct,
+ LttvFilter *filter);
#endif // PROCESSTRACE_H