libltt compiles
[lttv.git] / ltt / branches / poly / lttv / lttv / tracecontext.h
index 77f9f63cdbf28402e0d8b62f143c9f20ae3bf6aa..be9a951444110c4abe54ad9f2f8f0eebd3a9b295 100644 (file)
@@ -23,6 +23,7 @@
 #include <lttv/attribute.h>
 #include <lttv/hook.h>
 #include <ltt/ltt.h>
+#include <ltt/markers.h>
 
 /* This is the generic part of trace processing. All events within a
    certain time interval are accessed and processing hooks are called for
@@ -77,6 +78,11 @@ typedef struct _LttvTracefileContextClass LttvTracefileContextClass;
 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))
@@ -93,6 +99,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,9 +144,11 @@ struct _LttvTraceContext {
   guint index;                /* in ts_context->traces */
   LttTrace *t;
   LttvTrace *vt;
-  LttvTracefileContext **tracefiles;
+  //LttvTracefileContext **tracefiles;
+  GArray *tracefiles;
   LttvAttribute *a;
   LttvAttribute *t_a;
+  TimeInterval time_span;
 };
 
 struct _LttvTraceContextClass {
@@ -157,14 +168,16 @@ 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;
   LttvAttribute *a;
+  gint target_pid;          /* Target PID of the event.
+                               Updated by state.c. -1 means unset. */
 };
 
 struct _LttvTracefileContextClass {
@@ -259,14 +272,23 @@ 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 {
   LttvHook h;
   guint id;
   LttField *f1;
   LttField *f2;
   LttField *f3;
-} LttvTraceHook;
+  gpointer hook_data;
+} LttvTraceHookByFacility;
+
+
+/* Get the head of marker list correcponding to the given trace hook.
+ */
+struct marker_info *lttv_trace_hook_get_marker(LttvTraceHook *th);
 
+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
@@ -275,27 +297,75 @@ 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 event_type,
+    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(
+    const LttvTracesetContext *self);
+
 void lttv_traceset_context_position_save(const LttvTracesetContext *self,
                                     LttvTracesetContextPosition *pos);
 
 void lttv_traceset_context_position_destroy(LttvTracesetContextPosition *pos);
 
+void lttv_traceset_context_position_copy(LttvTracesetContextPosition *dest,
+                                   const LttvTracesetContextPosition *src);
+
 gint lttv_traceset_context_pos_pos_compare(
-                              const LttvTracesetContextPosition *pos1,
-                              const LttvTracesetContextPosition *pos2);
+                          const LttvTracesetContextPosition *pos1,
+                          const LttvTracesetContextPosition *pos2);
 
 gint lttv_traceset_context_ctx_pos_compare(const LttvTracesetContext *self,
-                                        const LttvTracesetContextPosition *pos);
+                                    const LttvTracesetContextPosition *pos2);
 
-gint lttv_traceset_context_pos_pos_compare(const LttvTracesetContextPosition *a,
-                                          const LttvTracesetContextPosition *b);
 LttTime lttv_traceset_context_position_get_time(
-                                  const LttvTracesetContextPosition *pos);
+                                      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 */
+
+static const LttTime seek_back_default_offset = { 1, 0 };
+
+typedef gboolean check_handler(guint count, gboolean *stop_flag, gpointer data);
+
+guint lttv_process_traceset_seek_n_forward(LttvTracesetContext *self,
+                                           guint n,
+                                          check_handler *check,
+                                          gboolean *stop_flag,
+                                          LttvFilter *filter1,
+                                          LttvFilter *filter2,
+                                          LttvFilter *filter3,
+                                          gpointer data);
+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,
+                                           check_handler *check,
+                                           gboolean *stop_flag,
+                                           LttvFilter *filter1,
+                                           LttvFilter *filter2,
+                                           LttvFilter *filter3,
+                                           gpointer data);
+
+
 #endif // PROCESSTRACE_H
This page took 0.024979 seconds and 4 git commands to generate.