X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fcontrolflow%2Feventhooks.c;h=22015eafffe26e5a10d6878ff023c651847134e6;hb=e6542e856d40b763fd1b7e6ae72e689318148fcc;hp=089cd5e9d17b415b37b1502cbb70c6c2f5d9ddc9;hpb=4a24fa1f30c23e86e928d2bdb6835da895cb3681;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c index 089cd5e9..22015eaf 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -88,7 +88,7 @@ extern GSList *g_legend_list; * Wait for all the awaited computations to be over. */ -gint background_ready(void *hook_data, void *call_data) +static gint background_ready(void *hook_data, void *call_data) { ControlFlowData *control_flow_data = (ControlFlowData *)hook_data; LttvTrace *trace = (LttvTrace*)call_data; @@ -113,7 +113,7 @@ gint background_ready(void *hook_data, void *call_data) /* Request background computation. Verify if it is in progress or ready first. * Only for each trace in the tab's traceset. */ -void request_background_data(ControlFlowData *control_flow_data) +static void request_background_data(ControlFlowData *control_flow_data) { LttvTracesetContext * tsc = lttvwindow_get_traceset_context(control_flow_data->tab); @@ -138,9 +138,9 @@ void request_background_data(ControlFlowData *control_flow_data) * information. Happens when two viewers ask for it before servicing * starts. */ - lttvwindowtraces_background_request_remove(trace, "state"); - lttvwindowtraces_background_request_queue(trace, - "state"); + if(!lttvwindowtraces_background_request_find(trace, "state")) + lttvwindowtraces_background_request_queue( + main_window_get_widget(control_flow_data->tab), trace, "state"); lttvwindowtraces_background_notify_queue(control_flow_data, trace, ltt_time_infinite, @@ -158,7 +158,7 @@ void request_background_data(ControlFlowData *control_flow_data) } } else { /* Data ready. Be its nature, this viewer doesn't need to have - * its data ready hook called htere, because a background + * its data ready hook called there, because a background * request is always linked with a redraw. */ } @@ -183,7 +183,7 @@ GtkWidget * h_guicontrolflow(Tab *tab) { g_info("h_guicontrolflow, %p", tab); - ControlFlowData *control_flow_data = guicontrolflow() ; + ControlFlowData *control_flow_data = guicontrolflow(tab) ; control_flow_data->tab = tab; @@ -279,6 +279,8 @@ static inline PropertiesLine prepare_s_e_line(LttvProcessState *process) prop_line.color = drawing_colors[COL_RUN_TRAP]; else if(process->state->t == LTTV_STATE_IRQ) prop_line.color = drawing_colors[COL_RUN_IRQ]; + else if(process->state->t == LTTV_STATE_SOFT_IRQ) + prop_line.color = drawing_colors[COL_RUN_SOFT_IRQ]; else if(process->state->t == LTTV_STATE_MODE_UNKNOWN) prop_line.color = drawing_colors[COL_MODE_UNKNOWN]; else @@ -534,7 +536,7 @@ int before_schedchange_hook(void *hook_data, void *call_data) hashed_process_data = processlist_get_process_data(process_list, pid_in, - process->cpu, + ltt_tracefile_num(tfc->tf), &birth, tfc->t_context->index); if(hashed_process_data == NULL) @@ -546,7 +548,7 @@ int before_schedchange_hook(void *hook_data, void *call_data) processlist_add(process_list, drawing, pid_in, - process->cpu, + ltt_tracefile_num(tfc->tf), process->ppid, &birth, tfc->t_context->index, @@ -668,7 +670,8 @@ int before_schedchange_hook(void *hook_data, void *call_data) &hashed_process_data->next_good_time); } } - } + } else + g_warning("Cannot find pin_in in schedchange %u", pid_in); } return 0; @@ -1914,8 +1917,10 @@ gint update_time_window_hook(void *hook_data, void *call_data) control_flow_data->drawing->height); } + /* Update directly when scrolling */ + gdk_window_process_updates(control_flow_data->drawing->drawing_area->window, + TRUE); - return 0; } @@ -1924,6 +1929,12 @@ gint traceset_notify(void *hook_data, void *call_data) ControlFlowData *control_flow_data = (ControlFlowData*) hook_data; Drawing_t *drawing = control_flow_data->drawing; + if(unlikely(drawing->gc == NULL)) { + return FALSE; + } + if(drawing->dotted_gc == NULL) { + return FALSE; + } drawing_clear(control_flow_data->drawing); processlist_clear(control_flow_data->process_list); @@ -2076,8 +2087,11 @@ gint update_current_time_hook(void *hook_data, void *call_data) } gtk_widget_queue_draw(control_flow_data->drawing->drawing_area); - + /* Update directly when scrolling */ + gdk_window_process_updates(control_flow_data->drawing->drawing_area->window, + TRUE); + return 0; }