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=6c1e89f764d049400c9debf26d4213be9c57098f;hpb=96947fcfd1323ffb5e9f2ac484adb4432b69e90c;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 6c1e89f7..29ebfeb7 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -141,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--; @@ -266,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 */ @@ -378,12 +377,10 @@ 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; @@ -456,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) { @@ -485,7 +476,7 @@ 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( @@ -516,6 +507,7 @@ 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( @@ -625,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 @@ -634,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) { @@ -657,6 +642,7 @@ 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( @@ -685,6 +671,7 @@ 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; @@ -1380,7 +1367,6 @@ 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; @@ -1388,9 +1374,9 @@ int after_schedchange_hook(void *hook_data, void *call_data) LttTime evtime = ltt_event_time(e); /* 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; @@ -1463,8 +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 - - guint width = control_flow_data->drawing->width; + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint new_x; convert_time_to_pixels( @@ -1991,12 +1977,10 @@ 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; @@ -2022,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, @@ -2030,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; @@ -2050,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] = @@ -2060,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, @@ -2084,6 +2061,7 @@ 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( @@ -2113,6 +2091,7 @@ 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; @@ -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,7 +2182,6 @@ 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; @@ -2227,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, @@ -2235,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 */ @@ -2262,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, @@ -2279,7 +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 - guint width = control_flow_data->drawing->width; + Drawing_t *drawing = control_flow_data->drawing; + guint width = drawing->width; guint new_x; convert_time_to_pixels( @@ -2313,12 +2292,10 @@ 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; @@ -2348,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, @@ -2356,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 */ @@ -2384,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, @@ -2407,7 +2377,7 @@ 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( @@ -2437,6 +2407,7 @@ 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; @@ -2448,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, @@ -2525,12 +2496,10 @@ int after_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; @@ -2571,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 */ @@ -2595,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, @@ -2612,7 +2581,7 @@ 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( @@ -2621,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; @@ -2654,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, @@ -2662,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 */ @@ -2690,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, @@ -2707,7 +2676,7 @@ 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( @@ -2715,7 +2684,7 @@ int after_process_hook(void *hook_data, void *call_data) 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,10 +3091,9 @@ 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; @@ -3167,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, @@ -3189,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); @@ -3207,14 +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 + Drawing_t *drawing = control_flow_data->drawing; guint width = drawing->width; - guint x; - 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);