X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttv%2Fmodules%2Fgui%2Fdetailedevents%2Fevents.c;h=affd293dcc35c9bab35b3a0deb98619a2a5b3fb7;hb=26ea84eb31a3d5da3e264d78719b3a74254a9134;hp=7c9b66accbab489e8ab12cf046d9016b709fb5fa;hpb=8f31828398b8a4fcdb679324291132f4f0e3dce6;p=lttv.git diff --git a/lttv/modules/gui/detailedevents/events.c b/lttv/modules/gui/detailedevents/events.c index 7c9b66ac..affd293d 100644 --- a/lttv/modules/gui/detailedevents/events.c +++ b/lttv/modules/gui/detailedevents/events.c @@ -47,20 +47,20 @@ #include #include +#include #include #include #include #include -#include -#include -#include #include #include #include -#include +#include #include +#ifdef BABEL_CLEANUP #include +#endif //babel_cleanup #include #include #include @@ -98,8 +98,10 @@ gboolean update_current_time(void * hook_data, void * call_data); gboolean update_current_position(void * hook_data, void * call_data); //gboolean show_event_detail(void * hook_data, void * call_data); gboolean traceset_changed(void * hook_data, void * call_data); +gboolean timespan_changed(void * hook_data, void * call_data); +#ifdef BABEL_CLEANUP gboolean filter_changed(void * hook_data, void * call_data); - +#endif // babel_cleanup static void request_background_data(EventViewerData *event_viewer_data); //! Event Viewer's constructor hook @@ -117,6 +119,7 @@ header_size_allocate(GtkWidget *widget, void tree_v_set_cursor(EventViewerData *event_viewer_data); void tree_v_get_cursor(EventViewerData *event_viewer_data); +static void redraw(EventViewerData *event_viewer_data); /* Prototype for selection handler callback */ static void tree_selection_changed_cb (GtkTreeSelection *selection, @@ -135,7 +138,7 @@ static gboolean tree_v_scroll_handler (GtkWidget *widget, GdkEventScroll *event, static gboolean key_handler(GtkWidget *widget, GdkEventKey *event, gpointer user_data); -static void get_events(double time, EventViewerData *event_viewer_data); +static void adjust_event_viewer(double time, EventViewerData *event_viewer_data); int event_hook(void *hook_data, void *call_data); @@ -143,7 +146,6 @@ int event_hook(void *hook_data, void *call_data); enum { TRACE_NAME_COLUMN, - TRACEFILE_NAME_COLUMN, CPUID_COLUMN, EVENT_COLUMN, TIME_S_COLUMN, @@ -182,6 +184,12 @@ h_gui_events(LttvPlugin *plugin) EventViewerData * gui_events(LttvPluginTab *ptab) { + /*To disable the error bell when we reach the end(or the top) of the list of + event. Since we overload the management of the list*/ + GtkSettings* gtk_settings = gtk_settings_get_default(); + g_object_set(gtk_settings, "gtk-error-bell", FALSE, NULL); + + LttTime end; GtkTreeViewColumn *column; GtkCellRenderer *renderer; @@ -193,11 +201,9 @@ gui_events(LttvPluginTab *ptab) event_viewer_data->tab = tab; event_viewer_data->ptab = ptab; GtkWidget *tmp_toolbar_icon; - - LttvTracesetContext * tsc = - lttvwindow_get_traceset_context(event_viewer_data->tab); - + LttvTraceset *ts =lttvwindow_get_traceset(event_viewer_data->tab); + event_viewer_data->event_hooks = lttv_hooks_new(); lttv_hooks_add(event_viewer_data->event_hooks, event_hook, @@ -210,12 +216,14 @@ gui_events(LttvPluginTab *ptab) update_current_position,event_viewer_data); lttvwindow_register_traceset_notify(tab, traceset_changed,event_viewer_data); + lttvwindow_register_timespan_notify(tab, + timespan_changed,event_viewer_data); +#ifdef BABEL_CLEANUP lttvwindow_register_filter_notify(tab, filter_changed, event_viewer_data); +#endif lttvwindow_register_redraw_notify(tab, evd_redraw_notify, event_viewer_data); - - event_viewer_data->scroll_win = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (event_viewer_data->scroll_win); gtk_scrolled_window_set_policy( @@ -223,12 +231,11 @@ gui_events(LttvPluginTab *ptab) GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); event_viewer_data->currently_selected_position = - lttv_traceset_context_position_new(tsc); + lttv_traceset_create_current_position(ts); event_viewer_data->first_event = - lttv_traceset_context_position_new(tsc); + lttv_traceset_create_current_position(ts); event_viewer_data->last_event = - lttv_traceset_context_position_new(tsc); - + lttv_traceset_create_current_position(ts); event_viewer_data->main_win_filter = lttvwindow_get_filter(tab); event_viewer_data->update_cursor = TRUE; @@ -242,7 +249,6 @@ gui_events(LttvPluginTab *ptab) event_viewer_data->store_m = gtk_list_store_new ( N_COLUMNS, /* Total number of columns */ G_TYPE_STRING, /* Trace name */ - G_TYPE_STRING, /* Tracefile name */ G_TYPE_UINT, /* CPUID */ G_TYPE_STRING, /* Event */ G_TYPE_UINT, /* Time s */ @@ -311,19 +317,6 @@ gui_events(LttvPluginTab *ptab) G_CALLBACK(header_size_allocate), (gpointer)event_viewer_data); - - - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Tracefile", - renderer, - "text", TRACEFILE_NAME_COLUMN, - NULL); - gtk_tree_view_column_set_alignment (column, 0.0); - gtk_tree_view_column_set_fixed_width (column, 120); - gtk_tree_view_append_column (GTK_TREE_VIEW (event_viewer_data->tree_v), - column); - - renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("CPUID", renderer, @@ -448,13 +441,19 @@ gui_events(LttvPluginTab *ptab) g_signal_connect (G_OBJECT (event_viewer_data->vadjust_c), "value-changed", G_CALLBACK (v_scroll_cb), event_viewer_data); + //TODO ybrosseau 2011-01-06: Fix comment /* Set the upper bound to the last event number */ event_viewer_data->previous_value = 0; event_viewer_data->vadjust_c->lower = 0.0; //event_viewer_data->vadjust_c->upper = event_viewer_data->number_of_events; + LttTime time = lttvwindow_get_current_time(tab); - time = ltt_time_sub(time, tsc->time_span.start_time); + TimeInterval time_span = lttv_traceset_get_time_span_real(ts); + time = ltt_time_sub(time, time_span.start_time); + //TODO ybrosseau 2011-01-06: Which one do we keep? +#ifdef BABEL_CLEANUP event_viewer_data->vadjust_c->value = ltt_time_to_double(time); +#endif //babel_cleanup event_viewer_data->vadjust_c->value = 0.0; event_viewer_data->vadjust_c->step_increment = 1.0; event_viewer_data->vadjust_c->page_increment = 2.0; @@ -476,11 +475,9 @@ gui_events(LttvPluginTab *ptab) //get the life span of the traceset and set the upper of the scroll bar - TimeInterval time_span = tsc->time_span; end = ltt_time_sub(time_span.end_time, time_span.start_time); - event_viewer_data->vadjust_c->upper = - ltt_time_to_double(end); + event_viewer_data->vadjust_c->upper = ltt_time_to_double(end); /* Set the Selected Event */ // tree_v_set_cursor(event_viewer_data); @@ -502,7 +499,6 @@ gui_events(LttvPluginTab *ptab) request_background_data(event_viewer_data); - return event_viewer_data; } @@ -511,7 +507,6 @@ gui_events(LttvPluginTab *ptab) static gint background_ready(void *hook_data, void *call_data) { EventViewerData *event_viewer_data = (EventViewerData *)hook_data; - LttvTrace *trace = (LttvTrace*)call_data; event_viewer_data->background_info_waiting--; @@ -527,25 +522,26 @@ static gint background_ready(void *hook_data, void *call_data) static void request_background_data(EventViewerData *event_viewer_data) { - LttvTracesetContext * tsc = - lttvwindow_get_traceset_context(event_viewer_data->tab); - gint num_traces = lttv_traceset_number(tsc->ts); + LttvTraceset * ts = + lttvwindow_get_traceset(event_viewer_data->tab); + gint num_traces = ts->traces->len; gint i; LttvTrace *trace; - LttvTraceState *tstate; LttvHooks *background_ready_hook = lttv_hooks_new(); lttv_hooks_add(background_ready_hook, background_ready, event_viewer_data, LTTV_PRIO_DEFAULT); event_viewer_data->background_info_waiting = 0; - + for(i=0;its, i); + trace = g_ptr_array_index(ts->traces,i); +#ifdef BABEL_CLEANUP tstate = LTTV_TRACE_STATE(tsc->traces[i]); +#endif /*babel_cleanup*/ if(lttvwindowtraces_get_ready(g_quark_from_string("state"),trace)==FALSE - && !tstate->has_precomputed_states) { + /*&& !tstate->has_precomputed_states*/) { if(lttvwindowtraces_get_in_progress(g_quark_from_string("state"), trace) == FALSE) { @@ -581,7 +577,6 @@ static void request_background_data(EventViewerData *event_viewer_data) } lttv_hooks_destroy(background_ready_hook); - } static gboolean @@ -599,44 +594,15 @@ header_size_allocate(GtkWidget *widget, void tree_v_set_cursor(EventViewerData *event_viewer_data) { - GtkTreePath *path; - - g_debug("set cursor cb"); + g_debug("set cursor cb - do nothing"); -#if 0 - if(event_viewer_data->currently_selected_event != -1) - { - path = gtk_tree_path_new_from_indices( - event_viewer_data->currently_selected_event, - -1); - - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); - gtk_tree_path_free(path); - } -#endif //0 } void tree_v_get_cursor(EventViewerData *event_viewer_data) { - GtkTreePath *path; - gint *indices; - - g_debug("get cursor cb"); + g_debug("get cursor cb - do nothing"); -#if 0 - gtk_tree_view_get_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - &path, NULL); - indices = gtk_tree_path_get_indices(path); - - if(indices != NULL) - event_viewer_data->currently_selected_event = indices[0]; - else - event_viewer_data->currently_selected_event = -1; - - gtk_tree_path_free(path); -#endif //0 } /* Filter out the key repeats that come too fast */ @@ -655,13 +621,12 @@ static gboolean key_handler(GtkWidget *widget, GdkEventKey *event, } void tree_v_move_cursor_cb (GtkWidget *widget, - GtkMovementStep arg1, + GtkMovementStep stepType, gint arg2, gpointer data) { + GtkTreePath *path; // = gtk_tree_path_new(); - gint *indices; - gdouble value; EventViewerData *event_viewer_data = (EventViewerData*)data; g_debug("move cursor cb"); @@ -684,35 +649,23 @@ void tree_v_move_cursor_cb (GtkWidget *widget, if(lttvwindow_events_request_pending(event_viewer_data->tab)) return; /* If no prior position... */ -#if 0 - if(ltt_time_compare( - lttv_traceset_context_position_get_time( - event_viewer_data->currently_selected_position), - ltt_time_infinite) == 0) { - - path = gtk_tree_path_new_from_indices(0, -1); - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); - gtk_tree_path_free(path); - return; - } -#endif //0 - - g_debug("tree view move cursor : arg1 is %u and arg2 is %d", - (guint)arg1, arg2); + g_debug("tree view move cursor : stepType is %u and arg2 is %d", + (guint)stepType, arg2); - switch(arg1) { + switch(stepType) { case GTK_MOVEMENT_DISPLAY_LINES: if(arg2 == 1) { /* Move one line down */ + LttvTracesetPosition *end_pos = 0; if(event_viewer_data->pos->len > 0) { - LttvTracesetContextPosition *end_pos = - (LttvTracesetContextPosition*)g_ptr_array_index( + end_pos = + (LttvTracesetPosition*)g_ptr_array_index( event_viewer_data->pos, event_viewer_data->pos->len-1); - if(lttv_traceset_context_pos_pos_compare(end_pos, + } + if(!end_pos || lttv_traceset_position_compare(end_pos, event_viewer_data->currently_selected_position) == 0) { /* Must get down one event and select the last one */ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( @@ -726,85 +679,58 @@ void tree_v_move_cursor_cb (GtkWidget *widget, max(0, event_viewer_data->pos->len - 1), -1); if(path) { gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); + path, NULL, FALSE); gtk_tree_path_free(path); } } } - } else { - /* Must get down one event and select the last one */ - gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( - GTK_TREE_VIEW(event_viewer_data->tree_v))); - event_viewer_data->update_cursor = FALSE; - gtk_adjustment_set_value(event_viewer_data->vadjust_c, - gtk_adjustment_get_value(event_viewer_data->vadjust_c) + 1); - event_viewer_data->update_cursor = TRUE; - if(event_viewer_data->pos->len > 0) { - path = gtk_tree_path_new_from_indices( - max(0, event_viewer_data->pos->len - 1), -1); - if(path) { - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); - gtk_tree_path_free(path); - } - } - } - + } else { + LttvTracesetPosition *begin_pos = 0; + if(event_viewer_data->pos->len > 0) { /* Move one line up */ - LttvTracesetContextPosition *begin_pos = - (LttvTracesetContextPosition*)g_ptr_array_index( - event_viewer_data->pos, - 0); - if(lttv_traceset_context_pos_pos_compare(begin_pos, - event_viewer_data->currently_selected_position) == 0) { - /* Must get up one event and select the first one */ - gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( - GTK_TREE_VIEW(event_viewer_data->tree_v))); - event_viewer_data->update_cursor = FALSE; - gtk_adjustment_set_value(event_viewer_data->vadjust_c, - gtk_adjustment_get_value(event_viewer_data->vadjust_c) - 1); - event_viewer_data->update_cursor = TRUE; - if(event_viewer_data->pos->len > 0) { - path = gtk_tree_path_new_from_indices( - 0, -1); - if(path) { - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); - gtk_tree_path_free(path); - } - } - } - } else { - /* Must get up one event and select the first one */ - gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( - GTK_TREE_VIEW(event_viewer_data->tree_v))); - event_viewer_data->update_cursor = FALSE; - gtk_adjustment_set_value(event_viewer_data->vadjust_c, - gtk_adjustment_get_value(event_viewer_data->vadjust_c) - 1); - event_viewer_data->update_cursor = TRUE; - if(event_viewer_data->pos->len > 0) { - path = gtk_tree_path_new_from_indices( - 0, -1); - if(path) { - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); - gtk_tree_path_free(path); - } - } - } + begin_pos = + (LttvTracesetPosition*)g_ptr_array_index( + event_viewer_data->pos, + 0); + } + if(!begin_pos || lttv_traceset_position_compare(begin_pos, + event_viewer_data->currently_selected_position) == 0) + + + { + /* Must get up one event and select the first one */ + gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( + GTK_TREE_VIEW(event_viewer_data->tree_v))); + event_viewer_data->update_cursor = FALSE; + gtk_adjustment_set_value(event_viewer_data->vadjust_c, + gtk_adjustment_get_value(event_viewer_data->vadjust_c) - 1); + event_viewer_data->update_cursor = TRUE; + if(event_viewer_data->pos->len > 0) { + path = gtk_tree_path_new_from_indices( + 0, -1); + if(path) { + gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), + path, NULL, FALSE); + gtk_tree_path_free(path); + } + } + } + } break; case GTK_MOVEMENT_PAGES: if(arg2 == 1) { /* Move one page down */ + LttvTracesetPosition *end_pos = 0; if(event_viewer_data->pos->len > 0) { - LttvTracesetContextPosition *end_pos = - (LttvTracesetContextPosition*)g_ptr_array_index( + end_pos = + (LttvTracesetPosition*)g_ptr_array_index( event_viewer_data->pos, event_viewer_data->pos->len-1); - if(lttv_traceset_context_pos_pos_compare(end_pos, + } + if(!end_pos || lttv_traceset_position_compare(end_pos, event_viewer_data->currently_selected_position) == 0) { /* Must get down one page and select the last one */ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( @@ -823,32 +749,17 @@ void tree_v_move_cursor_cb (GtkWidget *widget, } } } - } else { - /* Must get down one page and select the last one */ - gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( - GTK_TREE_VIEW(event_viewer_data->tree_v))); - event_viewer_data->update_cursor = FALSE; - gtk_adjustment_set_value(event_viewer_data->vadjust_c, - gtk_adjustment_get_value(event_viewer_data->vadjust_c) + 2); - event_viewer_data->update_cursor = TRUE; - if(event_viewer_data->pos->len > 0) { - path = gtk_tree_path_new_from_indices( - event_viewer_data->pos->len - 1, -1); - if(path) { - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); - gtk_tree_path_free(path); - } - } - } } else { /* Move one page up */ + LttvTracesetPosition *begin_pos = 0; + if(event_viewer_data->pos->len > 0) { - LttvTracesetContextPosition *begin_pos = - (LttvTracesetContextPosition*)g_ptr_array_index( + begin_pos = + (LttvTracesetPosition*)g_ptr_array_index( event_viewer_data->pos, 0); - if(lttv_traceset_context_pos_pos_compare(begin_pos, + } + if(!begin_pos || lttv_traceset_position_compare(begin_pos, event_viewer_data->currently_selected_position) == 0) { /* Must get up one page and select the first one */ gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( @@ -867,149 +778,13 @@ void tree_v_move_cursor_cb (GtkWidget *widget, } } } - } else { - /* Must get up one page and select the first one */ - gtk_tree_selection_unselect_all(gtk_tree_view_get_selection( - GTK_TREE_VIEW(event_viewer_data->tree_v))); - event_viewer_data->update_cursor = FALSE; - gtk_adjustment_set_value(event_viewer_data->vadjust_c, - gtk_adjustment_get_value(event_viewer_data->vadjust_c) - 2); - event_viewer_data->update_cursor = TRUE; - if(event_viewer_data->pos->len > 0) { - path = gtk_tree_path_new_from_indices( - 0, -1); - if(path) { - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - path, NULL, FALSE); - gtk_tree_path_free(path); - } - } - } } break; default: break; } - //gtk_tree_path_free(path); - -#if 0 - if(arg1 == GTK_MOVEMENT_DISPLAY_LINES) - { - /* Move one line */ - if(arg2 == 1) - { - /* move one line down */ - if(indices[0]) // Do we need an empty field here (before first)? - { - if(value + event_viewer_data->num_visible_events <= - event_viewer_data->number_of_events -1) - { - event_viewer_data->currently_selected_event += 1; - // gtk_adjustment_set_value(event_viewer_data->vadjust_c, value+1); - //gtk_tree_path_free(path); - //path = gtk_tree_path_new_from_indices(event_viewer_data->num_visible_events-1, -1); - //gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor"); - } - } - } else { - /* Move one line up */ - if(indices[0] == 0) - { - if(value - 1 >= 0 ) - { - event_viewer_data->currently_selected_event -= 1; - // gtk_adjustment_set_value(event_viewer_data->vadjust_c, value-1); - //gtk_tree_path_free(path); - //path = gtk_tree_path_new_from_indices(0, -1); - //gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor"); - } - } - } - } - - if(arg1 == GTK_MOVEMENT_PAGES) - { - /* Move one page */ - if(arg2 == 1) - { - if(event_viewer_data->num_visible_events == 1) - value += 1 ; - /* move one page down */ - if(value + event_viewer_data->num_visible_events-1 <= - event_viewer_data->number_of_events ) - { - event_viewer_data->currently_selected_event += - event_viewer_data->num_visible_events-1; - // gtk_adjustment_set_value(event_viewer_data->vadjust_c, - // value+(event_viewer_data->num_visible_events-1)); - //gtk_tree_path_free(path); - //path = gtk_tree_path_new_from_indices(0, -1); - //gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor"); - } - } else { - /* Move one page up */ - if(event_viewer_data->num_visible_events == 1) - value -= 1 ; - if(indices[0] < event_viewer_data->num_visible_events - 2 ) - { - if(value - (event_viewer_data->num_visible_events-1) >= 0) - { - event_viewer_data->currently_selected_event -= - event_viewer_data->num_visible_events-1; - - // gtk_adjustment_set_value(event_viewer_data->vadjust_c, - // value-(event_viewer_data->num_visible_events-1)); - //gtk_tree_path_free(path); - //path = gtk_tree_path_new_from_indices(0, -1); - //gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor"); - - } else { - /* Go to first Event */ - event_viewer_data->currently_selected_event == 0 ; - // gtk_adjustment_set_value(event_viewer_data->vadjust_c, - // 0); - //gtk_tree_path_free(path); - //path = gtk_tree_path_new_from_indices(0, -1); - //gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor"); - - } - } - } - } - - if(arg1 == GTK_MOVEMENT_BUFFER_ENDS) - { - /* Move to the ends of the buffer */ - if(arg2 == 1) - { - /* move end of buffer */ - event_viewer_data->currently_selected_event = - event_viewer_data->number_of_events-1 ; - // gtk_adjustment_set_value(event_viewer_data->vadjust_c, - // event_viewer_data->number_of_events - - // event_viewer_data->num_visible_events); - //gtk_tree_path_free(path); - //path = gtk_tree_path_new_from_indices(event_viewer_data->num_visible_events-1, -1); - //gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor"); - } else { - /* Move beginning of buffer */ - event_viewer_data->currently_selected_event = 0 ; - // gtk_adjustment_set_value(event_viewer_data->vadjust_c, 0); - //gtk_tree_path_free(path); - //path = gtk_tree_path_new_from_indices(0, -1); - //gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); - g_signal_stop_emission_by_name(G_OBJECT(widget), "move-cursor"); - } - } -#endif //0 } static void filter_button (GtkToolButton *toolbutton, @@ -1040,7 +815,6 @@ static void filter_button (GtkToolButton *toolbutton, gboolean tree_v_scroll_handler (GtkWidget *widget, GdkEventScroll *event, gpointer data) { EventViewerData *event_viewer_data = (EventViewerData*) data; - Tab *tab = event_viewer_data->tab; switch(event->direction) { case GDK_SCROLL_UP: @@ -1059,15 +833,17 @@ gboolean tree_v_scroll_handler (GtkWidget *widget, GdkEventScroll *event, gpoint void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data) { + EventViewerData *event_viewer_data = (EventViewerData*) data; + Tab *tab = event_viewer_data->tab; GtkTreeIter iter; GtkTreeModel* model = GTK_TREE_MODEL(event_viewer_data->store_m); GtkTreePath *path; - LttvTracesetContextPosition *pos; + LttvTracesetPosition *pos; g_debug("cursor changed cb"); - + /* On cursor change, modify the currently selected event by calling * the right API function */ if(event_viewer_data->report_position) { @@ -1078,9 +854,10 @@ void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data) if(gtk_tree_model_get_iter(model,&iter,path)){ gtk_tree_model_get(model, &iter, POSITION_COLUMN, &pos, -1); - if(lttv_traceset_context_pos_pos_compare(pos, - event_viewer_data->currently_selected_position) != 0) + if(lttv_traceset_position_compare(pos, + event_viewer_data->currently_selected_position) != 0) { lttvwindow_report_current_position(tab, pos); + } }else{ g_warning("Can not get iter\n"); } @@ -1094,38 +871,9 @@ void tree_v_cursor_changed_cb (GtkWidget *widget, gpointer data) static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data) { - g_debug("tree sel changed cb"); - EventViewerData *event_viewer_data = (EventViewerData*) data; + g_debug("tree sel changed cb - do nothing"); + -#if 0 - /* Set the cursor to currently selected event */ - GtkTreeModel* model = GTK_TREE_MODEL(event_viewer_data->store_m); - GtkTreeIter iter; - LttvTracesetContextPosition *pos; - guint i; - GtkTreePath *tree_path; - - for(i=0;inum_visible_events;i++) { - tree_path = gtk_tree_path_new_from_indices( - i, - -1); - if(gtk_tree_model_get_iter(model,&iter,tree_path)){ - gtk_tree_model_get(model, &iter, POSITION_COLUMN, &pos, -1); - - if(lttv_traceset_context_pos_pos_compare(pos, - event_viewer_data->currently_selected_position) == 0) { - /* Match! */ - gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), - tree_path, NULL, FALSE); - break; - } - - }else{ - g_warning("Can not get iter\n"); - } - gtk_tree_path_free(tree_path); - } -#endif //0 } #if 0 @@ -1144,9 +892,6 @@ static gint key_snooper(GtkWidget *grab_widget, GdkEventKey *event, void v_scroll_cb (GtkAdjustment *adjustment, gpointer data) { EventViewerData *event_viewer_data = (EventViewerData*)data; - LttvTracesetStats *tss = - lttvwindow_get_traceset_stats(event_viewer_data->tab); - LttvTracesetContext *tsc = (LttvTracesetContext*)tss; g_debug("SCROLL begin"); g_debug("SCROLL values : %g , %g, %g", adjustment->value, event_viewer_data->previous_value, @@ -1165,26 +910,10 @@ void v_scroll_cb (GtkAdjustment *adjustment, gpointer data) //gint snoop = gtk_key_snooper_install(key_snooper, NULL); - get_events(adjustment->value, event_viewer_data); + adjust_event_viewer(adjustment->value, event_viewer_data); //gtk_key_snooper_remove(snoop); -#if 0 - LttTime time = ltt_time_sub(event_viewer_data->first_event, - tsc->time_span.start_time); - double value = ltt_time_to_double(time); - gtk_adjustment_set_value(event_viewer_data->vadjust_c, value); - - if(event_viewer_data->currently_selected_event != -1) { - - tree_path = gtk_tree_path_new_from_indices( - event_viewer_data->currently_selected_event, - -1); - - // gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), tree_path, - // NULL, FALSE); - gtk_tree_path_free(tree_path); - } -#endif //0 + g_debug("SCROLL end"); } @@ -1217,13 +946,12 @@ void tree_v_size_allocate_cb (GtkWidget *widget, GtkAllocation *alloc, gpointer / (double)cell_height ; event_viewer_data->num_visible_events = ceil(exact_num_visible) ; - -/* + event_viewer_data->vadjust_c->page_increment = - floor(exact_num_visible); + floor(exact_num_visible); event_viewer_data->vadjust_c->page_size = - floor(exact_num_visible); -*/ + floor(exact_num_visible); + g_debug("size allocate %p : last_num_visible_events : %d", event_viewer_data, last_num_visible_events); @@ -1232,7 +960,9 @@ void tree_v_size_allocate_cb (GtkWidget *widget, GtkAllocation *alloc, gpointer event_viewer_data->vadjust_c->value); if(event_viewer_data->num_visible_events != last_num_visible_events) { - get_events(event_viewer_data->vadjust_c->value, event_viewer_data); + //TODO ybrosseau do a proper initialisation here, so we can use the redraw + adjust_event_viewer(event_viewer_data->vadjust_c->value, event_viewer_data); + //redraw(event_viewer_data); } @@ -1249,34 +979,6 @@ void tree_v_size_request_cb (GtkWidget *widget, GtkRequisition *requisition, gpo } -#if 0 -gboolean show_event_detail(void * hook_data, void * call_data) -{ - EventViewerData *event_viewer_data = (EventViewerData*) hook_data; - LttvTracesetContext * tsc = lttvwindow_get_traceset_context(event_viewer_data->tab); - - if(event_viewer_data->event_fields_queue_tmp->length == 0 && - event_viewer_data->event_fields_queue->length == 0){ - event_viewer_data->shown = FALSE; - return FALSE; - } - - if(event_viewer_data->shown == FALSE){ - event_viewer_data->shown = TRUE; - update_raw_data_array(event_viewer_data, - event_viewer_data->event_fields_queue_tmp->length); - - get_data(event_viewer_data->vadjust_c->value, - event_viewer_data->num_visible_events, - event_viewer_data); - - remove_context_hooks(event_viewer_data,tsc); - } - - return FALSE; -} -#endif //0 - static gboolean events_check_handler(guint count, gboolean *stop_flag, gpointer data) { @@ -1302,20 +1004,24 @@ static gboolean events_check_handler(guint count, gboolean *stop_flag, } else return FALSE; } -static void get_events(double new_value, EventViewerData *event_viewer_data) + +/* This function will adjust the first event position for the viewer which + will be used by the redraw to seek and display all the events + */ +static void adjust_event_viewer(double new_value, EventViewerData *event_viewer_data) { - GtkTreePath *tree_path; +#ifdef BABEL_CLEANUP LttvTracesetStats *tss = lttvwindow_get_traceset_stats(event_viewer_data->tab); - LttvTracesetContext *tsc = (LttvTracesetContext*)tss; - guint i; +#endif //babel_cleanup + LttvTraceset *ts = lttvwindow_get_traceset(event_viewer_data->tab); + gboolean seek_by_time; - int retval; - + if(lttvwindow_preempt_count > 0) return; double value = new_value - event_viewer_data->previous_value; - + /* Set stop button status for foreground processing */ event_viewer_data->tab->stop_foreground = FALSE; lttvwindow_events_request_disable(); @@ -1337,79 +1043,65 @@ static void get_events(double new_value, EventViewerData *event_viewer_data) else direction = SCROLL_JUMP; } } else direction = SCROLL_NONE; /* 0.0 */ - - + switch(direction) { case SCROLL_STEP_UP: - g_debug("get_events : SCROLL_STEP_UP"); + g_debug("adjust_event_viewer : SCROLL_STEP_UP"); relative_position = -1; seek_by_time = 0; break; case SCROLL_STEP_DOWN: - g_debug("get_events : SCROLL_STEP_DOWN"); + g_debug("adjust_event_viewer : SCROLL_STEP_DOWN"); relative_position = 1; seek_by_time = 0; break; case SCROLL_PAGE_UP: - g_debug("get_events : SCROLL_PAGE_UP"); + g_debug("adjust_event_viewer : SCROLL_PAGE_UP"); relative_position = -(event_viewer_data->num_visible_events); seek_by_time = 0; break; case SCROLL_PAGE_DOWN: - g_debug("get_events : SCROLL_PAGE_DOWN"); + g_debug("adjust_event_viewer : SCROLL_PAGE_DOWN"); relative_position = event_viewer_data->num_visible_events; seek_by_time = 0; break; case SCROLL_JUMP: - g_debug("get_events : SCROLL_JUMP"); + g_debug("adjust_event_viewer : SCROLL_JUMP"); relative_position = 0; seek_by_time = 1; break; case SCROLL_NONE: - g_debug("get_events : SCROLL_NONE"); + g_debug("adjust_event_viewer : SCROLL_NONE"); relative_position = 0; seek_by_time = 0; break; } LttTime time = ltt_time_from_double(new_value); - time = ltt_time_add(tsc->time_span.start_time, time); + TimeInterval time_span = lttv_traceset_get_time_span_real(ts); + time = ltt_time_add(time_span.start_time, time); + + LttvTracesetPosition *timePos = lttv_traceset_create_time_position(ts,time); + if(!seek_by_time) { - - LttvTracesetContextPosition *pos = - lttv_traceset_context_position_new(tsc); - + /* Remember the beginning position */ if(event_viewer_data->pos->len > 0) { - LttvTracesetContextPosition *first_pos = - (LttvTracesetContextPosition*)g_ptr_array_index( - event_viewer_data->pos, - 0); - lttv_traceset_context_position_copy(pos, first_pos); - - if(relative_position >= 0) { - LttTime first_event_time = - lttv_traceset_context_position_get_time( - pos); - lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, - first_event_time); - lttv_process_traceset_middle(tsc, ltt_time_infinite, - G_MAXUINT, - pos); - - } else if(relative_position < 0) { - retval= lttv_process_traceset_seek_position(tsc, pos); - g_assert_cmpint(retval, ==, 0); + + if(relative_position != 0) + { + LttvTracesetPosition *pos = 0; + pos = (LttvTracesetPosition*)g_ptr_array_index( + event_viewer_data->pos, + 0); + lttv_state_traceset_seek_position(ts,pos); } } else { - /* There is nothing in the list : simply seek to the time value. */ - lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, - time); - lttv_process_traceset_middle(tsc, time, G_MAXUINT, - NULL); + lttv_state_traceset_seek_time(ts,time); + } - + /* Note that, as we mess with the tsc position, this function CANNOT be called * from a hook inside the lttv_process_traceset_middle. */ /* As the lttvwindow API keeps a sync_position inside the tsc to go back at @@ -1419,74 +1111,78 @@ static void get_events(double new_value, EventViewerData *event_viewer_data) /* Get the beginning position of the read (with seek backward or seek forward) */ if(relative_position > 0) { - guint count; - count = lttv_process_traceset_seek_n_forward(tsc, relative_position, + lttv_process_traceset_seek_n_forward(ts, relative_position, events_check_handler, &event_viewer_data->tab->stop_foreground, event_viewer_data->main_win_filter, event_viewer_data->filter, NULL, event_viewer_data); } else if(relative_position < 0) { - guint count; - /* Get an idea of currently shown event dispersion */ - LttTime first_event_time = - lttv_traceset_context_position_get_time(event_viewer_data->first_event); - LttTime last_event_time = - lttv_traceset_context_position_get_time(event_viewer_data->last_event); - LttTime time_diff = ltt_time_sub(last_event_time, first_event_time); - if(ltt_time_compare(time_diff, ltt_time_zero) == 0) - time_diff = seek_back_default_offset; - - count = lttv_process_traceset_seek_n_backward(tsc, - abs(relative_position), - time_diff, - (seek_time_fct)lttv_state_traceset_seek_time_closest, + guint64 first_event_time_stamp = + lttv_traceset_position_get_timestamp(event_viewer_data->first_event); + guint64 last_event_time_stamp = + lttv_traceset_position_get_timestamp(event_viewer_data->last_event); + guint64 timeSpan = (last_event_time_stamp - first_event_time_stamp); + gdouble ratio = (gdouble)timeSpan / (gdouble)event_viewer_data->num_visible_events; + if(ratio <= 0){ + ratio = SEEK_BACK_DEFAULT_RATIO; + } + + lttv_process_traceset_seek_n_backward(ts, + (guint)abs(relative_position), + ratio, events_check_handler, &event_viewer_data->tab->stop_foreground, event_viewer_data->main_win_filter, event_viewer_data->filter, NULL, event_viewer_data); } /* else 0 : do nothing : we are already at the beginning position */ - lttv_traceset_context_position_destroy(pos); - /* Save the first event position */ - lttv_traceset_context_position_save(tsc, event_viewer_data->first_event); - - time = lttv_traceset_context_position_get_time( - event_viewer_data->first_event); + + event_viewer_data->first_event = lttv_traceset_create_current_position(ts); + + time = ltt_time_from_uint64(lttv_traceset_position_get_timestamp( + event_viewer_data->first_event)); //if(ltt_time_compare(time, tsc->time_span.end_time) > 0) // time = tsc->time_span.end_time; - LttTime time_val = ltt_time_sub(time, - tsc->time_span.start_time); + LttTime time_val = ltt_time_sub(time,time_span.start_time); event_viewer_data->previous_value = ltt_time_to_double(time_val); - - lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, time); - lttv_process_traceset_middle(tsc, ltt_time_infinite, G_MAXUINT, - event_viewer_data->first_event); + } else { /* Seek by time */ - lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, - time); - lttv_process_traceset_middle(tsc, time, G_MAXUINT, - NULL); - LttTime time_val = ltt_time_sub(time, - tsc->time_span.start_time); + + LttTime time_val = ltt_time_sub(time,time_span.start_time); event_viewer_data->previous_value = ltt_time_to_double(time_val); - lttv_traceset_context_position_save(tsc, event_viewer_data->first_event); + event_viewer_data->first_event = timePos; } - + lttvwindow_events_request_enable(); + + redraw(event_viewer_data); +} + +static void redraw(EventViewerData *event_viewer_data) { + guint i; + LttvTraceset *ts = lttvwindow_get_traceset(event_viewer_data->tab); + + g_debug("EventViewer redraw"); + + //TODO ybrosseau verify its still required + lttvwindow_events_request_disable(); + + /* Clear the model (don't forget to free the TCS positions!) */ gtk_list_store_clear(event_viewer_data->store_m); for(i=0;ipos->len;i++) { - LttvTracesetContextPosition *cur_pos = - (LttvTracesetContextPosition*)g_ptr_array_index(event_viewer_data->pos, + LttvTracesetPosition *cur_pos = + (LttvTracesetPosition*)g_ptr_array_index(event_viewer_data->pos, i); - lttv_traceset_context_position_destroy(cur_pos); + lttv_traceset_destroy_position(cur_pos); } g_ptr_array_set_size(event_viewer_data->pos, 0); + lttv_state_traceset_seek_position(ts, event_viewer_data->first_event); /* Mathieu : * I make the choice not to use the mainwindow lttvwindow API here : the idle @@ -1495,26 +1191,24 @@ static void get_events(double new_value, EventViewerData *event_viewer_data) * processing can be stopped. */ - lttv_process_traceset_begin(tsc, - NULL, NULL, NULL, event_viewer_data->event_hooks, NULL); + lttv_process_traceset_begin(ts, + NULL, NULL, event_viewer_data->event_hooks); event_viewer_data->num_events = 0; - lttv_process_traceset_middle(tsc, ltt_time_infinite, G_MAXUINT, NULL); + lttv_process_traceset_middle(ts, ltt_time_infinite, G_MAXUINT, NULL); - lttv_process_traceset_end(tsc, - NULL, NULL, NULL, event_viewer_data->event_hooks, NULL); + lttv_process_traceset_end(ts, NULL, NULL, event_viewer_data->event_hooks); /* Get the end position */ if(event_viewer_data->pos->len > 0) { - LttvTracesetContextPosition *cur_pos = - (LttvTracesetContextPosition*)g_ptr_array_index(event_viewer_data->pos, + LttvTracesetPosition *cur_pos = + (LttvTracesetPosition*)g_ptr_array_index(event_viewer_data->pos, event_viewer_data->pos->len - 1); - lttv_traceset_context_position_copy(event_viewer_data->last_event, - cur_pos); + event_viewer_data->last_event = cur_pos; } else - lttv_traceset_context_position_save(tsc, event_viewer_data->last_event); - + event_viewer_data->last_event =lttv_traceset_create_current_position(ts); + gtk_adjustment_set_value(event_viewer_data->vadjust_c, event_viewer_data->previous_value); @@ -1526,17 +1220,17 @@ static void get_events(double new_value, EventViewerData *event_viewer_data) gtk_widget_get_parent_window(event_viewer_data->tree_v)); lttvwindow_events_request_enable(); - + return; } int event_hook(void *hook_data, void *call_data) { + EventViewerData *event_viewer_data = (EventViewerData*)hook_data; - LttvTracefileContext *tfc = (LttvTracefileContext*)call_data; - LttvTracefileState *tfs = (LttvTracefileState*)call_data; - LttEvent *e = ltt_tracefile_get_event(tfc->tf); + + LttvEvent * e = (LttvEvent *)call_data; if(event_viewer_data->num_events % CHECK_GDK_INTERVAL == 0) { GdkEvent *event; @@ -1556,8 +1250,9 @@ int event_hook(void *hook_data, void *call_data) if(event_viewer_data->tab->stop_foreground) return TRUE; } + event_viewer_data->num_events++; - +#ifdef BABEL_CLEANUP LttvFilter *filter = event_viewer_data->main_win_filter; if(filter != NULL && filter->head != NULL) if(!lttv_filter_tree_parse(filter->head,e,tfc->tf, @@ -1569,49 +1264,48 @@ int event_hook(void *hook_data, void *call_data) if(!lttv_filter_tree_parse(filter->head,e,tfc->tf, tfc->t_context->t,tfc,NULL,NULL)) return FALSE; - - +#endif //babel_cleanup + // LttFacility *facility = ltt_event_facility(e); // LttEventType *event_type = ltt_event_eventtype(e); - LttTime time = ltt_event_time(e); + LttTime time = lttv_event_get_timestamp(e); + gint cpu = lttv_traceset_get_cpuid_from_event(e); + + LttvTraceState *traceState = e->state; + LttvProcessState *process = traceState->running_process[cpu]; - guint cpu = tfs->cpu; - LttvTraceState *ts = (LttvTraceState*)tfc->t_context; - LttvProcessState *process = ts->running_process[cpu]; - GtkTreeIter iter; GString *desc = g_string_new(""); + GString *name = g_string_new(""); - LttvTracesetContextPosition *pos = - lttv_traceset_context_position_new(tfc->t_context->ts_context); - - lttv_traceset_context_position_save(tfc->t_context->ts_context, pos); + LttvTracesetPosition *pos = lttv_traceset_create_current_position(traceState->trace->traceset); - lttv_event_to_string(e, desc, TRUE, TRUE, (LttvTracefileState*)tfc); + lttv_event_to_string(e, desc, TRUE, FALSE); + lttv_event_get_name(e,name); g_info("detail : %s", desc->str); - + gtk_list_store_append (event_viewer_data->store_m, &iter); + gtk_list_store_set (event_viewer_data->store_m, &iter, - TRACE_NAME_COLUMN, g_quark_to_string(ltt_trace_name(tfc->t_context->t)), - TRACEFILE_NAME_COLUMN, g_quark_to_string(ltt_tracefile_name(tfc->tf)), - CPUID_COLUMN, cpu, - EVENT_COLUMN, g_quark_to_string(marker_get_info_from_id(tfc->tf->mdata, - e->event_id)->name), - TIME_S_COLUMN, time.tv_sec, - TIME_NS_COLUMN, time.tv_nsec, - PID_COLUMN, process->pid, - EVENT_DESCR_COLUMN, desc->str, - POSITION_COLUMN, pos, - -1); + TRACE_NAME_COLUMN, traceState->trace->short_name, + CPUID_COLUMN, cpu, + EVENT_COLUMN,name->str, + TIME_S_COLUMN, time.tv_sec, + TIME_NS_COLUMN, time.tv_nsec, + PID_COLUMN, process->pid, + EVENT_DESCR_COLUMN, desc->str, + POSITION_COLUMN, pos, + -1); g_ptr_array_add(event_viewer_data->pos, pos); g_string_free(desc, TRUE); + g_string_free(name, TRUE); if(event_viewer_data->update_cursor) { - if(lttv_traceset_context_pos_pos_compare(pos, + if(lttv_traceset_position_compare(pos, event_viewer_data->currently_selected_position) == 0) { GtkTreePath *path = gtk_tree_path_new_from_indices( event_viewer_data->pos->len - 1, -1); @@ -1622,39 +1316,63 @@ int event_hook(void *hook_data, void *call_data) } } } - if(event_viewer_data->pos->len >= event_viewer_data->num_visible_events ) return TRUE; else return FALSE; + } static void event_update_selection(EventViewerData *event_viewer_data) { + guint i; GPtrArray *positions = event_viewer_data->pos; g_info("event_update_selection"); + + int isFound = FALSE; + for(i=0;ilen;i++) { - LttvTracesetContextPosition *cur_pos = - (LttvTracesetContextPosition*)g_ptr_array_index(positions, i); - if(lttv_traceset_context_pos_pos_compare(cur_pos, + LttvTracesetPosition *cur_pos = + (LttvTracesetPosition*)g_ptr_array_index(positions, i); + if(lttv_traceset_position_compare(cur_pos, event_viewer_data->currently_selected_position) == 0) { GtkTreePath *path = gtk_tree_path_new_from_indices(i, -1); if(path) { gtk_tree_view_set_cursor(GTK_TREE_VIEW(event_viewer_data->tree_v), path, NULL, FALSE); + gtk_widget_grab_focus(event_viewer_data->tree_v ); gtk_tree_path_free(path); - } + isFound = TRUE; + break; + } } - } + } + if(isFound){ + return; + } + /* If the current selection is not in the currently displayed events*/ + LttTime currentTime = lttv_traceset_position_get_time( + event_viewer_data->currently_selected_position); + LttTime time; + + LttvTraceset * ts = lttvwindow_get_traceset(event_viewer_data->tab); + TimeInterval time_span = lttv_traceset_get_time_span_real(ts); + time = ltt_time_sub(currentTime, time_span.start_time); + gtk_adjustment_set_value(event_viewer_data->vadjust_c, + ltt_time_to_double(time)); + gtk_widget_grab_focus(event_viewer_data->tree_v ); + } - +#ifdef BABEL_CLEANUP static int current_time_get_first_event_hook(void *hook_data, void *call_data) { + EventViewerData *event_viewer_data = (EventViewerData*)hook_data; + LttvTracefileContext *tfc = (LttvTracefileContext*)call_data; LttEvent *e = ltt_tracefile_get_event(tfc->tf); @@ -1673,74 +1391,42 @@ static int current_time_get_first_event_hook(void *hook_data, void *call_data) lttv_traceset_context_position_save(tfc->t_context->ts_context, event_viewer_data->current_time_get_first); return TRUE; -} + +} +#endif // BABEL_CLEANUP gboolean update_current_time(void * hook_data, void * call_data) { + + //LttvEvent * e = (LttvEvent *)call_data; g_info("update_current_time"); EventViewerData *event_viewer_data = (EventViewerData*) hook_data; + const LttTime * current_time = (LttTime*)call_data; - LttvTracesetContext * tsc = - lttvwindow_get_traceset_context(event_viewer_data->tab); - GtkTreePath *path; + LttvTraceset * ts = lttvwindow_get_traceset(event_viewer_data->tab); /* If the currently selected event time != current time, set the first event * with this time as currently selected. */ - LttTime pos_time = lttv_traceset_context_position_get_time( - event_viewer_data->currently_selected_position); + LttTime pos_time = lttv_traceset_position_get_time( + event_viewer_data->currently_selected_position); + if(ltt_time_compare(pos_time, *current_time) != 0) { + /*create position*/ + //LttvTracesetPosition *currentPosition = + // lttv_traceset_create_time_position(ts,*current_time ); + /*seek to current position*/ + lttv_state_traceset_seek_time(ts, *current_time); - lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, - *current_time); - lttv_process_traceset_middle(tsc, *current_time, G_MAXUINT, - NULL); - - /* Get the first event that passes in the filter */ - event_viewer_data->current_time_get_first = - lttv_traceset_context_position_new(tsc); - LttvHooks *hooks = lttv_hooks_new(); - lttv_hooks_add(hooks, - current_time_get_first_event_hook, - event_viewer_data, - LTTV_PRIO_DEFAULT); - - lttv_process_traceset_begin(tsc, - NULL, NULL, NULL, hooks, NULL); - - lttv_process_traceset_middle(tsc, ltt_time_infinite, G_MAXUINT, NULL); - - lttv_process_traceset_end(tsc, - NULL, NULL, NULL, hooks, NULL); - - lttv_hooks_destroy(hooks); - - lttv_traceset_context_position_copy( - event_viewer_data->currently_selected_position, - event_viewer_data->current_time_get_first); - lttv_traceset_context_position_destroy( - event_viewer_data->current_time_get_first); - pos_time = lttv_traceset_context_position_get_time( - event_viewer_data->currently_selected_position); + event_viewer_data->currently_selected_position = + lttv_traceset_create_current_position(ts); + g_debug("update_current_time: %p %lu", event_viewer_data->currently_selected_position, event_viewer_data->currently_selected_position->timestamp); } - LttTime time = ltt_time_sub(pos_time, tsc->time_span.start_time); - double new_value = ltt_time_to_double(time); - event_viewer_data->report_position = FALSE; - /* Change the viewed area if does not match */ - if(lttv_traceset_context_pos_pos_compare( - event_viewer_data->currently_selected_position, - event_viewer_data->first_event) < 0 - || - lttv_traceset_context_pos_pos_compare( - event_viewer_data->currently_selected_position, - event_viewer_data->last_event) > 0) { - gtk_adjustment_set_value(event_viewer_data->vadjust_c, new_value); - } else { + /* Simply update the current time : it is in the list */ - event_update_selection(event_viewer_data); - } + event_update_selection(event_viewer_data); event_viewer_data->report_position = TRUE; return FALSE; @@ -1748,89 +1434,87 @@ gboolean update_current_time(void * hook_data, void * call_data) gboolean update_current_position(void * hook_data, void * call_data) { + g_info("update_current_position"); EventViewerData *event_viewer_data = (EventViewerData*) hook_data; - const LttvTracesetContextPosition *current_pos = - (LttvTracesetContextPosition*)call_data; - LttvTracesetContext * tsc = - lttvwindow_get_traceset_context(event_viewer_data->tab); + const LttvTracesetPosition *current_pos = (LttvTracesetPosition*)call_data; - if(lttv_traceset_context_pos_pos_compare( + if(lttv_traceset_position_compare( event_viewer_data->currently_selected_position, current_pos) != 0) { - lttv_traceset_context_position_copy( - event_viewer_data->currently_selected_position, current_pos); - - /* Change the viewed area if does not match */ - if(lttv_traceset_context_pos_pos_compare( - event_viewer_data->currently_selected_position, - event_viewer_data->first_event) < 0 - || - lttv_traceset_context_pos_pos_compare( - event_viewer_data->currently_selected_position, - event_viewer_data->last_event) > 0) { - LttTime time = lttv_traceset_context_position_get_time(current_pos); - time = ltt_time_sub(time, tsc->time_span.start_time); - double new_value = ltt_time_to_double(time); - gtk_adjustment_set_value(event_viewer_data->vadjust_c, new_value); - } else { + g_debug("Update current pos: %p, %lu", current_pos, current_pos->timestamp); + event_viewer_data->currently_selected_position = current_pos; /* Simply update the current time : it is in the list */ event_update_selection(event_viewer_data); } + return FALSE; - } +} +gboolean timespan_changed(void * hook_data, void * call_data) +{ + + EventViewerData *event_viewer_data = (EventViewerData*) hook_data; + LttvTraceset * ts = lttvwindow_get_traceset(event_viewer_data->tab); + TimeInterval time_span = lttv_traceset_get_time_span_real(ts); + + LttTime end; - return FALSE; -} + end = ltt_time_sub(time_span.end_time, time_span.start_time); + event_viewer_data->vadjust_c->upper = ltt_time_to_double(end); + if(event_viewer_data->pos->len < event_viewer_data->num_visible_events ) { + + redraw(event_viewer_data); + + request_background_data(event_viewer_data); + } + return FALSE; +} gboolean traceset_changed(void * hook_data, void * call_data) { + EventViewerData *event_viewer_data = (EventViewerData*) hook_data; - LttvTracesetContext * tsc = - lttvwindow_get_traceset_context(event_viewer_data->tab); - TimeInterval time_span = tsc->time_span; - + LttvTraceset * ts = lttvwindow_get_traceset(event_viewer_data->tab); + TimeInterval time_span = lttv_traceset_get_time_span_real(ts); + LttTime end; gtk_list_store_clear(event_viewer_data->store_m); g_ptr_array_set_size(event_viewer_data->pos, 0); - + end = ltt_time_sub(time_span.end_time, time_span.start_time); event_viewer_data->vadjust_c->upper = ltt_time_to_double(end); - +#ifdef BABEL_CLEANUP /* Reset the positions */ - lttv_traceset_context_position_destroy( - event_viewer_data->currently_selected_position); - lttv_traceset_context_position_destroy( - event_viewer_data->first_event); - lttv_traceset_context_position_destroy( - event_viewer_data->last_event); - + lttv_traceset_destroy_position(event_viewer_data->currently_selected_position); + lttv_traceset_destroy_position(event_viewer_data->first_event); + lttv_traceset_destroy_position(event_viewer_data->last_event); + event_viewer_data->currently_selected_position = - lttv_traceset_context_position_new(tsc); + lttv_traceset_create_current_position(ts); event_viewer_data->first_event = - lttv_traceset_context_position_new(tsc); + lttv_traceset_create_current_position(ts); event_viewer_data->last_event = - lttv_traceset_context_position_new(tsc); + lttv_traceset_create_current_position(ts); + + redraw(event_viewer_data); - get_events(event_viewer_data->vadjust_c->value, event_viewer_data); +#endif //babel_cleanup // event_viewer_data->vadjust_c->value = 0; request_background_data(event_viewer_data); - + return FALSE; } gboolean filter_changed(void * hook_data, void * call_data) { EventViewerData *event_viewer_data = (EventViewerData*) hook_data; - LttvTracesetContext * tsc = - lttvwindow_get_traceset_context(event_viewer_data->tab); event_viewer_data->main_win_filter = (LttvFilter*)call_data; - get_events(event_viewer_data->vadjust_c->value, event_viewer_data); + redraw(event_viewer_data); return FALSE; } @@ -1840,12 +1524,13 @@ gint evd_redraw_notify(void *hook_data, void *call_data) { EventViewerData *event_viewer_data = (EventViewerData*) hook_data; - get_events(event_viewer_data->vadjust_c->value, event_viewer_data); + redraw(event_viewer_data); return 0; } void gui_events_free(gpointer data) { +#ifdef BABEL_CLEANUP LttvPluginEVD *plugin_evd = (LttvPluginEVD*)data; Tab *tab = plugin_evd->evd->tab; EventViewerData *event_viewer_data = plugin_evd->evd; @@ -1879,6 +1564,8 @@ void gui_events_free(gpointer data) // show_event_detail, event_viewer_data); lttvwindow_unregister_traceset_notify(tab, traceset_changed, event_viewer_data); + lttvwindow_unregister_timespan_notify(tab, + timespan_changed,event_viewer_data); lttvwindow_unregister_filter_notify(tab, filter_changed, event_viewer_data); lttvwindow_unregister_redraw_notify(tab, @@ -1891,6 +1578,7 @@ void gui_events_free(gpointer data) event_viewer_data); //g_free(event_viewer_data); g_object_unref(plugin_evd); +#endif // BABEL_CLEANUP }