* 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;
/* 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);
* 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,
}
} 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.
*/
}
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;
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)
processlist_add(process_list,
drawing,
pid_in,
- process->cpu,
+ ltt_tracefile_num(tfc->tf),
process->ppid,
&birth,
tfc->t_context->index,
&hashed_process_data->next_good_time);
}
}
- }
+ } else
+ g_warning("Cannot find pin_in in schedchange %u", pid_in);
}
return 0;
control_flow_data->drawing->height);
}
+ /* Update directly when scrolling */
+ gdk_window_process_updates(control_flow_data->drawing->drawing_area->window,
+ TRUE);
-
return 0;
}
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);
}
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;
}