X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Fstatistics%2Fstatistics.c;h=7e781adbca6281d99ccc36cd9f4ef0191827fcb2;hb=0a06ab49ede668b34dee3ecf5406a4f1d37b6f97;hp=63ae23cf06256c27909d0966f4af58929336d408;hpb=0af2d5b161ebcd37e4e37d5e9ac079251ba747f7;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/statistics/statistics.c b/ltt/branches/poly/lttv/modules/gui/statistics/statistics.c index 63ae23cf..7e781adb 100644 --- a/ltt/branches/poly/lttv/modules/gui/statistics/statistics.c +++ b/ltt/branches/poly/lttv/modules/gui/statistics/statistics.c @@ -16,7 +16,12 @@ * MA 02111-1307, USA. */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include +#include #include #include @@ -34,6 +39,7 @@ #include #include +#include #include "hGuiStatisticInsert.xpm" @@ -52,13 +58,12 @@ static void request_background_data(StatisticViewerData *svd); GtkWidget *guistatistic_get_widget(StatisticViewerData *svd); //! Statistic Viewer's constructor hook -GtkWidget *h_gui_statistic(Tab *tab, LttvTracesetSelector * s, char * key); +GtkWidget *h_gui_statistic(LttvPlugin *plugin); //! Statistic Viewer's constructor -StatisticViewerData *gui_statistic(Tab *tab); +StatisticViewerData *gui_statistic(LttvPluginTab *ptab); //! Statistic Viewer's destructor void gui_statistic_destructor(StatisticViewerData *statistic_viewer_data); -void grab_focus(GtkWidget *widget, gpointer data); static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data); void statistic_destroy_hash_key(gpointer key); @@ -87,6 +92,7 @@ enum struct _StatisticViewerData{ Tab *tab; + LttvPluginTab *ptab; //LttvTracesetStats * stats; int size; @@ -109,6 +115,8 @@ struct _StatisticViewerData{ //hash GHashTable *statistic_hash; + + guint background_info_waiting; }; @@ -126,12 +134,16 @@ static gint background_ready(void *hook_data, void *call_data) Tab *tab = svd->tab; LttvTrace *trace = (LttvTrace*)call_data; - g_debug("statistics viewer : background computation data ready."); + svd->background_info_waiting--; - gtk_tree_store_clear (svd->store_m); + if(svd->background_info_waiting == 0) { + g_message("statistics viewer : background computation data ready."); - lttv_stats_sum_traceset(lttvwindow_get_traceset_stats(tab)); - show_traceset_stats(svd); + gtk_tree_store_clear (svd->store_m); + + lttv_stats_sum_traceset(lttvwindow_get_traceset_stats(tab)); + show_traceset_stats(svd); + } return 0; } @@ -147,11 +159,15 @@ static void request_background_data(StatisticViewerData *svd) gint num_traces = lttvwindowtraces_get_number(); gint i; LttvTrace *trace; + GtkTextBuffer* buf; LttvHooks *background_ready_hook = lttv_hooks_new(); lttv_hooks_add(background_ready_hook, background_ready, svd, LTTV_PRIO_DEFAULT); + svd->background_info_waiting = num_traces; + buf = gtk_text_view_get_buffer((GtkTextView*)svd->text_v); + gtk_text_buffer_set_text(buf,"", -1); for(i=0;itab), trace, "stats"); lttvwindowtraces_background_notify_queue(svd, trace, ltt_time_infinite, NULL, background_ready_hook); } else { /* in progress */ - lttvwindowtraces_background_notify_current(svd, trace, ltt_time_infinite, @@ -181,8 +196,16 @@ static void request_background_data(StatisticViewerData *svd) background_ready_hook); } + } else { + /* ready */ + lttv_hooks_call(background_ready_hook, NULL); } } + + if(num_traces == 0) { + svd->background_info_waiting = 1; + lttv_hooks_call(background_ready_hook, NULL); + } lttv_hooks_destroy(background_ready_hook); } @@ -225,9 +248,10 @@ gui_statistic_destructor(StatisticViewerData *statistic_viewer_data) * @return The widget created. */ GtkWidget * -h_gui_statistic(Tab *tab, LttvTracesetSelector * s, char * key) +h_gui_statistic(LttvPlugin *plugin) { - StatisticViewerData* statistic_viewer_data = gui_statistic(tab) ; + LttvPluginTab *ptab = LTTV_PLUGIN_TAB(plugin); + StatisticViewerData* statistic_viewer_data = gui_statistic(ptab) ; if(statistic_viewer_data) return guistatistic_get_widget(statistic_viewer_data); @@ -261,14 +285,15 @@ gboolean statistic_insert_traceset_stats(void * stats) * @return The Statistic viewer data created. */ StatisticViewerData * -gui_statistic(Tab *tab) +gui_statistic(LttvPluginTab *ptab) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; StatisticViewerData* statistic_viewer_data = g_new(StatisticViewerData,1); - + Tab *tab = ptab->tab; statistic_viewer_data->tab = tab; + statistic_viewer_data->ptab = ptab; // statistic_viewer_data->stats = // lttvwindow_get_traceset_stats(statistic_viewer_data->tab); // statistic_viewer_data->calculate_stats = @@ -277,12 +302,11 @@ gui_statistic(Tab *tab) lttvwindow_register_traceset_notify(statistic_viewer_data->tab, statistic_traceset_changed, statistic_viewer_data); - request_background_data(statistic_viewer_data); - + statistic_viewer_data->statistic_hash = g_hash_table_new_full(g_str_hash, g_str_equal, statistic_destroy_hash_key, - statistic_destroy_hash_data); + NULL); statistic_viewer_data->hpaned_v = gtk_hpaned_new(); statistic_viewer_data->store_m = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING); @@ -291,10 +315,6 @@ gui_statistic(Tab *tab) GTK_TREE_MODEL (statistic_viewer_data->store_m)); g_object_unref (G_OBJECT (statistic_viewer_data->store_m)); - g_signal_connect (G_OBJECT (statistic_viewer_data->tree_v), "grab-focus", - G_CALLBACK (grab_focus), - statistic_viewer_data); - // Setup the selection handler statistic_viewer_data->select_c = gtk_tree_view_get_selection (GTK_TREE_VIEW (statistic_viewer_data->tree_v)); gtk_tree_selection_set_mode (statistic_viewer_data->select_c, GTK_SELECTION_SINGLE); @@ -327,15 +347,15 @@ gui_statistic(Tab *tab) GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); statistic_viewer_data->text_v = gtk_text_view_new (); - g_signal_connect (G_OBJECT (statistic_viewer_data->text_v), "grab-focus", - G_CALLBACK (grab_focus), - statistic_viewer_data); gtk_text_view_set_editable(GTK_TEXT_VIEW(statistic_viewer_data->text_v),FALSE); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(statistic_viewer_data->text_v),FALSE); gtk_container_add (GTK_CONTAINER (statistic_viewer_data->scroll_win_text), statistic_viewer_data->text_v); gtk_paned_pack2(GTK_PANED(statistic_viewer_data->hpaned_v), statistic_viewer_data->scroll_win_text, TRUE, FALSE); + gtk_container_set_border_width( + GTK_CONTAINER(statistic_viewer_data->hpaned_v), 1); + gtk_widget_show(statistic_viewer_data->scroll_win_tree); gtk_widget_show(statistic_viewer_data->scroll_win_text); gtk_widget_show(statistic_viewer_data->tree_v); @@ -353,16 +373,11 @@ gui_statistic(Tab *tab) g_statistic_viewer_data_list, statistic_viewer_data); + request_background_data(statistic_viewer_data); + return statistic_viewer_data; } -void grab_focus(GtkWidget *widget, gpointer data) -{ - StatisticViewerData *statistic_viewer_data = (StatisticViewerData *)data; - Tab * tab = statistic_viewer_data->tab; - lttvwindow_report_focus(tab, guistatistic_get_widget(statistic_viewer_data)); -} - static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data) { @@ -403,15 +418,12 @@ void statistic_destroy_hash_key(gpointer key) g_free(key); } -void statistic_destroy_hash_data(gpointer data) -{ - // g_free(data); -} - +#ifdef DEBUG #include extern FILE *stdin; extern FILE *stdout; extern FILE *stderr; +#endif //DEBUG void show_traceset_stats(StatisticViewerData * statistic_viewer_data) { @@ -433,7 +445,7 @@ void show_traceset_stats(StatisticViewerData * statistic_viewer_data) ts = tscs->parent.parent.ts; nb = lttv_traceset_number(ts); - if(nb == 0)return; + if(nb == 0) return; gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter, @@ -448,11 +460,15 @@ void show_traceset_stats(StatisticViewerData * statistic_viewer_data) //show stats for all traces for(i = 0 ; i < nb ; i++) { tcs = (LttvTraceStats *)(LTTV_TRACESET_CONTEXT(tscs)->traces[i]); +#if 0 //FIXME desc = ltt_trace_system_description(tcs->parent.parent.t); - sprintf(trace_str, "Trace on system %s at time %d secs", + LttTime start_time = ltt_trace_system_description_trace_start_time(desc); + sprintf(trace_str, "Trace on system %s at time %lu.%09lu", ltt_trace_system_description_node_name(desc), - (ltt_trace_system_description_trace_start_time(desc)).tv_sec); - + start_time.tv_sec, + start_time.tv_nsec); +#endif //0 + sprintf(trace_str, g_quark_to_string(ltt_trace_name(tcs->parent.parent.t))); gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, &iter,NAME_COLUMN,trace_str,-1); path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter); @@ -474,6 +490,7 @@ void show_tree(StatisticViewerData * statistic_viewer_data, LttvAttributeName name; LttvAttributeValue value; LttvAttributeType type; + gboolean is_named; gchar * str, dir_str[PATH_LENGTH]; GtkTreePath * path; GtkTreeIter iter; @@ -481,17 +498,20 @@ void show_tree(StatisticViewerData * statistic_viewer_data, nb = lttv_attribute_get_number(stats); for(i = 0 ; i < nb ; i++) { - type = lttv_attribute_get(stats, i, &name, &value); + type = lttv_attribute_get(stats, i, &name, &value, &is_named); switch(type) { case LTTV_GOBJECT: if(LTTV_IS_ATTRIBUTE(*(value.v_gobject))) { - sprintf(dir_str, "%s", g_quark_to_string(name)); subtree = (LttvAttribute *)*(value.v_gobject); - gtk_tree_store_append (store, &iter, parent); - gtk_tree_store_set (store, &iter,NAME_COLUMN,dir_str,-1); - path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter); - str = gtk_tree_path_to_string (path); - g_hash_table_insert(statistic_viewer_data->statistic_hash, + if(is_named) + sprintf(dir_str, "%s", g_quark_to_string(name)); + else + sprintf(dir_str, "%u", name); + gtk_tree_store_append (store, &iter, parent); + gtk_tree_store_set (store, &iter,NAME_COLUMN,dir_str,-1); + path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter); + str = gtk_tree_path_to_string (path); + g_hash_table_insert(statistic_viewer_data->statistic_hash, (gpointer)str, subtree); show_tree(statistic_viewer_data, subtree, &iter); } @@ -506,18 +526,21 @@ void show_statistic(StatisticViewerData * statistic_viewer_data, LttvAttribute* stats, GtkTextBuffer* buf) { int i, nb , flag; - LttvAttribute *subtree; LttvAttributeName name; LttvAttributeValue value; LttvAttributeType type; + gboolean is_named; gchar type_name[PATH_LENGTH], type_value[PATH_LENGTH]; GtkTextIter text_iter; flag = 0; nb = lttv_attribute_get_number(stats); for(i = 0 ; i < nb ; i++) { - type = lttv_attribute_get(stats, i, &name, &value); - sprintf(type_name,"%s", g_quark_to_string(name)); + type = lttv_attribute_get(stats, i, &name, &value, &is_named); + if(is_named) + sprintf(type_name,"%s", g_quark_to_string(name)); + else + sprintf(type_name,"%u", name); type_value[0] = '\0'; switch(type) { case LTTV_INT: @@ -539,7 +562,7 @@ void show_statistic(StatisticViewerData * statistic_viewer_data, sprintf(type_value, " : %f\n", *value.v_double); break; case LTTV_TIME: - sprintf(type_value, " : %10u.%09u\n", value.v_time->tv_sec, + sprintf(type_value, " : %10lu.%09lu\n", value.v_time->tv_sec, value.v_time->tv_nsec); break; case LTTV_POINTER: @@ -675,7 +698,8 @@ void statistic_remove_context_hooks(StatisticViewerData * statistic_viewer_data, */ static void init() { - lttvwindow_register_constructor("/", + lttvwindow_register_constructor("guistatistics", + "/", "Insert Statistic Viewer", hGuiStatisticInsert_xpm, "Insert Statistic Viewer", @@ -699,7 +723,6 @@ void statistic_destroy_walk(gpointer data, gpointer user_data) * everything that has been registered in the gtkTraceSet API. */ static void destroy() { - int i; g_slist_foreach(g_statistic_viewer_data_list, statistic_destroy_walk, NULL ); g_slist_free(g_statistic_viewer_data_list);