X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Fcallbacks.c;h=96cfe049191f2a7b3eced8482825a04eb3731687;hb=0a9465631b6dd6c073a7213f328cbe8a6d96132d;hp=0f94bf444a7e72a325b471ee4f1785de8a5d8ff7;hpb=d27948a397c1ff8a47b497ca07f5090c08e88628;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c index 0f94bf44..96cfe049 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/callbacks.c @@ -49,7 +49,7 @@ #include -#define DEFAULT_TIME_WIDTH_S 1 +static LttTime lttvwindow_default_time_width = { 1, 0 }; #define CLIP_BUF 256 // size of clipboard buffer extern LttvTrace *g_init_trace ; @@ -408,8 +408,8 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); TimeInterval time_span = tsc->time_span; - TimeWindow new_time_window; - LttTime new_current_time; + TimeWindow new_time_window = tab->time_window; + LttTime new_current_time = tab->current_time; /* Set the tab's time window and current time if * out of bounds */ @@ -421,24 +421,23 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) new_current_time = time_span.start_time; LttTime tmp_time; - - if(DEFAULT_TIME_WIDTH_S < time_span.end_time.tv_sec) - tmp_time.tv_sec = DEFAULT_TIME_WIDTH_S; + + if(ltt_time_compare(lttvwindow_default_time_width, + ltt_time_sub(time_span.end_time, time_span.start_time)) < 0 + || + ltt_time_compare(time_span.end_time, time_span.start_time) == 0) + tmp_time = lttvwindow_default_time_width; else - tmp_time.tv_sec = time_span.end_time.tv_sec; - tmp_time.tv_nsec = 0; + tmp_time = time_span.end_time; + new_time_window.time_width = tmp_time ; new_time_window.time_width_double = ltt_time_to_double(tmp_time); new_time_window.end_time = ltt_time_add(new_time_window.start_time, new_time_window.time_width) ; } - time_change_manager(tab, new_time_window); - current_time_change_manager(tab, new_current_time); - //FIXME : we delete the filter tree, when it should be updated. - lttv_filter_destroy(tab->filter); - tab->filter = NULL; - + + #if 0 /* Set scrollbar */ GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar)); @@ -501,7 +500,9 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) if(tmp == NULL) retval = 1; else lttv_hooks_call(tmp,traceset); - + time_change_manager(tab, new_time_window); + current_time_change_manager(tab, new_current_time); + return retval; } @@ -514,7 +515,7 @@ int SetTraceset(Tab * tab, LttvTraceset *traceset) * 0 : filters updated * 1 : no filter hooks to update; not an error. */ - +#if 0 int SetFilter(Tab * tab, gpointer filter) { LttvHooks * tmp; @@ -530,7 +531,7 @@ int SetFilter(Tab * tab, gpointer filter) return 0; } - +#endif //0 /** @@ -821,42 +822,6 @@ void open_traceset(GtkWidget * widget, gpointer user_data) } -static void events_request_free(EventsRequest *events_request) -{ - if(events_request == NULL) return; - - if(events_request->start_position != NULL) - lttv_traceset_context_position_destroy(events_request->start_position); - if(events_request->end_position != NULL) - lttv_traceset_context_position_destroy(events_request->end_position); - if(events_request->hooks != NULL) - g_array_free(events_request->hooks, TRUE); - if(events_request->before_chunk_traceset != NULL) - lttv_hooks_destroy(events_request->before_chunk_traceset); - if(events_request->before_chunk_trace != NULL) - lttv_hooks_destroy(events_request->before_chunk_trace); - if(events_request->before_chunk_tracefile != NULL) - lttv_hooks_destroy(events_request->before_chunk_tracefile); - if(events_request->event != NULL) - lttv_hooks_destroy(events_request->event); - if(events_request->event_by_id != NULL) - lttv_hooks_by_id_destroy(events_request->event_by_id); - if(events_request->after_chunk_tracefile != NULL) - lttv_hooks_destroy(events_request->after_chunk_tracefile); - if(events_request->after_chunk_trace != NULL) - lttv_hooks_destroy(events_request->after_chunk_trace); - if(events_request->after_chunk_traceset != NULL) - lttv_hooks_destroy(events_request->after_chunk_traceset); - if(events_request->before_request != NULL) - lttv_hooks_destroy(events_request->before_request); - if(events_request->after_request != NULL) - lttv_hooks_destroy(events_request->after_request); - - g_free(events_request); -} - - - /* lttvwindow_process_pending_requests * * This internal function gets called by g_idle, taking care of the pending @@ -951,7 +916,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) } } } -#if 0 + /* 0.1 Lock Traces */ { guint iter_trace=0; @@ -969,8 +934,9 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) } /* 0.2 Seek tracefiles positions to context position */ + //g_assert(lttv_process_traceset_seek_position(tsc, sync_position) == 0); lttv_process_traceset_synchronize_tracefiles(tsc); -#endif //0 + /* Events processing algorithm implementation */ /* Warning : the gtk_events_pending takes a LOT of cpu time. So what we do @@ -1112,6 +1078,9 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) lttv_process_traceset_middle(tsc, events_request->start_time, G_MAXUINT, NULL); +#ifdef DEBUG + g_assert(seek_count < LTTV_STATE_SAVE_INTERVAL); +#endif //DEBUG } else { @@ -1576,7 +1545,7 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) /* 1.1. Use current postition as start position */ if(events_request->start_position != NULL) lttv_traceset_context_position_destroy(events_request->start_position); - events_request->start_position = lttv_traceset_context_position_new(); + events_request->start_position = lttv_traceset_context_position_new(tsc); lttv_traceset_context_position_save(tsc, events_request->start_position); /* 1.2. Remove start time */ @@ -1602,10 +1571,10 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) } -#if 0 /* C Unlock Traces */ { - //lttv_process_traceset_get_sync_data(tsc); + lttv_process_traceset_get_sync_data(tsc); + //lttv_traceset_context_position_save(tsc, sync_position); guint iter_trace; @@ -1617,7 +1586,6 @@ gboolean lttvwindow_process_pending_requests(Tab *tab) lttvwindowtraces_unlock(trace_v); } } -#endif //0 #if 0 //set the cursor back to normal gdk_window_set_cursor(win, NULL); @@ -1730,18 +1698,21 @@ void add_trace(GtkWidget * widget, gpointer user_data) tab = (Tab *)g_object_get_data(G_OBJECT(page), "Tab_Info"); } - GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select a trace"); - gtk_dir_selection_hide_fileop_buttons(file_selector); + //GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select a trace"); + GtkFileSelection * file_selector = (GtkFileSelection *)gtk_file_selection_new("Select a trace"); + gtk_widget_hide( (file_selector)->file_list->parent) ; + gtk_file_selection_hide_fileop_buttons(file_selector); if(remember_trace_dir[0] != '\0') - gtk_dir_selection_set_filename(file_selector, remember_trace_dir); + gtk_file_selection_set_filename(file_selector, remember_trace_dir); id = gtk_dialog_run(GTK_DIALOG(file_selector)); switch(id){ case GTK_RESPONSE_ACCEPT: case GTK_RESPONSE_OK: - dir = gtk_dir_selection_get_dir (file_selector); + dir = gtk_file_selection_get_filename (file_selector); strncpy(remember_trace_dir, dir, PATH_MAX); + strncat(remember_trace_dir, "/", PATH_MAX); if(!dir || strlen(dir) == 0){ gtk_widget_destroy((GtkWidget*)file_selector); break; @@ -1819,7 +1790,7 @@ void remove_trace(GtkWidget *widget, gpointer user_data) for(i = 0; i < nb_trace; i++){ trace_v = lttv_traceset_get(tab->traceset_info->traceset, i); trace = lttv_trace(trace_v); - name[i] = ltt_trace_name(trace); + name[i] = g_quark_to_string(ltt_trace_name(trace)); } remove_trace_name = get_remove_trace(name, nb_trace); @@ -2876,19 +2847,21 @@ void on_add_library_search_path_activate (GtkMenuItem *menuitem, gpointer user_data) { - GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select library path"); + //GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select library path"); + GtkFileSelection * file_selector = (GtkFileSelection *)gtk_file_selection_new("Select a trace"); + gtk_widget_hide( (file_selector)->file_list->parent) ; const char * dir; gint id; MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem); if(remember_plugins_dir[0] != '\0') - gtk_dir_selection_set_filename(file_selector, remember_plugins_dir); + gtk_file_selection_set_filename(file_selector, remember_plugins_dir); id = gtk_dialog_run(GTK_DIALOG(file_selector)); switch(id){ case GTK_RESPONSE_ACCEPT: case GTK_RESPONSE_OK: - dir = gtk_dir_selection_get_dir (file_selector); + dir = gtk_file_selection_get_filename (file_selector); strncpy(remember_plugins_dir,dir,PATH_MAX); strncat(remember_plugins_dir,"/",PATH_MAX); lttv_library_path_add(dir); @@ -3008,10 +2981,11 @@ on_about_activate (GtkMenuItem *menuitem, Contributors :\n\ \n\ Michel Dagenais (New trace format, lttv main)\n\ -Mathieu Desnoyers (Directory structure, build with automake/conf,\n\ +Mathieu Desnoyers (Kernel Tracer, Directory structure, build with automake/conf,\n\ lttv gui, control flow view, gui cooperative trace reading\n\ scheduler with interruptible foreground and background\n\ - computation, detailed event list)\n\ + computation, detailed event list (rewrite), trace reading\n\ + library (rewrite))\n\ Benoit Des Ligneris, Eric Clement (Cluster adaptation, work in progress)\n\ Xang-Xiu Yang (new trace reading library and converter, lttv gui, \n\ detailed event list and statistics view)\n\ @@ -3271,6 +3245,8 @@ void time_change_manager (Tab *tab, LttTime start_time = new_time_window.start_time; LttTime end_time = new_time_window.end_time; + g_assert(ltt_time_compare(start_time, end_time) < 0); + /* Set scrollbar */ GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar)); LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time); @@ -3621,6 +3597,22 @@ void current_time_change_manager (Tab *tab, tab->current_time_manager_lock = FALSE; } +void current_position_change_manager(Tab *tab, + LttvTracesetContextPosition *pos) +{ + LttvTracesetContext *tsc = + LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context); + TimeInterval time_span = tsc->time_span; + + g_assert(lttv_process_traceset_seek_position(tsc, pos) == 0); + LttTime new_time = lttv_traceset_context_position_get_time(pos); + + current_time_change_manager(tab, new_time); + + set_current_position(tab, pos); +} + + void on_MEntry5_value_changed (GtkSpinButton *spinbutton, gpointer user_data) @@ -4137,12 +4129,10 @@ Tab* create_tab(MainWindow * mw, Tab *copy_tab, /* We can clone the filter, as we copy the trace set also */ /* The filter must always be in sync with the trace set */ tab->filter = lttv_filter_clone(copy_tab->filter); - } else { tab->traceset_info->traceset = lttv_traceset_new(); tab->filter = NULL; } - #ifdef DEBUG lttv_attribute_write_xml( lttv_traceset_attribute(tab->traceset_info->traceset), @@ -4199,12 +4189,17 @@ Tab* create_tab(MainWindow * mw, Tab *copy_tab, tab->viewer_container = gtk_vbox_new(TRUE, 2); tab->scrollbar = gtk_hscrollbar_new(NULL); //tab->multivpaned = gtk_multi_vpaned_new(); - + gtk_box_pack_start(GTK_BOX(tab->vbox), tab->viewer_container, TRUE, /* expand */ TRUE, /* Give the extra space to the child */ 0); /* No padding */ + +// if(copy_tab) { +// tab->time_window = copy_tab->time_window; +// tab->current_time = copy_tab->current_time; +// } /* Create the timebar */ { @@ -4448,6 +4443,25 @@ Tab* create_tab(MainWindow * mw, Tab *copy_tab, // always show : not if(g_list_length(list)>1) gtk_notebook_set_show_tabs(notebook, TRUE); + if(copy_tab) { + lttvwindow_report_time_window(tab, copy_tab->time_window); + lttvwindow_report_current_time(tab, copy_tab->current_time); + } else { + TimeWindow time_window; + + time_window.start_time = ltt_time_zero; + time_window.end_time = ltt_time_add(time_window.start_time, + lttvwindow_default_time_width); + time_window.time_width = lttvwindow_default_time_width; + time_window.time_width_double = ltt_time_to_double(time_window.time_width); + + lttvwindow_report_time_window(tab, time_window); + lttvwindow_report_current_time(tab, ltt_time_zero); + } + + LttvTraceset *traceset = tab->traceset_info->traceset; + SetTraceset(tab, traceset); + return tab; }