Fix softirq entry event name check
[lttv.git] / lttv / lttv / state.c
index 792e3cbe2a7ac9bff2eb4eb000a80f0fb92d12d6..fc9bcac18083fc0f2a91ac029578d51e5eb69834 100644 (file)
@@ -393,7 +393,7 @@ static void restore_init_state(LttvTraceState *self)
 
        //LttvTracefileState *tfcs;
 
-       //LttTime start_time, end_time;
+       LttTime start_time;
 
        /* Free the process tables */
        if(self->processes != NULL) lttv_state_free_process_table(self->processes);
@@ -407,8 +407,10 @@ static void restore_init_state(LttvTraceState *self)
        //g_tree_destroy(self->parent.ts_context->pqueue);
        //self->parent.ts_context->pqueue = g_tree_new(compare_tracefile);
 
-       //TODO use babeltrace one.
-       //ltt_trace_time_span_get(self->parent.t, &start_time, &end_time);
+       start_time = ltt_time_from_uint64(
+                           bt_trace_handle_get_timestamp_begin(self->trace->traceset->context, 
+                                                               self->trace->id));
+
 
        //lttv_process_trace_seek_time(&self->parent, ltt_time_zero);
 
@@ -421,8 +423,7 @@ static void restore_init_state(LttvTraceState *self)
        for(i=0; i< nb_cpus; i++) {
                LttvExecutionState *es;
                self->running_process[i] = lttv_state_create_process(self, NULL, i, 0, 0,
-                               //TODO use &start_time...
-                               LTTV_STATE_UNNAMED, &ltt_time_zero);
+                               LTTV_STATE_UNNAMED, &start_time);
                /* We are not sure is it's a kernel thread or normal thread, put the
                 * bottom stack state to unknown */
                self->running_process[i]->execution_stack =
@@ -1459,7 +1460,7 @@ void lttv_state_save(LttvTraceState *self, LttvAttribute *container)
        /* Save the current position */
        value = lttv_attribute_add(container, LTTV_STATE_POSITION,
                        LTTV_POINTER);
-       *(value.v_pointer) = lttv_traceset_create_position(lttv_trace_get_traceset(self->trace));
+       *(value.v_pointer) = lttv_traceset_create_current_position(lttv_trace_get_traceset(self->trace));
 
 #ifdef BABEL_CLEANUP
        nb_tracefile = self->parent.tracefiles->len;
@@ -2558,7 +2559,7 @@ static gboolean soft_irq_entry(void *hook_data, void *call_data)
 
        event = (LttvEvent *) call_data;
        if (strcmp(lttv_traceset_get_name_from_event(event),
-                       "softirq_exit") != 0)
+                       "softirq_entry") != 0)
                return FALSE;
 
        cpu = lttv_traceset_get_cpuid_from_event(event);
@@ -2781,6 +2782,8 @@ static gboolean schedchange(void *hook_data, void *call_data)
 
        guint pid_in, pid_out;
        gint64 state_out;
+       //TODO ybrosseau 2012-07-13: manage this 20 in a constact or dynamically
+       char next_comm[20];
        LttTime timestamp;
        event = (LttvEvent *) call_data;
        if (strcmp(lttv_traceset_get_name_from_event(event),
@@ -2794,6 +2797,9 @@ static gboolean schedchange(void *hook_data, void *call_data)
        pid_in = lttv_event_get_long_unsigned(event, "next_tid");
        state_out = lttv_event_get_long(event, "prev_state");
 
+       strncpy(next_comm, lttv_event_get_string(event, "next_comm"), 20);
+       next_comm[20-1] = '\0';
+
        timestamp = lttv_event_get_timestamp(event);
        
        if(likely(process != NULL)) {
@@ -2851,6 +2857,7 @@ static gboolean schedchange(void *hook_data, void *call_data)
        process->cpu = cpu;
  // process->last_cpu_index = ltt_tracefile_num(((LttvTracefileContext*)s)->tf);
        process->state->change = timestamp;
+       process->name = g_quark_from_string(next_comm);
 
        /* update cpu status */
        if(pid_in == 0)
@@ -3433,11 +3440,16 @@ void lttv_state_add_event_hooks(LttvTraceset *traceset)
        
        LttvAttributeValue value;
        LttvHooks*event_hook;
+#ifdef BABEL_CLEANUP   
        LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
        result = lttv_iattribute_find_by_path(attributes, "hooks/event",
                                              LTTV_POINTER, &value);
        g_assert(result);
        event_hook = *(value.v_pointer);
+#endif
+       //TODO ybrosseau 2012-07-12: Validate that using traceset hooks instead of the global one is valid
+       //Use traceset hooks 
+       event_hook = lttv_traceset_get_hooks(traceset);
        g_assert(event_hook);
 
        lttv_hooks_add(event_hook,syscall_entry , NULL, LTTV_PRIO_STATE);       
This page took 0.024532 seconds and 4 git commands to generate.