Enable support for opening multiple trace
[lttv.git] / lttv / modules / gui / controlflow / eventhooks.c
index 81cfd9e6591a5917b0c19a68876166b3a698ceb6..f024cd3559ee11c319d9948be7b70319123df33a 100644 (file)
@@ -130,8 +130,7 @@ static void request_background_data(ControlFlowData *control_flow_data)
   
   for(i=0;i<num_traces;i++) {
     trace = lttv_traceset_get(ts, i);
-    tstate = trace->state;
-
+  
     if(lttvwindowtraces_get_ready(g_quark_from_string("state"),trace)==FALSE
         && !ts->has_precomputed_states) {
 
@@ -501,7 +500,7 @@ int before_trywakeup_hook(void *hook_data, void *call_data)
      * draw items from the beginning of the read for it. If it is not
      * present, it's a new process and it was not present : it will
      * be added after the state update. TOCHECK: What does that last para mean? */
-      guint trace_num = 0; /*TODO ybrosseau 2012-08-23: use right number */
+      guint trace_num = lttv_traceset_get_trace_index_from_event(event);
       LttvProcessState *process = lttv_state_find_process(ts, woken_cpu, woken_pid);
     
     if(process != NULL) {
@@ -578,7 +577,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
   pid_out = lttv_event_get_long(event, "prev_tid");
   pid_in = lttv_event_get_long(event, "next_tid");
   state_out = lttv_event_get_long(event, "prev_state");
-  guint trace_number = 0;//TODO fdeslauriers 2012-07-17: // Use trace handle to know trace number
+  guint trace_number = lttv_traceset_get_trace_index_from_event(event);
 
   process = lttv_state_find_process(ts,cpu,pid_out);
   evtime = lttv_event_get_timestamp(event);
@@ -637,7 +636,7 @@ int before_schedchange_hook(void *hook_data, void *call_data)
                  evtime );
 
     } else
-      g_warning("Cannot find pin_in in schedchange %u", pid_in);
+           g_warning("Cannot find pid_in in schedchange %u at %u.%u", pid_in, evtime.tv_sec, evtime.tv_nsec);
 #ifdef BABEL_CLEANUP
   tfc->target_pid = target_pid_saved;
 #endif //babel_cleanup
@@ -719,7 +718,7 @@ int after_schedchange_hook(void *hook_data, void *call_data)
     //process_in = lttv_state_find_process(ts, ANY_CPU, pid_in);
     //process_in = tfs->process;
     guint cpu = lttv_traceset_get_cpuid_from_event(event);
-    guint trace_num = 0; /* TODO set right trace number */
+    guint trace_num = lttv_traceset_get_trace_index_from_event(event);
     process_in = ts->running_process[cpu];
     /* It should exist, because we are after the state update. */
 #ifdef EXTRA_CHECK
@@ -800,8 +799,8 @@ int before_execmode_hook(void *hook_data, void *call_data)
   event = (LttvEvent *) call_data;
   if ((strncmp(lttv_traceset_get_name_from_event(event),"sys_", sizeof("sys_") - 1) == 0)
           ||(strcmp(lttv_traceset_get_name_from_event(event),"exit_syscall") == 0)
-          ||(strncmp(lttv_traceset_get_name_from_event(event),"irq_handler_",sizeof("irq_handler_")) == 0)
-          ||(strncmp(lttv_traceset_get_name_from_event(event),"softirq_", sizeof("softirq_")) == 0)) {
+          ||(strncmp(lttv_traceset_get_name_from_event(event),"irq_handler_",sizeof("irq_handler_") -1) == 0)
+          ||(strncmp(lttv_traceset_get_name_from_event(event),"softirq_", sizeof("softirq_") - 1) == 0)) {
           
   LttTime evtime = lttv_event_get_timestamp(event);
   ControlFlowData *control_flow_data = (ControlFlowData*)hook_data;
@@ -811,8 +810,12 @@ int before_execmode_hook(void *hook_data, void *call_data)
   cpu = lttv_traceset_get_cpuid_from_event(event);
   ts = event->state;
   
-  guint trace_number = 0;//TODO fdeslauriers 2012-07-17: // Use trace handle to know trace number
-  process = lttv_state_find_process(ts ,cpu ,pid);
+  guint trace_number = lttv_traceset_get_trace_index_from_event(event);
+
+  //TODO ybrosseau 2013-04-09 validate that using the running process is the right choice
+  //process = lttv_state_find_process(ts ,cpu ,pid);
+  process = ts->running_process[cpu];
+
   g_assert(process != NULL);
 
   guint pid = process->pid;
@@ -891,7 +894,7 @@ int before_process_exit_hook(void *hook_data, void *call_data)
   /* Add process to process list (if not present) */
   //LttvProcessState *process = tfs->process;
     guint cpu = lttv_traceset_get_cpuid_from_event(event);
-    guint trace_num = 0; /* TODO set right trace number */
+    guint trace_num = lttv_traceset_get_trace_index_from_event(event);
 
   LttvProcessState *process = ts->running_process[cpu];
   guint pid = process->pid;
@@ -960,7 +963,7 @@ int before_process_release_hook(void *hook_data, void *call_data)
   LttTime evtime = lttv_event_get_timestamp(event);
 
 
-    guint trace_num = 0; /* TODO set right trace number */
+    guint trace_num = lttv_traceset_get_trace_index_from_event(event);
 
   guint pid;
   {
@@ -1062,7 +1065,7 @@ int after_process_fork_hook(void *hook_data, void *call_data)
   /* It should exist, because we are after the state update. */
   g_assert(process_child != NULL);
 
-  guint trace_num = 0; /* TODO put right */
+  guint trace_num = lttv_traceset_get_trace_index_from_event(event);
 
   /* Cannot use current process, because this action is done by the parent
    * on its child. */
@@ -1131,7 +1134,7 @@ int after_process_fork_hook(void *hook_data, void *call_data)
  */
 int after_process_exit_hook(void *hook_data, void *call_data)
 {
-#if 0
+
   LttvEvent *event;
 
   event = (LttvEvent *) call_data;
@@ -1156,26 +1159,26 @@ int after_process_exit_hook(void *hook_data, void *call_data)
   /* Add process to process list (if not present) */
   //LttvProcessState *process = tfs->process;
   guint cpu = lttv_traceset_get_cpuid_from_event(event);
-  guint trace_num = 0; /* TODO set right trace number */
+  guint trace_num = lttv_traceset_get_trace_index_from_event(event);
   LttvProcessState *process = ts->running_process[cpu];
 
   /* It should exist, because we are after the state update. */
   g_assert(process != NULL);
 
   guint pid = process->pid;
-  LttTime birth;
-  guint pl_height = 0;
+  //LttTime birth;
+  //guint pl_height = 0;
   HashedProcessData *hashed_process_data = NULL;
 
   ProcessList *process_list = control_flow_data->process_list;
 
-  birth = process->creation_time;
+  //birth = process->creation_time;
 
   if(likely(process_list->current_hash_data[trace_num][cpu] != NULL) ){
     hashed_process_data = process_list->current_hash_data[trace_num][cpu];
   } else {
          hashed_process_data = get_hashed_process_data(control_flow_data, 
-                                                 process, ppid, trace_num);
+                                                 process, pid, trace_num);
 
 
     /* Set the current process */
@@ -1208,7 +1211,7 @@ int after_process_exit_hook(void *hook_data, void *call_data)
       hashed_process_data->x.middle_marked = FALSE;
     }
   }
-#endif
+
   return FALSE;
 }
 
@@ -1308,7 +1311,7 @@ int after_event_enum_process_hook(void *hook_data, void *call_data)
   HashedProcessData *hashed_process_data_in = NULL;
 
   ProcessList *process_list = control_flow_data->process_list;
-  guint trace_num = 0; /* TODO put right trace number */
+  guint trace_num = lttv_traceset_get_trace_index_from_event(event);
   
   guint pid_in;
   {
@@ -1773,8 +1776,8 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data)
 #ifdef EXTRA_CHECK
     g_assert(lttv_traceset_number(tsc->ts) > 0);
 #endif //EXTRA_CHECK
-    //TODO Fdeslauriers 2012-07-17: adapt for multiple traces
-    LttvTrace *trace = lttv_traceset_get(ts,0);
+
+    LttvTrace *trace = lttv_traceset_get(ts, process_info->trace_num);
     LttvTraceState *trace_state = trace->state;
 
 #if 0
This page took 0.025398 seconds and 4 git commands to generate.