Added options to run different tests in module batchtest
[lttv.git] / ltt / branches / poly / include / lttv / processTrace.h
index 60dfd7ba55798b773f6f2b67f8de1139cdf2bcbd..6afff0ffca55ce34e8aee3b907054fedff220754 100644 (file)
@@ -1,6 +1,25 @@
+/* This file is part of the Linux Trace Toolkit viewer
+ * Copyright (C) 2003-2004 Michel Dagenais
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License Version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, 
+ * MA 02111-1307, USA.
+ */
+
 #ifndef PROCESSTRACE_H
 #define PROCESSTRACE_H
 
+#include <lttv/traceset.h>
 #include <lttv/attribute.h>
 #include <lttv/hook.h>
 #include <ltt/ltt.h>
    tracefile contexts may be subtyped as needed. Indeed, both the contexts
    and the hooks are defined by the caller. */
 
+
+typedef struct _LttvTracesetContext LttvTracesetContext;
+typedef struct _LttvTracesetContextClass LttvTracesetContextClass;
+
+typedef struct _LttvTraceContext LttvTraceContext;
+typedef struct _LttvTraceContextClass LttvTraceContextClass;
+
+typedef struct _LttvTracefileContext LttvTracefileContext;
+typedef struct _LttvTracefileContextClass LttvTracefileContextClass;
+
 #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))
@@ -52,9 +81,6 @@
 #define LTTV_IS_TRACESET_CONTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACESET_CONTEXT_TYPE))
 #define LTTV_TRACESET_CONTEXT_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACESET_CONTEXT_TYPE, LttvTracesetContextClass))
 
