From f66eba62898bf525692d55ef95935266aee56096 Mon Sep 17 00:00:00 2001 From: compudj Date: Wed, 7 Jan 2004 22:27:35 +0000 Subject: [PATCH] process trace connection : time interval too long : 1 second. Result for now : processing the trace is long. This is not a normal value. Not connected to any drawing for the moment git-svn-id: http://ltt.polymtl.ca/svn@359 04897980-b3bd-0310-b5e0-8ef037075253 --- .../poly/lttv/modules/guiControlFlow/CFV.c | 7 +- .../lttv/modules/guiControlFlow/Drawing.c | 71 +++++++++++++------ .../lttv/modules/guiControlFlow/Drawing.h | 2 +- .../lttv/modules/guiControlFlow/Event_Hooks.c | 23 ++++-- .../lttv/modules/guiControlFlow/Event_Hooks.h | 24 +++++++ 5 files changed, 99 insertions(+), 28 deletions(-) diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c b/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c index 5bca7f54..6ac2b729 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/CFV.c @@ -117,7 +117,12 @@ guicontrolflow(void) "Control_Flow_Data", Control_Flow_Data, (GDestroyNotify)guicontrolflow_destructor); - + + g_object_set_data( + G_OBJECT(Drawing_Widget), + "Control_Flow_Data", + Control_Flow_Data); + gControl_Flow_Data_List = g_slist_append( gControl_Flow_Data_List, Control_Flow_Data); diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c index be9f3d92..e89c8b29 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.c @@ -1,11 +1,15 @@ -#include "Drawing.h" -#include "CFV.h" #include #include #include +#include +#include +#include "Drawing.h" +#include "CFV.h" +#include "CFV-private.h" +#include "Event_Hooks.h" #define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format) #define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format) @@ -46,15 +50,31 @@ void drawing_data_request(Drawing_t *Drawing, gint width, gint height) { - -// start from pixel to time(x) -// end from pixel to time (x + width) - -// LttvTracesetContext * tsc = get_traceset_context(event_viewer_data->mw); - if(width < 0) return ; if(height < 0) return ; - + ControlFlowData *control_flow_data = + (ControlFlowData*)g_object_get_data( + G_OBJECT( + Drawing->Drawing_Area_V), + "Control_Flow_Data"); + + LttTime start, end; + LttTime window_end = ltt_time_add(control_flow_data->Time_Window.time_width, + control_flow_data->Time_Window.start_time); + + convert_pixels_to_time(Drawing, x, + &control_flow_data->Time_Window.start_time, + &window_end, + &start); + + convert_pixels_to_time(Drawing, x + width, + &control_flow_data->Time_Window.start_time, + &window_end, + &end); + + LttvTracesetContext * tsc = + get_traceset_context(control_flow_data->Parent_Window); + gdk_draw_rectangle (*Pixmap, Drawing->Drawing_Area_V->style->white_gc, TRUE, @@ -65,17 +85,28 @@ void drawing_data_request(Drawing_t *Drawing, send_test_process( guicontrolflow_get_process_list(Drawing->Control_Flow_Data), Drawing); - send_test_drawing( - guicontrolflow_get_process_list(Drawing->Control_Flow_Data), - Drawing, *Pixmap, x, y, width, height); + //send_test_drawing( + //guicontrolflow_get_process_list(Drawing->Control_Flow_Data), + //Drawing, *Pixmap, x, y, width, height); // Let's call processTrace() !! - - - //lttv_process_traceset_seek_time(tsc, start); - //lttv_traceset_context_add_hooks( - //lttv_process_traceset - //lttv_traceset_context_remove_hooks + EventRequest event_request; // Variable freed at the end of the function. + event_request.Control_Flow_Data = control_flow_data; + event_request.time_begin = start; + event_request.time_end = end; + + LttvHooks *event = lttv_hooks_new(); + lttv_hooks_add(event, draw_event_hook, &event_request); + + lttv_process_traceset_seek_time(tsc, start); + lttv_traceset_context_add_hooks(tsc, + NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, event, NULL); + lttv_process_traceset(tsc, end, G_MAXULONG); + lttv_traceset_context_remove_hooks(tsc, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, event, NULL); + + lttv_hooks_destroy(event); } /* Callbacks */ @@ -250,9 +281,9 @@ GtkWidget *drawing_get_widget(Drawing_t *Drawing) return Drawing->Drawing_Area_V; } -/* get_time_from_pixels +/* convert_pixels_to_time * - * Get the time interval from window time and pixels, and pixels requested. + * Convert from window pixel and time interval to an absolute time. */ void convert_pixels_to_time( Drawing_t *Drawing, diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h index f211879f..4957fb82 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Drawing.h @@ -79,7 +79,7 @@ void convert_pixels_to_time( guint x, LttTime *window_time_begin, LttTime *window_time_end, - LttTime *begin); + LttTime *time); void convert_time_to_pixels( LttTime window_time_begin, diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c index 92f84fcb..798d1d2e 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.c @@ -414,12 +414,24 @@ h_guicontrolflow(MainWindow *pmParentWindow, LttvTracesetSelector * s, char * ke ControlFlowData *Control_Flow_Data = guicontrolflow() ; Control_Flow_Data->Parent_Window = pmParentWindow; + TimeWindow *time_window = guicontrolflow_get_time_window(Control_Flow_Data); + time_window->start_time.tv_sec = 0; + time_window->start_time.tv_nsec = 0; + time_window->time_width.tv_sec = 0; + time_window->time_width.tv_nsec = 0; + LttTime *current_time = guicontrolflow_get_current_time(Control_Flow_Data); + current_time->tv_sec = 0; + current_time->tv_nsec = 0; + + //g_critical("time width1 : %u",time_window->time_width); + get_time_window(pmParentWindow, - guicontrolflow_get_time_window(Control_Flow_Data)); + time_window); get_current_time(pmParentWindow, - guicontrolflow_get_current_time(Control_Flow_Data)); + current_time); + //g_critical("time width2 : %u",time_window->time_width); // Unreg done in the GuiControlFlow_Destructor reg_update_time_window(update_time_window_hook, Control_Flow_Data, pmParentWindow); @@ -443,16 +455,15 @@ int event_selected_hook(void *hook_data, void *call_data) } -#ifdef DEBUG /* Hook called before drawing. Gets the initial context at the beginning of the * drawing interval and copy it to the context in Event_Request. */ int draw_before_hook(void *hook_data, void *call_data) { EventRequest *Event_Request = (EventRequest*)hook_data; - EventsContext Events_Context = (EventsContext*)call_data; + //EventsContext Events_Context = (EventsContext*)call_data; - Event_Request->Events_Context = Events_Context; + //Event_Request->Events_Context = Events_Context; return 0; } @@ -481,6 +492,7 @@ int draw_event_hook(void *hook_data, void *call_data) { EventRequest *Event_Request = (EventRequest*)hook_data; + return 0; } @@ -492,7 +504,6 @@ int draw_after_hook(void *hook_data, void *call_data) g_free(Event_Request); return 0; } -#endif diff --git a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h index 21f7df5c..b500e751 100644 --- a/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h +++ b/ltt/branches/poly/lttv/modules/guiControlFlow/Event_Hooks.h @@ -9,8 +9,30 @@ #include #include +#include #include "Process_List.h" #include "Drawing.h" +#include "CFV.h" + + +/* Structure used to store and use information relative to one events refresh + * request. Typically filled in by the expose event callback, then passed to the + * library call, then used by the drawing hooks. Then, once all the events are + * sent, it is freed by the hook called after the reading. + */ +typedef struct _EventRequest +{ + ControlFlowData *Control_Flow_Data; + LttTime time_begin, time_end; + /* Fill the Events_Context during the initial expose, before calling for + * events. + */ + //GArray Events_Context; //FIXME +} EventRequest ; + + + + void send_test_data(ProcessList *Process_List, Drawing_t *Drawing); @@ -51,4 +73,6 @@ void update_time_window_hook(void *hook_data, void *call_data); void update_current_time_hook(void *hook_data, void *call_data); + + #endif // _EVENT_HOOKS_H -- 2.34.1