add enum workaround
[lttv.git] / ltt / branches / poly / lttv / lttv / tracecontext.h
index 4be8be70aba6388e7544656c3e2ab8c7bdc31d41..a99d3eb650932c0a6a32fcb47affacd6446fbda8 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))
@@ -94,8 +100,8 @@ struct _LttvTracesetContext {
   TimeInterval time_span;
   GTree *pqueue;
 
// LttvTracesetContextPosition *sync_position;   /* position at which to sync the
//                                                  trace context */
+  LttvTracesetContextPosition *sync_position;   /* position at which to sync the
+                                                   trace context */
 };
 
 struct _LttvTracesetContextClass {
@@ -142,6 +148,7 @@ struct _LttvTraceContext {
   GArray *tracefiles;
   LttvAttribute *a;
   LttvAttribute *t_a;
+  TimeInterval time_span;
 };
 
 struct _LttvTraceContextClass {
@@ -169,6 +176,8 @@ struct _LttvTracefileContext {
   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 {
@@ -263,50 +272,48 @@ 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;
+  guint16 id;  /* id of the marker associated with this hook */
+  GPtrArray *fields;  /* struct marker_fields pointers */
   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);
+} LttvTraceHook;
 
-LttvTraceHookByFacility *lttv_trace_hook_get_fac(
-    LttvTraceHook *th, guint facility_id);
+/* Get the head of marker list correcponding to the given trace hook.
+ */
+struct marker_info *lttv_trace_hook_get_marker(LttTrace *t, LttvTraceHook *th);
 
-void lttv_trace_hook_destroy(LttvTraceHook *th);
+/* Remove the hooks from the array. Does not free the array itself. */
+void lttv_trace_hook_remove_all(GArray **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
    information is then used to fill the LttvTraceHook structure. This
    is useful to find the specific id for an event within a trace, for
    registering a hook using this structure as event data;
-   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,
-    gpointer hook_data, LttvTraceHook *th);
+   it already contains the (up to three) needed fields handles.
+   Returns the modified LttvTraceHook array.
+   Prints warnings if events or markers are not found. returns 1 on error,
+   0 on success.
+   Adds the hooks to the trace_hooks array.
+ */
+
+int lttv_trace_find_hook(LttTrace *t, GQuark marker_name,
+    GQuark fields[], LttvHook h, gpointer hook_data, GArray **trace_hooks);
+
+static inline struct marker_field *
+lttv_trace_get_hook_field(LttvTraceHook *hook, unsigned int index)
+{
+       return g_ptr_array_index(hook->fields, index);
+}
+
 
 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);
@@ -331,8 +338,42 @@ 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);
+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);
+
+#define FIELD_ARRAY(val...) ((GQuark[]){ val, 0 })
 
 #endif // PROCESSTRACE_H
This page took 0.024986 seconds and 4 git commands to generate.