add process names
[lttv.git] / ltt / branches / poly / lttv / lttv / state.h
index 54277f4fe3c988fe56c716ca99e0cd7569d4f304..9d1598b476adb146b628b3ba6114120ab44c2fa5 100644 (file)
@@ -28,7 +28,7 @@
    sufficient for the analysis, and possibly organized quite differently.
 
    The state information is added to LttvTracesetContext, LttvTraceContext 
-   and LttvTracefileContext objects, used by processTrace, through
+   and LttvTracefileContext objects, used by process_traceset, through
    subtyping. The context objects already reflect the multiple tracefiles
    (one per cpu) per trace and multiple traces per trace set. The state
    objects defined here simply add fields to the relevant context objects. 
 /* Priority of state hooks */
 #define LTTV_PRIO_STATE 25
 
+#define LTTV_STATE_SAVE_INTERVAL 50000
+
+/* Facilities Quarks */
+
+extern GQuark
+    LTT_FACILITY_KERNEL,
+    LTT_FACILITY_PROCESS,
+    LTT_FACILITY_FS;
+
+/* Events Quarks */
+
+extern GQuark 
+    LTT_EVENT_SYSCALL_ENTRY,
+    LTT_EVENT_SYSCALL_EXIT,
+    LTT_EVENT_TRAP_ENTRY,
+    LTT_EVENT_TRAP_EXIT,
+    LTT_EVENT_IRQ_ENTRY,
+    LTT_EVENT_IRQ_EXIT,
+    LTT_EVENT_SCHEDCHANGE,
+    LTT_EVENT_FORK,
+    LTT_EVENT_EXIT,
+    LTT_EVENT_FREE,
+    LTT_EVENT_EXEC;
+
+/* Fields Quarks */
+
+extern GQuark 
+    LTT_FIELD_SYSCALL_ID,
+    LTT_FIELD_TRAP_ID,
+    LTT_FIELD_IRQ_ID,
+    LTT_FIELD_OUT,
+    LTT_FIELD_IN,
+    LTT_FIELD_OUT_STATE,
+    LTT_FIELD_PARENT_PID,
+    LTT_FIELD_CHILD_PID,
+    LTT_FIELD_PID,
+    LTT_FIELD_NAME;
+
+extern GQuark LTT_EVENT_SYSCALL_ENTRY;
+
 typedef struct _LttvTracesetState LttvTracesetState;
 typedef struct _LttvTracesetStateClass LttvTracesetStateClass;
 
@@ -60,8 +100,10 @@ typedef struct _LttvTraceStateClass LttvTraceStateClass;
 typedef struct _LttvTracefileState LttvTracefileState;
 typedef struct _LttvTracefileStateClass LttvTracefileStateClass;
 
+gint lttv_state_hook_add_event_hooks(void *hook_data, void *call_data);
 void lttv_state_add_event_hooks(LttvTracesetState *self);
 
+gint lttv_state_hook_remove_event_hooks(void *hook_data, void *call_data);
 void lttv_state_remove_event_hooks(LttvTracesetState *self);
 
 void lttv_state_save_add_event_hooks(LttvTracesetState *self);
@@ -124,6 +166,7 @@ extern LttvProcessStatus
   LTTV_STATE_WAIT_FORK,
   LTTV_STATE_WAIT_CPU,
   LTTV_STATE_EXIT,
+  LTTV_STATE_ZOMBIE,
   LTTV_STATE_WAIT,
   LTTV_STATE_RUN;
 
@@ -146,23 +189,28 @@ typedef struct _LttvProcessState {
   GQuark pid_time;
   GArray *execution_stack;         /* Array of LttvExecutionState */
   LttvExecutionState *state;       /* Top of interrupt stack */
-  GQuark last_cpu;                /* Last CPU where process was scheduled */
+      /* WARNING : each time the execution_stack size is modified, the state
+       * must be reget : g_array_set_size can have to move the array.
+       * (Mathieu) */
+  guint cpu;                /* CPU where process is scheduled (being either in
+                               the active or inactive runqueue)*/
+//  guint  last_tracefile_index;    /* index in the trace for cpu tracefile */
   /* opened file descriptors, address map?... */
 } LttvProcessState;
 
+#define ANY_CPU 0 /* For clarity sake : a call to lttv_state_find_process for
+                     a PID != 0 will search on any cpu automatically. */
 
 LttvProcessState *
-lttv_state_find_process(LttvTracefileState *tfs, guint pid);
-
-LttvProcessState *
-lttv_state_find_process_from_trace(LttvTraceState *ts, GQuark cpu, guint pid);
+lttv_state_find_process(LttvTraceState *ts, guint cpu, guint pid);
 
 LttvProcessState *
-lttv_state_find_process_or_create(LttvTracefileState *tfs, guint pid);
+lttv_state_find_process_or_create(LttvTraceState *ts, guint cpu, guint pid,
+    LttTime *timestamp);
 
 LttvProcessState *
-lttv_state_create_process(LttvTracefileState *tfs, LttvProcessState *parent, 
-    guint pid);
+lttv_state_create_process(LttvTraceState *ts, LttvProcessState *parent, 
+    guint cpu, guint pid, const LttTime *timestamp);
 
 void lttv_state_write(LttvTraceState *self, LttTime t, FILE *fp);
 
@@ -197,7 +245,8 @@ GType lttv_traceset_state_get_type (void);
 struct _LttvTraceState {
   LttvTraceContext parent;
 
-  GHashTable *processes;  /* LttvProcessState objects indexed by pid */
+  GHashTable *processes;  /* LttvProcessState objects indexed by pid and
+                             last_cpu */
   guint nb_event, save_interval;
   /* Block/char devices, locks, memory pages... */
   GQuark *eventtype_names;
@@ -205,6 +254,10 @@ struct _LttvTraceState {
   GQuark *trap_names;
   GQuark *irq_names;
   LttTime *max_time_state_recomputed_in_seek;
+
+  /* Array of per cpu running process */
+  LttvProcessState **running_process;
+  
 };
 
 struct _LttvTraceStateClass {
@@ -235,9 +288,9 @@ void lttv_state_state_saved_free(LttvTraceState *self,
 struct _LttvTracefileState {
   LttvTracefileContext parent;
 
-  LttvProcessState *process;
-  GQuark cpu_name;
-  guint saved_position;
+  //LttvProcessState *process;
+  GQuark tracefile_name;
+//  guint saved_position;
 };
 
 struct _LttvTracefileStateClass {
This page took 0.024765 seconds and 4 git commands to generate.