X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fdetailedevents%2Fevents.c;h=f2c2ff51b0158582a9505bf490830e782b008c6f;hb=d47b33d2c29ed3d8ead828e309f7d9d39a516495;hp=ee6e6c52d9739f0697e1ecfd56afb7dfdfc4e79a;hpb=b9a010a28d9625c9d31968aa44f1a553daccb294;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/detailedevents/events.c b/ltt/branches/poly/lttv/modules/gui/detailedevents/events.c index ee6e6c52..f2c2ff51 100644 --- a/ltt/branches/poly/lttv/modules/gui/detailedevents/events.c +++ b/ltt/branches/poly/lttv/modules/gui/detailedevents/events.c @@ -78,6 +78,8 @@ typedef struct _EventFields{ #define RESERVE_SMALL_SIZE_SQUARE RESERVE_SMALL_SIZE*RESERVE_SMALL_SIZE #define RESERVE_SMALL_SIZE_CUBE RESERVE_SMALL_SIZE*RESERVE_SMALL_SIZE_SQUARE +static const LttTime ltt_time_backward = { 1 , 0 }; + typedef enum _ScrollDirection{ SCROLL_STEP_UP, SCROLL_STEP_DOWN, @@ -106,7 +108,7 @@ typedef struct _EventViewerData { unsigned start_event_index; // the first event shown in the window unsigned end_event_index; // the last event shown in the window unsigned size; // maxi number of events loaded when instance the viewer - gboolean current_time_updated; + // gboolean current_time_updated; //scroll window containing Tree View GtkWidget * scroll_win; @@ -149,9 +151,9 @@ void remove_context_hooks(EventViewerData * event_viewer_data, LttvTracesetContext * tsc); //! Event Viewer's constructor hook -GtkWidget *h_gui_events(Tab *tab, LttvTracesetSelector * s, char* key); +GtkWidget *h_gui_events(Tab *tab); //! Event Viewer's constructor -EventViewerData *gui_events(Tab *tab, LttvTracesetSelector *s, char *key); +EventViewerData *gui_events(Tab *tab); //! Event Viewer's destructor void gui_events_destructor(EventViewerData *event_viewer_data); void gui_events_free(EventViewerData *event_viewer_data); @@ -173,7 +175,6 @@ static void tree_v_size_allocate_cb (GtkWidget *widget, GtkAllocation *alloc, gp static void tree_v_size_request_cb (GtkWidget *widget, GtkRequisition *requisition, gpointer data); static void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data); static void tree_v_move_cursor_cb (GtkWidget *widget, GtkMovementStep arg1, gint arg2, gpointer data); -static void tree_v_grab_focus(GtkWidget *widget, gpointer data); static void get_data(double time, guint list_height, @@ -212,10 +213,9 @@ enum * @return The widget created. */ GtkWidget * -h_gui_events(Tab * tab, LttvTracesetSelector * s, char* key) +h_gui_events(Tab * tab) { - EventViewerData* event_viewer_data = gui_events(tab, s, key) ; - + EventViewerData* event_viewer_data = gui_events(tab) ; if(event_viewer_data) return event_viewer_data->hbox_v; else return NULL; @@ -229,7 +229,7 @@ h_gui_events(Tab * tab, LttvTracesetSelector * s, char* key) * @return The Event viewer data created. */ EventViewerData * -gui_events(Tab *tab, LttvTracesetSelector * s,char* key ) +gui_events(Tab *tab) { LttTime end; GtkTreeViewColumn *column; @@ -291,10 +291,6 @@ gui_events(Tab *tab, LttvTracesetSelector * s,char* key ) G_CALLBACK (tree_v_move_cursor_cb), event_viewer_data); - g_signal_connect (G_OBJECT (event_viewer_data->tree_v), "grab-focus", - G_CALLBACK (tree_v_grab_focus), - event_viewer_data); - // Use on each column! //gtk_tree_view_column_set_sizing(event_viewer_data->tree_v, GTK_TREE_VIEW_COLUMN_FIXED); @@ -436,7 +432,7 @@ gui_events(Tab *tab, LttvTracesetSelector * s,char* key ) /* Set the Selected Event */ // tree_v_set_cursor(event_viewer_data); - event_viewer_data->current_time_updated = FALSE; + // event_viewer_data->current_time_updated = FALSE; event_viewer_data->size = RESERVE_SMALL_SIZE; g_object_set_data_full( @@ -675,8 +671,8 @@ void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data) if(ltt_time.tv_sec != current_time.tv_sec || ltt_time.tv_nsec != current_time.tv_nsec){ - event_viewer_data->current_time_updated = TRUE; - lttvwindow_report_current_time(tab,<t_time); + // event_viewer_data->current_time_updated = TRUE; + lttvwindow_report_current_time(tab,ltt_time); } }else{ g_warning("Can not get iter\n"); @@ -712,8 +708,6 @@ void v_scroll_cb (GtkAdjustment *adjustment, gpointer data) // NULL, FALSE); gtk_tree_path_free(tree_path); } - - } gint get_cell_height(GtkTreeView *TreeView) @@ -897,15 +891,21 @@ static void get_data_wrapped(double time_value, guint list_height, switch(direction){ case SCROLL_STEP_UP: - g_debug("direction STEP_UP"); + if(direction == SCROLL_STEP_UP) g_debug("direction STEP_UP"); case SCROLL_PAGE_UP: - g_debug("direction PAGE_UP"); + if(direction == SCROLL_PAGE_UP) g_debug("direction PAGE_UP"); if(direction == SCROLL_PAGE_UP){ backward = list_height>event_viewer_data->start_event_index ? TRUE : FALSE; }else{ backward = event_viewer_data->start_event_index == 0 ? TRUE : FALSE; } if(backward){ + first = event_viewer_data->event_fields_queue->head; + if(!first)break; + event_fields = (EventFields*)first->data; + LttTime backward_start = event_fields->time; + + maxNum = RESERVE_SMALL_SIZE_CUBE; event_viewer_data->append = FALSE; do{ if(direction == SCROLL_PAGE_UP){ @@ -913,18 +913,16 @@ static void get_data_wrapped(double time_value, guint list_height, }else{ minNum = 1; } - first = event_viewer_data->event_fields_queue->head; if(!first)break; event_fields = (EventFields*)first->data; end = event_fields->time; - if(end.tv_nsec != 0) - end.tv_nsec--; - else { - g_assert(end.tv_sec != 0); - end.tv_sec--; - end.tv_nsec = NANOSECONDS_PER_SECOND-1; - } + + backward_start = LTT_TIME_MAX(ltt_time_sub(backward_start, + ltt_time_backward), + tsc->time_span.start_time); + + /* ltt_event_position_get(event_fields->ep, &block_num, &event_num, &tf); if(size !=0){ if(event_num > minNum){ @@ -959,12 +957,14 @@ static void get_data_wrapped(double time_value, guint list_height, } maxNum = RESERVE_SMALL_SIZE_CUBE; } + */ event_viewer_data->current_event_index = event_viewer_data->start_event_index; - get_events(event_viewer_data, start, end, maxNum, &size); + get_events(event_viewer_data, backward_start, end, maxNum, &size); event_viewer_data->start_event_index = event_viewer_data->current_event_index; - if(size < minNum && (start.tv_sec !=0 || start.tv_nsec !=0)) + if(size < minNum + && (ltt_time_compare(backward_start, tsc->time_span.start_time)>0)) need_backward_again = TRUE; else need_backward_again = FALSE; if(size == 0){ @@ -1241,9 +1241,7 @@ gui_events_destructor(EventViewerData *event_viewer_data) /* May already been done by GTK window closing */ if(GTK_IS_WIDGET(event_viewer_data->hbox_v)){ - gui_events_free(event_viewer_data); gtk_widget_destroy(event_viewer_data->hbox_v); - event_viewer_data = NULL; } /* Destroy the Tree View */ @@ -1425,11 +1423,10 @@ gboolean update_current_time(void * hook_data, void * call_data) { EventViewerData *event_viewer_data = (EventViewerData*) hook_data; const LttTime * current_time = (LttTime*)call_data; - guint64 nsec = current_time->tv_sec * NANOSECONDS_PER_SECOND - + current_time->tv_nsec; + guint64 nsec = (guint64)current_time->tv_sec * NANOSECONDS_PER_SECOND + + (guint64)current_time->tv_nsec; GtkTreeIter iter; guint64 time; - int count = -1; GtkTreeModel* model = (GtkTreeModel*)event_viewer_data->store_m; GList * list; EventFields * data, *data1; @@ -1442,31 +1439,41 @@ gboolean update_current_time(void * hook_data, void * call_data) TimeInterval time_span = tsc->time_span; if(!event_viewer_data->event_fields_queue->head) return FALSE; - +#if 0 if(event_viewer_data->current_time_updated ){ event_viewer_data->current_time_updated = FALSE; return FALSE; } - +#endif //0 //check if the event is shown in the current viewer + gint count = 0; + gboolean event_shown = FALSE; if(gtk_tree_model_get_iter_first(model, &iter)){ - while(1){ - gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1); - if(time < nsec){ - if(!gtk_tree_model_iter_next(model, &iter)){ - count = -1; - break; - } - count++; - }else{ - break; + gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1); + if(time > nsec){ + /* Event is before the list */ + } else { + /* Event can be in the list */ + if(time >= nsec){ + /* found */ + event_shown = TRUE; + } else { + while(gtk_tree_model_iter_next(model, &iter)) { + gtk_tree_model_get(model, &iter, TIME_COLUMN, &time, -1); + count++; + if(time >= nsec){ + /* found */ + event_shown = TRUE; + break; + } + } } } - // event_selected_hook(event_viewer_data, &count); } - //the event is not shown in the current viewer - if(count == -1){ + if(!event_shown) + { + //the event is not shown in the current viewer count = 0; //check if the event is in the buffer list = event_viewer_data->event_fields_queue->head; @@ -1511,7 +1518,7 @@ gboolean update_current_time(void * hook_data, void * call_data) sprintf(str_path,"%d\0",count); path = gtk_tree_path_new_from_string (str_path); gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(event_viewer_data->tree_v), "cursor-changed"); + //g_signal_stop_emission_by_name(G_OBJECT(event_viewer_data->tree_v), "cursor-changed"); gtk_tree_path_free(path); return FALSE; @@ -1531,18 +1538,13 @@ gboolean traceset_changed(void * hook_data, void * call_data) end = ltt_time_sub(time_span.end_time, time_span.start_time); event_viewer_data->vadjust_c->upper = ltt_time_to_double(end) * NANOSECONDS_PER_SECOND; + g_signal_emit_by_name(event_viewer_data->vadjust_c, "value-changed"); // event_viewer_data->vadjust_c->value = 0; return FALSE; } -void tree_v_grab_focus(GtkWidget *widget, gpointer data){ - EventViewerData *event_viewer_data = (EventViewerData *)data; - Tab * tab = event_viewer_data->tab; - lttvwindow_report_focus(tab, event_viewer_data->hbox_v); -} - void update_raw_data_array(EventViewerData* event_viewer_data, unsigned size) { EventFields * data; @@ -1689,9 +1691,26 @@ void get_events(EventViewerData* event_viewer_data, LttTime start, NULL, event_viewer_data->event_hooks, NULL); + if(event_viewer_data->append == TRUE) { + /* append data */ + lttv_process_traceset_middle(tsc, end, max_num_events, NULL); + } else{ + guint count; + LttvTracefileContext *tfc; + /* prepend data */ + do { + /* clear the temp list */ + while(g_queue_pop_head(event_viewer_data->event_fields_queue_tmp)); + /* read max_num events max */ + count = lttv_process_traceset_middle(tsc, end, max_num_events, NULL); + /* loop if reached the max number of events to read, but not + * if end of trace or end time reached.*/ + tfc = lttv_traceset_context_get_current_tfc(tsc); + } while(max_num_events == count + && (tfc != NULL && ltt_time_compare(tfc->timestamp, end) < 0)); - lttv_process_traceset_middle(tsc, end, max_num_events, NULL); - + } + //remove_context_hooks(event_viewer_data,tsc); lttv_process_traceset_end(tsc, NULL,