X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fcontrolflow%2Feventhooks.c;h=29ebfeb7c1b4b204e0daa9029e928a68f0d44f51;hb=fdfddc3beadfd32ef6c7b0ceb78770435d724164;hp=14ae53593982d15f5bd782a12ec8e63b11828b92;hpb=6550d71135aed5d81a76d7d5625757570bcf0819;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 14ae5359..29ebfeb7 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -71,7 +71,6 @@ #include "cfv.h" #include "processlist.h" #include "drawing.h" -#include "cfv-private.h" #define MAX_PATH_LEN 256 @@ -142,8 +141,6 @@ gint background_ready(void *hook_data, void *call_data) { ControlFlowData *control_flow_data = (ControlFlowData *)hook_data; LttvTrace *trace = (LttvTrace*)call_data; - LttvTracesetContext *tsc = - lttvwindow_get_traceset_context(control_flow_data->tab); control_flow_data->background_info_waiting--; @@ -236,7 +233,6 @@ h_guicontrolflow(Tab *tab) control_flow_data->tab = tab; - //g_debug("time width2 : %u",time_window->time_width); // Unreg done in the GuiControlFlow_Destructor lttvwindow_register_traceset_notify(tab, traceset_notify, @@ -268,6 +264,7 @@ int event_selected_hook(void *hook_data, void *call_data) g_debug("DEBUG : event selected by main window : %u", *event_number); + return 0; } /* Function that selects the color of status&exemode line */ @@ -380,20 +377,16 @@ int before_schedchange_hook(void *hook_data, void *call_data) { EventsRequest *events_request = (EventsRequest*)hook_data; ControlFlowData *control_flow_data = events_request->viewer_data; - Drawing_t *drawing = control_flow_data->drawing; LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; LttvTracefileState *tfs = (LttvTracefileState *)call_data; - LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context; LttEvent *e; e = tfc->e; LttTime evtime = ltt_event_time(e); - guint width = drawing->width; - /* we are in a schedchange, before the state update. We must draw the * items corresponding to the state before it changes : now is the right * time to do it. @@ -460,19 +453,13 @@ int before_schedchange_hook(void *hook_data, void *call_data) hashed_process_data, &y, &height); - drawing_insert_square( drawing, y, height); + drawing_insert_square( control_flow_data->drawing, y, height); } /* Now, the process is in the state hash and our own process hash. * We definitely can draw the items related to the ending state. */ - /* Check if the x position is unset. In can have been left unset by - * a draw closure from a after chunk hook. This should never happen, - * because it must be set by before chunk hook to the damage_begin - * value. - */ - g_assert(hashed_process_data->x.middle != -1); if(ltt_time_compare(hashed_process_data->next_good_time, evtime) > 0) { @@ -489,7 +476,8 @@ int before_schedchange_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( time_window, @@ -519,7 +507,8 @@ int before_schedchange_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( time_window, @@ -628,7 +617,7 @@ int before_schedchange_hook(void *hook_data, void *call_data) hashed_process_data, &y, &height); - drawing_insert_square( drawing, y, height); + drawing_insert_square( control_flow_data->drawing, y, height); } //We could set the current process and hash here, but will be done //by after schedchange hook @@ -637,13 +626,6 @@ int before_schedchange_hook(void *hook_data, void *call_data) * We definitely can draw the items related to the ending state. */ - /* Check if the x position is unset. In can have been left unset by - * a draw closure from a after chunk hook. This should never happen, - * because it must be set by before chunk hook to the damage_begin - * value. - */ - g_assert(hashed_process_data->x.middle != -1); - if(ltt_time_compare(hashed_process_data->next_good_time, evtime) > 0) { @@ -660,6 +642,8 @@ int before_schedchange_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( time_window, @@ -687,6 +671,8 @@ int before_schedchange_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( @@ -1381,19 +1367,16 @@ int after_schedchange_hook(void *hook_data, void *call_data) LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; LttvTracefileState *tfs = (LttvTracefileState *)call_data; - LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context; LttEvent *e; e = tfc->e; LttTime evtime = ltt_event_time(e); - guint width = control_flow_data->drawing->width; - /* Add process to process list (if not present) */ - LttvProcessState *process_out, *process_in; + LttvProcessState *process_in; LttTime birth; - guint y_in = 0, y_out = 0, height = 0, pl_height = 0; + guint y_in = 0, height = 0, pl_height = 0; HashedProcessData *hashed_process_data_in = NULL; ProcessList *process_list = control_flow_data->process_list; @@ -1415,8 +1398,9 @@ int after_schedchange_hook(void *hook_data, void *call_data) //process_in = lttv_state_find_process(tfs, pid_in); process_in = tfs->process; /* It should exist, because we are after the state update. */ +#ifdef EXTRA_CHECK g_assert(process_in != NULL); - +#endif //EXTRA_CHECK birth = process_in->creation_time; hashed_process_data_in = processlist_get_process_data(process_list, @@ -1465,7 +1449,8 @@ int after_schedchange_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint new_x; convert_time_to_pixels( @@ -1992,18 +1977,15 @@ int before_execmode_hook(void *hook_data, void *call_data) { EventsRequest *events_request = (EventsRequest*)hook_data; ControlFlowData *control_flow_data = events_request->viewer_data; - Drawing_t *drawing = control_flow_data->drawing; LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; LttvTracefileState *tfs = (LttvTracefileState *)call_data; - LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context; LttEvent *e; e = tfc->e; LttTime evtime = ltt_event_time(e); - guint width = drawing->width; /* we are in a execmode, before the state update. We must draw the * items corresponding to the state before it changes : now is the right @@ -2024,7 +2006,7 @@ int before_execmode_hook(void *hook_data, void *call_data) ProcessList *process_list = control_flow_data->process_list; LttTime birth = process->creation_time; - if(process_list->current_hash_data[tfc->index] != NULL) { + if(likely(process_list->current_hash_data[tfc->index] != NULL)) { hashed_process_data = process_list->current_hash_data[tfc->index]; } else { hashed_process_data = processlist_get_process_data(process_list, @@ -2032,7 +2014,7 @@ int before_execmode_hook(void *hook_data, void *call_data) process->last_cpu_index, &birth, tfc->t_context->index); - if(hashed_process_data == NULL) + if(unlikely(hashed_process_data == NULL)) { g_assert(pid == 0 || pid != process->ppid); ProcessInfo *process_info; @@ -2052,7 +2034,7 @@ int before_execmode_hook(void *hook_data, void *call_data) hashed_process_data, &y, &height); - drawing_insert_square( drawing, y, height); + drawing_insert_square( control_flow_data->drawing, y, height); } /* Set the current process */ process_list->current_hash_data[process->last_cpu_index] = @@ -2062,18 +2044,11 @@ int before_execmode_hook(void *hook_data, void *call_data) /* Now, the process is in the state hash and our own process hash. * We definitely can draw the items related to the ending state. */ - - /* Check if the x position is unset. In can have been left unset by - * a draw closure from a after chunk hook. This should never happen, - * because it must be set by before chunk hook to the damage_begin - * value. - */ - g_assert(hashed_process_data->x.over != -1); - if(ltt_time_compare(hashed_process_data->next_good_time, - evtime) > 0) + if(likely(ltt_time_compare(hashed_process_data->next_good_time, + evtime) > 0)) { - if(hashed_process_data->x.middle_marked == FALSE) { + if(unlikely(hashed_process_data->x.middle_marked == FALSE)) { processlist_get_pixels_from_data(process_list, hashed_process_data, &y, @@ -2086,6 +2061,8 @@ int before_execmode_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( time_window, @@ -2114,6 +2091,8 @@ int before_execmode_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( @@ -2124,10 +2103,10 @@ int before_execmode_hook(void *hook_data, void *call_data) /* Jump over draw if we are at the same x position */ - if(x == hashed_process_data->x.middle && - hashed_process_data->x.middle_used) + if(unlikely(x == hashed_process_data->x.middle && + hashed_process_data->x.middle_used)) { - if(hashed_process_data->x.middle_marked == FALSE) { + if(unlikely(hashed_process_data->x.middle_marked == FALSE)) { /* Draw collision indicator */ gdk_gc_set_foreground(drawing->gc, &drawing_colors[COL_WHITE]); gdk_draw_point(drawing->pixmap, @@ -2203,13 +2182,11 @@ int after_execmode_hook(void *hook_data, void *call_data) LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; LttvTracefileState *tfs = (LttvTracefileState *)call_data; - LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context; LttEvent *e; e = tfc->e; LttTime evtime = ltt_event_time(e); - guint width = control_flow_data->drawing->width; /* Add process to process list (if not present) */ LttvProcessState *process; @@ -2228,7 +2205,7 @@ int after_execmode_hook(void *hook_data, void *call_data) birth = process->creation_time; - if(process_list->current_hash_data[tfc->index] != NULL) { + if(likely(process_list->current_hash_data[tfc->index] != NULL)) { hashed_process_data = process_list->current_hash_data[tfc->index]; } else { hashed_process_data = processlist_get_process_data(process_list, @@ -2236,7 +2213,7 @@ int after_execmode_hook(void *hook_data, void *call_data) process->last_cpu_index, &birth, tfc->t_context->index); - if(hashed_process_data == NULL) + if(unlikely(hashed_process_data == NULL)) { g_assert(pid == 0 || pid != process->ppid); /* Process not present */ @@ -2263,8 +2240,8 @@ int after_execmode_hook(void *hook_data, void *call_data) hashed_process_data; } - if(ltt_time_compare(hashed_process_data->next_good_time, - evtime) <= 0) + if(unlikely(ltt_time_compare(hashed_process_data->next_good_time, + evtime) <= 0)) { #if 0 processlist_get_pixels_from_data(process_list, @@ -2280,8 +2257,8 @@ int after_execmode_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint new_x; convert_time_to_pixels( @@ -2315,18 +2292,15 @@ int before_process_hook(void *hook_data, void *call_data) { EventsRequest *events_request = (EventsRequest*)hook_data; ControlFlowData *control_flow_data = events_request->viewer_data; - Drawing_t *drawing = control_flow_data->drawing; LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; LttvTracefileState *tfs = (LttvTracefileState *)call_data; - LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context; LttEvent *e; e = tfc->e; LttTime evtime = ltt_event_time(e); - guint width = control_flow_data->drawing->width; guint sub_id; { @@ -2351,7 +2325,7 @@ int before_process_hook(void *hook_data, void *call_data) birth = process->creation_time; - if(process_list->current_hash_data[tfc->index] != NULL) { + if(likely(process_list->current_hash_data[tfc->index] != NULL)) { hashed_process_data = process_list->current_hash_data[tfc->index]; } else { hashed_process_data = processlist_get_process_data(process_list, @@ -2359,7 +2333,7 @@ int before_process_hook(void *hook_data, void *call_data) process->last_cpu_index, &birth, tfc->t_context->index); - if(hashed_process_data == NULL) + if(unlikely(hashed_process_data == NULL)) { g_assert(pid == 0 || pid != process->ppid); /* Process not present */ @@ -2387,17 +2361,10 @@ int before_process_hook(void *hook_data, void *call_data) * We definitely can draw the items related to the ending state. */ - /* Check if the x position is unset. In can have been left unset by - * a draw closure from a after chunk hook. This should never happen, - * because it must be set by before chunk hook to the damage_begin - * value. - */ - g_assert(hashed_process_data->x.over != -1); - - if(ltt_time_compare(hashed_process_data->next_good_time, - evtime) > 0) + if(likely(ltt_time_compare(hashed_process_data->next_good_time, + evtime) > 0)) { - if(hashed_process_data->x.middle_marked == FALSE) { + if(unlikely(hashed_process_data->x.middle_marked == FALSE)) { processlist_get_pixels_from_data(process_list, hashed_process_data, &y, @@ -2410,7 +2377,8 @@ int before_process_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( time_window, @@ -2439,7 +2407,8 @@ int before_process_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint x; convert_time_to_pixels( @@ -2450,10 +2419,10 @@ int before_process_hook(void *hook_data, void *call_data) /* Jump over draw if we are at the same x position */ - if(x == hashed_process_data->x.middle && - hashed_process_data->x.middle_used) + if(unlikely(x == hashed_process_data->x.middle && + hashed_process_data->x.middle_used)) { - if(hashed_process_data->x.middle_marked == FALSE) { + if(unlikely(hashed_process_data->x.middle_marked == FALSE)) { /* Draw collision indicator */ gdk_gc_set_foreground(drawing->gc, &drawing_colors[COL_WHITE]); gdk_draw_point(drawing->pixmap, @@ -2531,13 +2500,11 @@ int after_process_hook(void *hook_data, void *call_data) LttvTracefileContext *tfc = (LttvTracefileContext *)call_data; LttvTracefileState *tfs = (LttvTracefileState *)call_data; - LttvTraceState *ts =(LttvTraceState *)((LttvTracefileContext*)tfs)->t_context; LttEvent *e; e = tfc->e; LttTime evtime = ltt_event_time(e); - guint width = control_flow_data->drawing->width; guint sub_id; guint param1; @@ -2573,7 +2540,7 @@ int after_process_hook(void *hook_data, void *call_data) process_child->last_cpu_index, &birth, tfc->t_context->index); - if(hashed_process_data_child == NULL) + if(likely(hashed_process_data_child == NULL)) { g_assert(child_pid == 0 || child_pid != process_child->ppid); /* Process not present */ @@ -2597,8 +2564,8 @@ int after_process_hook(void *hook_data, void *call_data) } - if(ltt_time_compare(hashed_process_data_child->next_good_time, - evtime) <= 0) + if(likely(ltt_time_compare(hashed_process_data_child->next_good_time, + evtime) <= 0)) { #if 0 processlist_get_pixels_from_data(process_list, @@ -2614,7 +2581,8 @@ int after_process_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint new_x; convert_time_to_pixels( time_window, @@ -2622,17 +2590,17 @@ int after_process_hook(void *hook_data, void *call_data) width, &new_x); - if(hashed_process_data_child->x.over != new_x) { + if(likely(hashed_process_data_child->x.over != new_x)) { hashed_process_data_child->x.over = new_x; hashed_process_data_child->x.over_used = FALSE; hashed_process_data_child->x.over_marked = FALSE; } - if(hashed_process_data_child->x.middle != new_x) { + if(likely(hashed_process_data_child->x.middle != new_x)) { hashed_process_data_child->x.middle = new_x; hashed_process_data_child->x.middle_used = FALSE; hashed_process_data_child->x.middle_marked = FALSE; } - if(hashed_process_data_child->x.under != new_x) { + if(likely(hashed_process_data_child->x.under != new_x)) { hashed_process_data_child->x.under = new_x; hashed_process_data_child->x.under_used = FALSE; hashed_process_data_child->x.under_marked = FALSE; @@ -2655,7 +2623,7 @@ int after_process_hook(void *hook_data, void *call_data) birth = process->creation_time; - if(process_list->current_hash_data[tfc->index] != NULL) { + if(likely(process_list->current_hash_data[tfc->index] != NULL) ){ hashed_process_data = process_list->current_hash_data[tfc->index]; } else { hashed_process_data = processlist_get_process_data(process_list, @@ -2663,7 +2631,7 @@ int after_process_hook(void *hook_data, void *call_data) process->last_cpu_index, &birth, tfc->t_context->index); - if(hashed_process_data == NULL) + if(unlikely(hashed_process_data == NULL)) { g_assert(pid == 0 || pid != process->ppid); /* Process not present */ @@ -2691,8 +2659,8 @@ int after_process_hook(void *hook_data, void *call_data) hashed_process_data; } - if(ltt_time_compare(hashed_process_data->next_good_time, - evtime) <= 0) + if(unlikely(ltt_time_compare(hashed_process_data->next_good_time, + evtime) <= 0)) { #if 0 processlist_get_pixels_from_data(process_list, @@ -2708,14 +2676,15 @@ int after_process_hook(void *hook_data, void *call_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint new_x; convert_time_to_pixels( time_window, evtime, width, &new_x); - if(hashed_process_data->x.middle != new_x) { + if(unlikely(hashed_process_data->x.middle != new_x)) { hashed_process_data->x.middle = new_x; hashed_process_data->x.middle_used = FALSE; hashed_process_data->x.middle_marked = FALSE; @@ -2753,13 +2722,13 @@ gint update_time_window_hook(void *hook_data, void *call_data) * currently shown time interval. (reuse is only for scrolling) */ - g_info("Old time window HOOK : %u, %u to %u, %u", + g_info("Old time window HOOK : %lu, %lu to %lu, %lu", old_time_window->start_time.tv_sec, old_time_window->start_time.tv_nsec, old_time_window->time_width.tv_sec, old_time_window->time_width.tv_nsec); - g_info("New time window HOOK : %u, %u to %u, %u", + g_info("New time window HOOK : %lu, %lu to %lu, %lu", new_time_window->start_time.tv_sec, new_time_window->start_time.tv_nsec, new_time_window->time_width.tv_sec, @@ -2949,7 +2918,6 @@ gint traceset_notify(void *hook_data, void *call_data) { ControlFlowData *control_flow_data = (ControlFlowData*) hook_data; Drawing_t *drawing = control_flow_data->drawing; - GtkWidget *widget = drawing->drawing_area; drawing_clear(control_flow_data->drawing); @@ -2957,24 +2925,6 @@ gint traceset_notify(void *hook_data, void *call_data) redraw_notify(control_flow_data, NULL); request_background_data(control_flow_data); -#if 0 - drawing->damage_begin = 0; - drawing->damage_end = drawing->width; - if(drawing->damage_begin < drawing->damage_end) - { - drawing_data_request(drawing, - &drawing->pixmap, - drawing->damage_begin, - 0, - drawing->damage_end-drawing->damage_begin, - drawing->height); - } - - gtk_widget_queue_draw_area(drawing->drawing_area, - 0,0, - drawing->width, - drawing->height); -#endif //0 return FALSE; } @@ -3024,7 +2974,6 @@ gint continue_notify(void *hook_data, void *call_data) { ControlFlowData *control_flow_data = (ControlFlowData*) hook_data; Drawing_t *drawing = control_flow_data->drawing; - GtkWidget *widget = drawing->drawing_area; //g_assert(widget->allocation.width == drawing->damage_end); @@ -3068,7 +3017,7 @@ gint update_current_time_hook(void *hook_data, void *call_data) LttTime trace_start = tsc->time_span.start_time; LttTime trace_end = tsc->time_span.end_time; - g_info("New current time HOOK : %u, %u", current_time.tv_sec, + g_info("New current time HOOK : %lu, %lu", current_time.tv_sec, current_time.tv_nsec); @@ -3130,6 +3079,7 @@ typedef struct _ClosureData { EventsRequest *events_request; LttvTracesetState *tss; LttTime end_time; + guint x_end; } ClosureData; @@ -3141,13 +3091,11 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) EventsRequest *events_request = closure_data->events_request; ControlFlowData *control_flow_data = events_request->viewer_data; - Drawing_t *drawing = control_flow_data->drawing; LttvTracesetState *tss = closure_data->tss; - LttvTracesetContext *tsc = (LttvTracesetContext*)closure_data->tss; + LttvTracesetContext *tsc = (LttvTracesetContext*)tss; LttTime evtime = closure_data->end_time; - guint width = drawing->width; { /* For the process */ @@ -3168,18 +3116,18 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) process = lttv_state_find_process(tfs, process_info->pid); - if(process != NULL) { + if(unlikely(process != NULL)) { /* Only draw for processes that are currently in the trace states */ - guint y = 0, height = 0, pl_height = 0; + guint y = 0, height = 0; ProcessList *process_list = control_flow_data->process_list; - LttTime birth = process_info->birth; - +#ifdef EXTRA_CHECK /* Should be alike when background info is ready */ if(control_flow_data->background_info_waiting==0) g_assert(ltt_time_compare(process->creation_time, process_info->birth) == 0); +#endif //EXTRA_CHECK /* process HAS to be present */ processlist_get_pixels_from_data(process_list, hashed_process_data, @@ -3190,15 +3138,8 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) * We definitely can draw the items related to the ending state. */ - /* Check if the x position is unset. In can have been left unset by - * a draw closure from a after chunk hook. This should never happen, - * because it must be set by before chunk hook to the damage_begin - * value. - */ - g_assert(hashed_process_data->x.over != -1); - - if(ltt_time_compare(hashed_process_data->next_good_time, - evtime) <= 0) + if(unlikely(ltt_time_compare(hashed_process_data->next_good_time, + evtime) <= 0)) { TimeWindow time_window = lttvwindow_get_time_window(control_flow_data->tab); @@ -3208,13 +3149,10 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) || ltt_time_compare(evtime, time_window.end_time) == 1) return; #endif //EXTRA_CHECK - guint x; + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; - convert_time_to_pixels( - time_window, - evtime, - width, - &x); + guint x = closure_data->x_end; DrawContext draw_context; @@ -3250,8 +3188,8 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) } #endif //0 - if(x == hashed_process_data->x.middle && - hashed_process_data->x.middle_used) { + if(unlikely(x == hashed_process_data->x.middle && + hashed_process_data->x.middle_used)) { #if 0 /* do not mark closure : not missing information */ if(hashed_process_data->x.middle_marked == FALSE) { /* Draw collision indicator */ @@ -3271,7 +3209,7 @@ void draw_closure(gpointer key, gpointer value, gpointer user_data) draw_line((void*)&prop_line, (void*)&draw_context); /* become the last x position */ - if(x != hashed_process_data->x.middle) { + if(likely(x != hashed_process_data->x.middle)) { hashed_process_data->x.middle = x; /* but don't use the pixel */ hashed_process_data->x.middle_used = FALSE; @@ -3322,7 +3260,6 @@ int after_request(void *hook_data, void *call_data) EventsRequest *events_request = (EventsRequest*)hook_data; ControlFlowData *control_flow_data = events_request->viewer_data; LttvTracesetState *tss = (LttvTracesetState*)call_data; - LttvTracesetContext *tsc = (LttvTracesetContext*)call_data; ProcessList *process_list = control_flow_data->process_list; LttTime end_time = events_request->end_time; @@ -3332,6 +3269,16 @@ int after_request(void *hook_data, void *call_data) closure_data.tss = tss; closure_data.end_time = end_time; + TimeWindow time_window = + lttvwindow_get_time_window(control_flow_data->tab); + guint width = control_flow_data->drawing->width; + convert_time_to_pixels( + time_window, + end_time, + width, + &closure_data.x_end); + + /* Draw last items */ g_hash_table_foreach(process_list->process_hash, draw_closure, (void*)&closure_data); @@ -3370,6 +3317,15 @@ int after_chunk(void *hook_data, void *call_data) closure_data.tss = tss; closure_data.end_time = end_time; + TimeWindow time_window = + lttvwindow_get_time_window(control_flow_data->tab); + guint width = control_flow_data->drawing->width; + convert_time_to_pixels( + time_window, + end_time, + width, + &closure_data.x_end); + /* Draw last items */ g_hash_table_foreach(process_list->process_hash, draw_closure, (void*)&closure_data);