-typedef struct _LttvTracesetContext LttvTracesetContext;
-typedef struct _LttvTracesetContextClass LttvTracesetContextClass;
-
 struct _LttvTracesetContext {
   GObject parent;
 
@@ -63,6 +89,9 @@ struct _LttvTracesetContext {
   LttvHooks *after;
   LttvTraceContext **traces;
   LttvAttribute *a;
+  LttvAttribute *ts_a;
+  TimeInterval *Time_Span;
+  GTree *pqueue;
 };
 
 struct _LttvTracesetContextClass {
@@ -98,21 +127,19 @@ lttv_context_new_tracefile_context(LttvTracesetContext *self);
 #define LTTV_IS_TRACE_CONTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACE_CONTEXT_TYPE))
 #define LTTV_TRACE_CONTEXT_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACE_CONTEXT_TYPE, LttvTraceContextClass))
 
-typedef struct _LttvTraceContext LttvTraceContext;
-typedef struct _LttvTraceContextClass LttvTraceContextClass;
-
 struct _LttvTraceContext {
   GObject parent;
 
   LttvTracesetContext *ts_context;
   guint index;                /* in ts_context->traces */
-  LttvTrace *t;
+  LttTrace *t;
+  LttvTrace *vt;
   LttvHooks *check;
   LttvHooks *before;
   LttvHooks *after;
-  LttvTracefileContext **control_tracefiles;
-  LttvTracefileContext **per_cpu_tracefiles;
+  LttvTracefileContext **tracefiles;
   LttvAttribute *a;
+  LttvAttribute *t_a;
 };
 
 struct _LttvTraceContextClass {
@@ -128,26 +155,23 @@ GType lttv_trace_context_get_type (void);
 #define LTTV_IS_TRACEFILE_CONTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACEFILE_CONTEXT_TYPE))
 #define LTTV_TRACEFILE_CONTEXT_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACEFILE_CONTEXT_TYPE, LttvTracefileContextClass))
 
-typedef struct _LttvTracefileContext LttvTracefileContext;
-typedef struct _LttvTracefileContextClass LttvTracefileContextClass;
-
 struct _LttvTracefileContext {
   GObject parent;
 
   LttvTraceContext *t_context;
   gboolean control;
-  guint index;                /* in ts_context->control/per_cpu_tracefiles */
-  LttvTracefile *tf;
+  guint index;                /* in ts_context->tracefiles */
+  LttTracefile *tf;
   LttvHooks *check;
   LttvHooks *before;
   LttvHooks *after;
-  LttvEvent *e;
+  LttEvent *e;
   LttvHooks *check_event;
   LttvHooks *before_event;
   LttvHooksById *before_event_by_id;
   LttvHooks *after_event;
   LttvHooksById *after_event_by_id;
-  LttTime *time;
+  LttTime timestamp;
   LttvAttribute *a;
 };
 
@@ -157,8 +181,30 @@ struct _LttvTracefileContextClass {
 
 GType lttv_tracefile_context_get_type (void);
 
-void lttv_process_trace(LttvTime start, LttvTime end, LttvTraceset *traceset, 
-    LttvTracesetContext *context);
+/* Run through the events in a traceset in sorted order calling all the
+   hooks appropriately. It starts at the current time and runs until end or
+   nb_events are processed. */
+
+void lttv_process_traceset(LttvTracesetContext *self, LttTime end, 
+    unsigned nb_events);
+
+/* Process traceset can also be done in smaller pieces calling begin, middle
+   repeatedly, and end. The middle function return the number of events 
+   processed. It may be larger than nb_events if several events have the 
+   same timestamp. It will be smaller than nb_events if the end time
+   is reached. */
+
+void lttv_process_traceset_begin(LttvTracesetContext *self, LttTime end);
+
+guint lttv_process_traceset_middle(LttvTracesetContext *self, LttTime end, 
+    unsigned nb_events);
+
+void lttv_process_traceset_end(LttvTracesetContext *self);
+
+
+void lttv_process_traceset_seek_time(LttvTracesetContext *self, LttTime start);
+
+void lttv_process_trace_seek_time(LttvTraceContext *self, LttTime start);
 
 void lttv_traceset_context_add_hooks(LttvTracesetContext *self,
     LttvHooks *before_traceset, 
@@ -166,9 +212,12 @@ void lttv_traceset_context_add_hooks(LttvTracesetContext *self,
     LttvHooks *check_trace, 
     LttvHooks *before_trace, 
     LttvHooks *after_trace, 
+    LttvHooks *check_tracefile,
+    LttvHooks *before_tracefile,
+    LttvHooks *after_tracefile,
     LttvHooks *check_event, 
     LttvHooks *before_event, 
-    LttvHooks *after_event)
+    LttvHooks *after_event);
 
 void lttv_traceset_context_remove_hooks(LttvTracesetContext *self,
     LttvHooks *before_traceset, 
@@ -176,8 +225,64 @@ void lttv_traceset_context_remove_hooks(LttvTracesetContext *self,
     LttvHooks *check_trace, 
     LttvHooks *before_trace, 
     LttvHooks *after_trace, 
+    LttvHooks *check_tracefile,
+    LttvHooks *before_tracefile,
+    LttvHooks *after_tracefile,
     LttvHooks *check_event, 
     LttvHooks *before_event, 
-    LttvHooks *after_event)
+    LttvHooks *after_event);
+
+void lttv_trace_context_add_hooks(LttvTraceContext *self,
+                                 LttvHooks *check_trace, 
+                                 LttvHooks *before_trace, 
+                                 LttvHooks *after_trace);
+
+void lttv_trace_context_remove_hooks(LttvTraceContext *self,
+                                    LttvHooks *check_trace, 
+                                    LttvHooks *before_trace, 
+                                    LttvHooks *after_trace);
+
+void lttv_tracefile_context_add_hooks(LttvTracefileContext *self,
+                                     LttvHooks *check_tracefile,
+                                     LttvHooks *before_tracefile,
+                                     LttvHooks *after_tracefile,
+                                     LttvHooks *check_event, 
+                                     LttvHooks *before_event, 
+                                     LttvHooks *after_event);
+
+void lttv_tracefile_context_remove_hooks(LttvTracefileContext *self,
+                                        LttvHooks *check_tracefile,
+                                        LttvHooks *before_tracefile,
+                                        LttvHooks *after_tracefile,
+                                        LttvHooks *check_event, 
+                                        LttvHooks *before_event, 
+                                        LttvHooks *after_event);
+
+void lttv_tracefile_context_add_hooks_by_id(LttvTracefileContext *self,
+                                           unsigned i,
+                                           LttvHooks *before_event_by_id, 
+                                           LttvHooks *after_event_by_id);
+
+void lttv_tracefile_context_remove_hooks_by_id(LttvTracefileContext *self,
+                                              unsigned i);
+
+typedef struct _LttvTraceHook {
+  LttvHook h;
+  guint id;
+  LttField *f1;
+  LttField *f2;
+  LttField *f3;
+} LttvTraceHook;
+
+
+/* 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. */
+void lttv_trace_find_hook(LttTrace *t, char *facility, char *event_type,
+    char *field1, char *field2, char *field3, LttvHook h, LttvTraceHook *th);
 
 #endif // PROCESSTRACE_H
This page took 0.025211 seconds and 4 git commands to generate.