X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=sidebyside;f=lttv%2Fmodules%2Fgui%2Fcontrolflow%2Feventhooks.c;h=f024cd3559ee11c319d9948be7b70319123df33a;hb=8284135eaaf40b6d7897c63a59a7df0b7f0cd2c7;hp=6ce8ef882d8e48304a53125b22e3226e0dbb8421;hpb=98dfb3029e3fb7d103e57bd0cf19af59a32e2912;p=lttv.git diff --git a/lttv/modules/gui/controlflow/eventhooks.c b/lttv/modules/gui/controlflow/eventhooks.c index 6ce8ef88..f024cd35 100644 --- a/lttv/modules/gui/controlflow/eventhooks.c +++ b/lttv/modules/gui/controlflow/eventhooks.c @@ -130,8 +130,7 @@ static void request_background_data(ControlFlowData *control_flow_data) for(i=0;istate; - + 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 @@ -2042,10 +2045,14 @@ int before_statedump_end(void *hook_data, void *call_data) #endif LttTime evtime = lttv_event_get_timestamp(event); -#ifdef BABEL_CLEANUP + ClosureData closure_data; - closure_data.events_request = events_request; - closure_data.tss = tss; + //TODO ybrosseau 2013-03-27: Fake and event_request. + // We need to change the API of drawing_request_expose to ask + // For and control flow data only. + EventsRequest events_request; + events_request.viewer_data = control_flow_data; + closure_data.events_request = &events_request; closure_data.end_time = evtime; TimeWindow time_window = @@ -2073,7 +2080,7 @@ int before_statedump_end(void *hook_data, void *call_data) gtk_widget_queue_draw(control_flow_data->drawing->drawing_area); #endif //0 /* Request expose (updates damages zone also) */ - drawing_request_expose(events_request, tss, evtime); -#endif + drawing_request_expose(&events_request, evtime); + return 0; }