X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2FguiStatistic%2FguiStatistic.c;h=c7ed6e6dc42494deb780af974430d17b613bd3bb;hb=540edb40ef20c2ce40132b3189e183d055dbe711;hp=2f54a22d1db24e5750081440af84de10a2a6d1ad;hpb=a8c0f09de06b94e9420d286e1541c39092fff434;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c b/ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c index 2f54a22d..c7ed6e6d 100644 --- a/ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c +++ b/ltt/branches/poly/lttv/modules/guiStatistic/guiStatistic.c @@ -26,6 +26,7 @@ #define PATH_LENGTH 256 static LttvModule *statistic_main_win_module; +static GPtrArray * statistic_traceset; /** Array containing instanced objects. Used when module is unloaded */ static GSList *g_statistic_viewer_data_list = NULL ; @@ -62,6 +63,8 @@ void statistic_add_context_hooks(StatisticViewerData * statistic_viewer_data, void statistic_remove_context_hooks(StatisticViewerData * statistic_viewer_data, LttvTracesetContext * tsc); +gboolean statistic_insert_traceset_stats(void * stats); + enum { NAME_COLUMN, @@ -71,6 +74,8 @@ enum struct _StatisticViewerData{ MainWindow * mw; LttvTracesetStats * stats; + gboolean calculate_stats; + int size; TimeInterval time_span; gboolean shown; //indicate if the statistic is shown or not @@ -109,7 +114,9 @@ G_MODULE_EXPORT void init(LttvModule *self, int argc, char *argv[]) { g_critical("Can't load Statistic Viewer : missing mainwin\n"); return; } - + + statistic_traceset = g_ptr_array_new (); + /* Register the toolbar insert button */ toolbar_item_reg(hGuiStatisticInsert_xpm, "Insert Statistic Viewer", h_gui_statistic); @@ -136,6 +143,7 @@ G_MODULE_EXPORT void destroy() { g_slist_foreach(g_statistic_viewer_data_list, statistic_destroy_walk, NULL ); g_slist_free(g_statistic_viewer_data_list); } + g_ptr_array_free (statistic_traceset, TRUE); /* Unregister the toolbar insert button */ toolbar_item_unreg(h_gui_statistic); @@ -191,6 +199,23 @@ h_gui_statistic(MainWindow * parent_window, LttvTracesetSelector * s, char* key) } +gboolean statistic_insert_traceset_stats(void * stats) +{ + int i, len; + gpointer s; + + len = statistic_traceset->len; + for(i=0;imw = parent_window; statistic_viewer_data->stats = get_traceset_stats_api(statistic_viewer_data->mw); + statistic_viewer_data->calculate_stats = statistic_insert_traceset_stats((void *)statistic_viewer_data->stats); reg_update_time_window(statistic_update_time_window,statistic_viewer_data, statistic_viewer_data->mw); reg_show_viewer(statistic_show_viewer,statistic_viewer_data, statistic_viewer_data->mw); @@ -286,6 +312,19 @@ gui_statistic(MainWindow *parent_window, LttvTracesetSelector * s, char* key) G_OBJECT(statistic_viewer_data->hpaned_v), TRACESET_TIME_SPAN, &statistic_viewer_data->time_span); + + if(statistic_viewer_data->calculate_stats){ + if(lttv_stats_load_statistics(statistic_viewer_data->stats)) + statistic_viewer_data->calculate_stats = FALSE; + } + + if(statistic_viewer_data->calculate_stats == FALSE){ + statistic_viewer_data->size = 1; + g_object_set_data( + G_OBJECT(statistic_viewer_data->hpaned_v), + MAX_NUMBER_EVENT, + &statistic_viewer_data->size); + } g_object_set_data_full( G_OBJECT(statistic_viewer_data->hpaned_v), @@ -504,6 +543,11 @@ gboolean statistic_update_time_window(void * hook_data, void * call_data) StatisticViewerData *statistic_viewer_data = (StatisticViewerData*) hook_data; LttvTracesetContext * tsc = get_traceset_context(statistic_viewer_data->mw); + //if statistic is already calculated, do nothing + if(!statistic_viewer_data->calculate_stats){ + return FALSE; + } + if(statistic_viewer_data->shown == FALSE){ statistic_add_context_hooks(statistic_viewer_data, tsc); } @@ -518,7 +562,10 @@ gboolean statistic_show_viewer(void * hook_data, void * call_data) if(statistic_viewer_data->shown == FALSE){ statistic_viewer_data->shown = TRUE; show_traceset_stats(statistic_viewer_data); - statistic_remove_context_hooks(statistic_viewer_data,tsc); + if(statistic_viewer_data->calculate_stats){ + statistic_remove_context_hooks(statistic_viewer_data,tsc); + lttv_stats_save_statistics((LttvTracesetStats*)tsc); + } } return FALSE; @@ -553,7 +600,7 @@ void statistic_add_context_hooks(StatisticViewerData * statistic_viewer_data, nbi = lttv_traceset_number(tsc->ts); for(i = 0 ; i < nbi ; i++) { - t_s = lttv_traceset_selector_get(ts_s,i); + t_s = lttv_traceset_selector_trace_get(ts_s,i); selected = lttv_trace_selector_get_selected(t_s); if(!selected) continue; tc = tsc->traces[i]; @@ -565,7 +612,7 @@ void statistic_add_context_hooks(StatisticViewerData * statistic_viewer_data, nb_tracefile = nb_control + nb_per_cpu; for(j = 0 ; j < nb_tracefile ; j++) { - tf_s = lttv_trace_selector_get(t_s,j); + tf_s = lttv_trace_selector_tracefile_get(t_s,j); selected = lttv_tracefile_selector_get_selected(tf_s); if(!selected) continue; @@ -581,7 +628,7 @@ void statistic_add_context_hooks(StatisticViewerData * statistic_viewer_data, } //add state and stats hooks - state_add_event_hooks_api(statistic_viewer_data->mw); + //state_add_event_hooks_api(statistic_viewer_data->mw); //it will be added in the main window stats_add_event_hooks_api(statistic_viewer_data->mw); } @@ -605,7 +652,7 @@ void statistic_remove_context_hooks(StatisticViewerData * statistic_viewer_data, nbi = lttv_traceset_number(tsc->ts); for(i = 0 ; i < nbi ; i++) { - t_s = lttv_traceset_selector_get(ts_s,i); + t_s = lttv_traceset_selector_trace_get(ts_s,i); selected = lttv_trace_selector_get_selected(t_s); if(!selected) continue; tc = tsc->traces[i]; @@ -617,7 +664,7 @@ void statistic_remove_context_hooks(StatisticViewerData * statistic_viewer_data, nb_tracefile = nb_control + nb_per_cpu; for(j = 0 ; j < nb_tracefile ; j++) { - tf_s = lttv_trace_selector_get(t_s,j); + tf_s = lttv_trace_selector_tracefile_get(t_s,j); selected = lttv_tracefile_selector_get_selected(tf_s); if(!selected) continue; @@ -633,7 +680,7 @@ void statistic_remove_context_hooks(StatisticViewerData * statistic_viewer_data, } //remove state and stats hooks - state_remove_event_hooks_api(statistic_viewer_data->mw); + //state_remove_event_hooks_api(statistic_viewer_data->mw); //it will be done in the main window stats_remove_event_hooks_api(statistic_viewer_data->mw); }