X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2FguiEvents.c;h=9b3e8641b07b40c36e8447371709c260bedc03d8;hb=b782dd11ec8e363e135b32a563687a8e4f70bedb;hp=39341b7fe05f6ac2716b96c76e0dfba9a1991045;hpb=f1d416441c33c1eb429ddbb8f8a3401c3932fa7c;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/guiEvents.c b/ltt/branches/poly/lttv/modules/guiEvents.c index 39341b7f..9b3e8641 100644 --- a/ltt/branches/poly/lttv/modules/guiEvents.c +++ b/ltt/branches/poly/lttv/modules/guiEvents.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -56,11 +55,10 @@ static LttvHooks *before_event; static GSList *sEvent_Viewer_Data_List = NULL ; /** hook functions for update time interval, current time ... */ -gboolean updateTimeInterval(void * hook_data, void * call_data); +gboolean updateTimeWindow(void * hook_data, void * call_data); gboolean updateCurrentTime(void * hook_data, void * call_data); void remove_item_from_queue(GQueue * q, gboolean fromHead); void remove_all_items_from_queue(GQueue * q); -void remove_instance(GtkCustomHBox * box); typedef struct _RawTraceData{ unsigned cpu_id; @@ -87,7 +85,7 @@ typedef enum _ScrollDirection{ typedef struct _EventViewerData { mainWindow * mw; - TimeInterval time_interval; + TimeWindow time_window; LttTime current_time; LttvHooks * before_event_hooks; @@ -96,11 +94,11 @@ typedef struct _EventViewerData { GQueue * raw_trace_data_queue_tmp; //tmp buf to contain raw data unsigned current_event_index; double previous_value; //value of the slide - LttTime trace_start; - LttTime trace_end; + TimeInterval time_span; + // LttTime trace_start; + // LttTime trace_end; unsigned start_event_index; //the first event shown in the window unsigned end_event_index; //the last event shown in the window - GtkWidget * instance_container; //box to contain all widgets //scroll window containing Tree View GtkWidget * Scroll_Win; @@ -137,6 +135,7 @@ GtkWidget *hGuiEvents(mainWindow *pmParentWindow); EventViewerData *GuiEvents(mainWindow *pmParentWindow); //! Event Viewer's destructor void GuiEvents_Destructor(EventViewerData *Event_Viewer_Data); +void GuiEvents_free(EventViewerData *Event_Viewer_Data); static int Event_Selected_Hook(void *hook_data, void *call_data); @@ -162,13 +161,24 @@ static void get_events(EventViewerData* Event_Viewer_Data, LttTime start, LttTime end, unsigned maxNumEvents, unsigned * realNumEvent); static gboolean parse_event(void *hook_data, void *call_data); +static LttvModule *Main_Win_Module; + /** * plugin's init function * * This function initializes the Event Viewer functionnality through the * gtkTraceSet API. */ -G_MODULE_EXPORT void init() { +G_MODULE_EXPORT void init(LttvModule *self, int argc, char *argv[]) { + + Main_Win_Module = lttv_module_require(self, "mainwin", argc, argv); + + if(Main_Win_Module == NULL) + { + g_critical("Can't load Control Flow Viewer : missing mainwin\n"); + return; + } + g_critical("GUI Event Viewer init()"); @@ -236,7 +246,7 @@ hGuiEvents(mainWindow * pmParentWindow) EventViewerData* Event_Viewer_Data = GuiEvents(pmParentWindow) ; if(Event_Viewer_Data) - return Event_Viewer_Data->instance_container; + return Event_Viewer_Data->HBox_V; else return NULL; } @@ -259,7 +269,7 @@ GuiEvents(mainWindow *pmParentWindow) unsigned size; Event_Viewer_Data->mw = pmParentWindow; - GetTimeInterval(Event_Viewer_Data->mw, &Event_Viewer_Data->time_interval); + GetTimeWindow(Event_Viewer_Data->mw, &Event_Viewer_Data->time_window); GetCurrentTime(Event_Viewer_Data->mw, &Event_Viewer_Data->current_time); Event_Viewer_Data->before_event_hooks = lttv_hooks_new(); @@ -268,7 +278,7 @@ GuiEvents(mainWindow *pmParentWindow) Event_Viewer_Data->raw_trace_data_queue = g_queue_new(); Event_Viewer_Data->raw_trace_data_queue_tmp = g_queue_new(); - RegUpdateTimeInterval(updateTimeInterval,Event_Viewer_Data, Event_Viewer_Data->mw); + RegUpdateTimeWindow(updateTimeWindow,Event_Viewer_Data, Event_Viewer_Data->mw); RegUpdateCurrentTime(updateCurrentTime,Event_Viewer_Data, Event_Viewer_Data->mw); Event_Viewer_Data->Scroll_Win = gtk_scrolled_window_new (NULL, NULL); @@ -281,13 +291,14 @@ GuiEvents(mainWindow *pmParentWindow) Event_Viewer_Data->Selected_Event = 0; /* Create a model for storing the data list */ - Event_Viewer_Data->Store_M = gtk_list_store_new (N_COLUMNS, /* Total number of columns */ - G_TYPE_INT, /* CPUID */ - G_TYPE_STRING, /* Event */ - G_TYPE_UINT64, /* Time */ - G_TYPE_INT, /* PID */ - G_TYPE_INT, /* Entry length */ - G_TYPE_STRING); /* Event's description */ + Event_Viewer_Data->Store_M = gtk_list_store_new ( + N_COLUMNS, /* Total number of columns */ + G_TYPE_INT, /* CPUID */ + G_TYPE_STRING, /* Event */ + G_TYPE_UINT64, /* Time */ + G_TYPE_INT, /* PID */ + G_TYPE_INT, /* Entry length */ + G_TYPE_STRING); /* Event's description */ /* Create the viewer widget for the columned list */ Event_Viewer_Data->Tree_V = gtk_tree_view_new_with_model (GTK_TREE_MODEL (Event_Viewer_Data->Store_M)); @@ -385,10 +396,8 @@ GuiEvents(mainWindow *pmParentWindow) gtk_container_add (GTK_CONTAINER (Event_Viewer_Data->Scroll_Win), Event_Viewer_Data->Tree_V); - Event_Viewer_Data->instance_container = gtk_custom_hbox_new(0, 0, remove_instance); Event_Viewer_Data->HBox_V = gtk_hbox_new(0, 0); gtk_box_pack_start(GTK_BOX(Event_Viewer_Data->HBox_V), Event_Viewer_Data->Scroll_Win, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(Event_Viewer_Data->instance_container), Event_Viewer_Data->HBox_V, TRUE, TRUE, 0); /* Create vertical scrollbar and pack it */ Event_Viewer_Data->VScroll_VC = gtk_vscrollbar_new(NULL); @@ -414,7 +423,6 @@ GuiEvents(mainWindow *pmParentWindow) // Event_Viewer_Data->VTree_Adjust_C->upper; g_critical("value : %u",Event_Viewer_Data->VTree_Adjust_C->upper); /* Raw event trace */ - gtk_widget_show(Event_Viewer_Data->instance_container); gtk_widget_show(Event_Viewer_Data->HBox_V); gtk_widget_show(Event_Viewer_Data->Tree_V); gtk_widget_show(Event_Viewer_Data->VScroll_VC); @@ -428,11 +436,11 @@ GuiEvents(mainWindow *pmParentWindow) Event_Viewer_Data->Num_Visible_Events = 1; //get the life span of the traceset and set the upper of the scroll bar - getTracesetTimeSpan(Event_Viewer_Data->mw, &Event_Viewer_Data->trace_start, - &Event_Viewer_Data->trace_end); - time_value = Event_Viewer_Data->trace_end.tv_sec - Event_Viewer_Data->trace_start.tv_sec; + getTracesetTimeSpan(Event_Viewer_Data->mw, &Event_Viewer_Data->time_span); + + time_value = Event_Viewer_Data->time_span.endTime.tv_sec - Event_Viewer_Data->time_span.startTime.tv_sec; time_value *= NANSECOND_CONST; - time_value += (double)Event_Viewer_Data->trace_end.tv_nsec - Event_Viewer_Data->trace_start.tv_nsec; + time_value += (double)Event_Viewer_Data->time_span.endTime.tv_nsec - Event_Viewer_Data->time_span.startTime.tv_nsec; Event_Viewer_Data->VAdjust_C->upper = time_value; Event_Viewer_Data->append = TRUE; @@ -454,6 +462,13 @@ GuiEvents(mainWindow *pmParentWindow) /* Set the Selected Event */ // Tree_V_set_cursor(Event_Viewer_Data); + + + g_object_set_data_full( + G_OBJECT(Event_Viewer_Data->HBox_V), + "Event_Viewer_Data", + Event_Viewer_Data, + (GDestroyNotify)GuiEvents_free); return Event_Viewer_Data; } @@ -925,7 +940,7 @@ void get_test_data(double time_value, guint List_Height, remove_all_items_from_queue(Event_Viewer_Data->raw_trace_data_queue); end.tv_sec = G_MAXULONG; end.tv_nsec = G_MAXULONG; - start = Event_Viewer_Data->trace_start; + start = Event_Viewer_Data->time_span.startTime; value = (int)(time_value / NANSECOND_CONST); start.tv_sec += value; value = time_value / NANSECOND_CONST - value; @@ -974,9 +989,9 @@ void get_test_data(double time_value, guint List_Height, first = Event_Viewer_Data->raw_trace_data_queue->head; raw_data = (RawTraceData*)g_list_nth_data(first,Event_Number); value = raw_data->time.tv_sec; - value -= Event_Viewer_Data->trace_start.tv_sec; + value -= Event_Viewer_Data->time_span.startTime.tv_sec; value *= NANSECOND_CONST; - value -= Event_Viewer_Data->trace_start.tv_nsec; + value -= Event_Viewer_Data->time_span.startTime.tv_nsec; value += raw_data->time.tv_nsec; Event_Viewer_Data->VAdjust_C->value = value; g_signal_stop_emission_by_name(G_OBJECT(Event_Viewer_Data->VAdjust_C), "value-changed"); @@ -1113,17 +1128,21 @@ void add_test_data(EventViewerData *Event_Viewer_Data) void GuiEvents_free(EventViewerData *Event_Viewer_Data) { - lttv_hooks_remove(Event_Viewer_Data->before_event_hooks,parse_event); - lttv_hooks_destroy(Event_Viewer_Data->before_event_hooks); - - remove_all_items_from_queue (Event_Viewer_Data->raw_trace_data_queue); - g_queue_free(Event_Viewer_Data->raw_trace_data_queue); - g_queue_free(Event_Viewer_Data->raw_trace_data_queue_tmp); + if(Event_Viewer_Data){ + lttv_hooks_remove(Event_Viewer_Data->before_event_hooks,parse_event); + lttv_hooks_destroy(Event_Viewer_Data->before_event_hooks); + + remove_all_items_from_queue (Event_Viewer_Data->raw_trace_data_queue); + g_queue_free(Event_Viewer_Data->raw_trace_data_queue); + g_queue_free(Event_Viewer_Data->raw_trace_data_queue_tmp); - UnregUpdateTimeInterval(updateTimeInterval,Event_Viewer_Data, Event_Viewer_Data->mw); - UnregUpdateCurrentTime(updateCurrentTime,Event_Viewer_Data, Event_Viewer_Data->mw); + UnregUpdateTimeWindow(updateTimeWindow,Event_Viewer_Data, Event_Viewer_Data->mw); + UnregUpdateCurrentTime(updateCurrentTime,Event_Viewer_Data, Event_Viewer_Data->mw); - g_free(Event_Viewer_Data); + sEvent_Viewer_Data_List = g_slist_remove(sEvent_Viewer_Data_List, Event_Viewer_Data); + g_warning("Delete Event data\n"); + g_free(Event_Viewer_Data); + } } void @@ -1132,8 +1151,10 @@ GuiEvents_Destructor(EventViewerData *Event_Viewer_Data) guint index; /* May already been done by GTK window closing */ - if(GTK_IS_WIDGET(Event_Viewer_Data->instance_container)) - gtk_widget_destroy(Event_Viewer_Data->instance_container); + if(GTK_IS_WIDGET(Event_Viewer_Data->HBox_V)){ + gtk_widget_destroy(Event_Viewer_Data->HBox_V); + Event_Viewer_Data = NULL; + } /* Destroy the Tree View */ //gtk_widget_destroy(Event_Viewer_Data->Tree_V); @@ -1142,6 +1163,7 @@ GuiEvents_Destructor(EventViewerData *Event_Viewer_Data) //gtk_list_store_clear(Event_Viewer_Data->Store_M); //gtk_widget_destroy(GTK_WIDGET(Event_Viewer_Data->Store_M)); + g_warning("Delete Event data from destroy\n"); GuiEvents_free(Event_Viewer_Data); } @@ -1181,10 +1203,10 @@ int Event_Selected_Hook(void *hook_data, void *call_data) } -gboolean updateTimeInterval(void * hook_data, void * call_data) +gboolean updateTimeWindow(void * hook_data, void * call_data) { EventViewerData *Event_Viewer_Data = (EventViewerData*) hook_data; - Event_Viewer_Data->time_interval = *(TimeInterval*)call_data; + Event_Viewer_Data->time_window = *(TimeWindow*)call_data; return FALSE; } @@ -1222,7 +1244,7 @@ gboolean updateCurrentTime(void * hook_data, void * call_data) void Tree_V_grab_focus(GtkWidget *widget, gpointer data){ EventViewerData *Event_Viewer_Data = (EventViewerData *)data; mainWindow * mw = Event_Viewer_Data->mw; - SetFocusedPane(mw, gtk_widget_get_parent(Event_Viewer_Data->instance_container)); + SetFocusedPane(mw, gtk_widget_get_parent(Event_Viewer_Data->HBox_V)); } void get_events(EventViewerData* Event_Viewer_Data, LttTime start, @@ -1487,20 +1509,6 @@ void remove_all_items_from_queue(GQueue *q) } } -void remove_instance(GtkCustomHBox * box){ - int i; - EventViewerData *Event_Viewer_Data ; - - for(i=0;iinstance_container){ - sEvent_Viewer_Data_List = g_slist_remove(sEvent_Viewer_Data_List, Event_Viewer_Data); - GuiEvents_free(Event_Viewer_Data); - break; - } - } -} -