* MA 02111-1307, USA.
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <glib.h>
+#include <string.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <ltt/ltt.h>
#include <ltt/event.h>
-#include <ltt/type.h>
#include <ltt/trace.h>
#include <lttv/lttv.h>
#include <lttvwindow/lttvwindow.h>
#include <lttvwindow/lttvwindowtraces.h>
+#include <lttvwindow/lttv_plugin_tab.h>
#include "hGuiStatisticInsert.xpm"
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);
struct _StatisticViewerData{
Tab *tab;
+ LttvPluginTab *ptab;
//LttvTracesetStats * stats;
int size;
//hash
GHashTable *statistic_hash;
+
+ guint background_info_waiting;
};
Tab *tab = svd->tab;
LttvTrace *trace = (LttvTrace*)call_data;
- g_debug("statistics viewer : background computation data ready.");
+ svd->background_info_waiting--;
+
+ if(svd->background_info_waiting == 0) {
+ g_message("statistics viewer : background computation data ready.");
- gtk_tree_store_clear (svd->store_m);
+ gtk_tree_store_clear (svd->store_m);
- lttv_stats_sum_traceset(lttvwindow_get_traceset_stats(tab));
- show_traceset_stats(svd);
+ lttv_stats_sum_traceset(lttvwindow_get_traceset_stats(tab),
+ ltt_time_infinite);
+ show_traceset_stats(svd);
+ }
return 0;
}
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;i<num_traces;i++) {
trace = lttvwindowtraces_get_trace(i);
* information. Happens when two viewers ask for it before servicing
* starts.
*/
- lttvwindowtraces_background_request_remove(trace, "stats");
- lttvwindowtraces_background_request_queue(trace,
- "stats");
+ if(!lttvwindowtraces_background_request_find(trace, "stats"))
+ lttvwindowtraces_background_request_queue(
+ main_window_get_widget(svd->tab), 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,
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);
}
* @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);
* @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 =
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);
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);
g_statistic_viewer_data_list,
statistic_viewer_data);
+ request_background_data(statistic_viewer_data);
+
return statistic_viewer_data;
}
g_free(key);
}
-void statistic_destroy_hash_data(gpointer data)
-{
- // g_free(data);
-}
-
+#ifdef DEBUG
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
+#endif //DEBUG
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,
//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);
LttvAttributeName name;
LttvAttributeValue value;
LttvAttributeType type;
+ gboolean is_named;
gchar * str, dir_str[PATH_LENGTH];
GtkTreePath * path;
GtkTreeIter iter;
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);
}
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:
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:
*/
static void init() {
- lttvwindow_register_constructor("/",
+ lttvwindow_register_constructor("guistatistics",
+ "/",
"Insert Statistic Viewer",
hGuiStatisticInsert_xpm,
"Insert Statistic Viewer",
* 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);