#include "../icons/hGuiStatisticInsert.xpm"
+#define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format)
+#define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format)
+
#define PATH_LENGTH 256
-static LttvModule *Main_Win_Module;
+static LttvModule *statistic_main_win_module;
+static GPtrArray * statistic_traceset;
/** Array containing instanced objects. Used when module is unloaded */
-GSList *gStatistic_Viewer_Data_List = NULL ;
+static GSList *g_statistic_viewer_data_list = NULL ;
typedef struct _StatisticViewerData StatisticViewerData;
//! Statistic Viewer's constructor hook
-GtkWidget *hGuiStatistic(mainWindow *pmParentWindow);
+GtkWidget *h_gui_statistic(MainWindow *parent_window, LttvTracesetSelector * s, char* key);
//! Statistic Viewer's constructor
-StatisticViewerData *GuiStatistic(mainWindow *pmParentWindow);
+StatisticViewerData *gui_statistic(MainWindow *parent_window,LttvTracesetSelector * s, char* key);
//! Statistic Viewer's destructor
-void GuiStatistic_Destructor(StatisticViewerData *Statistic_Viewer_Data);
-void GuiStatistic_free(StatisticViewerData *Statistic_Viewer_Data);
+void gui_statistic_destructor(StatisticViewerData *statistic_viewer_data);
+void gui_statistic_free(StatisticViewerData *statistic_viewer_data);
void grab_focus(GtkWidget *widget, gpointer data);
static void tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data);
-void Destroy_hash_key(gpointer key);
-void Destroy_hash_data(gpointer data);
+void statistic_destroy_hash_key(gpointer key);
+void statistic_destroy_hash_data(gpointer data);
-void get_traceset_stats(StatisticViewerData * Statistic_Viewer_Data);
-void show_traceset_stats(StatisticViewerData * Statistic_Viewer_Data);
-void show_tree(StatisticViewerData * Statistic_Viewer_Data,
+void show_traceset_stats(StatisticViewerData * statistic_viewer_data);
+void show_tree(StatisticViewerData * statistic_viewer_data,
LttvAttribute* stats, GtkTreeIter* parent);
-void show_statistic(StatisticViewerData * Statistic_Viewer_Data,
+void show_statistic(StatisticViewerData * statistic_viewer_data,
LttvAttribute* stats, GtkTextBuffer* buf);
+/** hook functions for update time interval, current time ... */
+gboolean statistic_update_time_window(void * hook_data, void * call_data);
+gboolean statistic_show_viewer(void * hook_data, void * call_data);
+gboolean statistic_traceset_changed(void * hook_data, void * call_data);
+void statistic_add_context_hooks(StatisticViewerData * statistic_viewer_data,
+ LttvTracesetContext * tsc);
+void statistic_remove_context_hooks(StatisticViewerData * statistic_viewer_data,
+ LttvTracesetContext * tsc);
+
+gboolean statistic_insert_traceset_stats(void * stats);
+
enum
{
NAME_COLUMN,
};
struct _StatisticViewerData{
- mainWindow * mw;
+ MainWindow * mw;
LttvTracesetStats * stats;
+ gboolean calculate_stats;
+ int size;
- GtkWidget * HPaned_V;
- GtkTreeStore * Store_M;
- GtkWidget * Tree_V;
+ TimeInterval time_span;
+ gboolean shown; //indicate if the statistic is shown or not
+ char * filter_key;
+
+ GtkWidget * hpaned_v;
+ GtkTreeStore * store_m;
+ GtkWidget * tree_v;
//scroll window containing Tree View
- GtkWidget * Scroll_Win_Tree;
+ GtkWidget * scroll_win_tree;
- GtkWidget * Text_V;
+ GtkWidget * text_v;
//scroll window containing Text View
- GtkWidget * Scroll_Win_Text;
+ GtkWidget * scroll_win_text;
// Selection handler
- GtkTreeSelection *Select_C;
+ GtkTreeSelection *select_c;
//hash
- GHashTable *Statistic_Hash;
+ GHashTable *statistic_hash;
};
*/
G_MODULE_EXPORT void init(LttvModule *self, int argc, char *argv[]) {
- Main_Win_Module = lttv_module_require(self, "mainwin", argc, argv);
+ statistic_main_win_module = lttv_module_require(self, "mainwin", argc, argv);
- if(Main_Win_Module == NULL){
+ if(statistic_main_win_module == NULL){
g_critical("Can't load Statistic Viewer : missing mainwin\n");
return;
}
-
- g_critical("GUI Statistic Viewer init()");
-
+
+ statistic_traceset = g_ptr_array_new ();
+
/* Register the toolbar insert button */
- ToolbarItemReg(hGuiStatisticInsert_xpm, "Insert Statistic Viewer", hGuiStatistic);
+ toolbar_item_reg(hGuiStatisticInsert_xpm, "Insert Statistic Viewer", h_gui_statistic);
/* Register the menu item insert entry */
- MenuItemReg("/", "Insert Statistic Viewer", hGuiStatistic);
+ menu_item_reg("/", "Insert Statistic Viewer", h_gui_statistic);
}
-void destroy_walk(gpointer data, gpointer user_data)
+void statistic_destroy_walk(gpointer data, gpointer user_data)
{
- GuiStatistic_Destructor((StatisticViewerData*)data);
+ gui_statistic_destructor((StatisticViewerData*)data);
}
/**
G_MODULE_EXPORT void destroy() {
int i;
- StatisticViewerData *Statistic_Viewer_Data;
-
- g_critical("GUI Statistic Viewer destroy()");
-
- g_slist_foreach(gStatistic_Viewer_Data_List, destroy_walk, NULL );
-
- g_slist_free(gStatistic_Viewer_Data_List);
+ if(g_statistic_viewer_data_list){
+ 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 */
- ToolbarItemUnreg(hGuiStatistic);
+ toolbar_item_unreg(h_gui_statistic);
/* Unregister the menu item insert entry */
- MenuItemUnreg(hGuiStatistic);
+ menu_item_unreg(h_gui_statistic);
}
void
-GuiStatistic_free(StatisticViewerData *Statistic_Viewer_Data)
+gui_statistic_free(StatisticViewerData *statistic_viewer_data)
{
- if(Statistic_Viewer_Data){
- g_hash_table_destroy(Statistic_Viewer_Data->Statistic_Hash);
- gStatistic_Viewer_Data_List = g_slist_remove(gStatistic_Viewer_Data_List, Statistic_Viewer_Data);
- g_warning("Delete Statistic data\n");
- g_free(Statistic_Viewer_Data);
+ if(statistic_viewer_data){
+ unreg_update_time_window(statistic_update_time_window,statistic_viewer_data, statistic_viewer_data->mw);
+ unreg_show_viewer(statistic_show_viewer,statistic_viewer_data, statistic_viewer_data->mw);
+ unreg_update_traceset(statistic_traceset_changed,statistic_viewer_data, statistic_viewer_data->mw);
+
+ g_hash_table_destroy(statistic_viewer_data->statistic_hash);
+ g_free(statistic_viewer_data->filter_key);
+ g_statistic_viewer_data_list = g_slist_remove(g_statistic_viewer_data_list, statistic_viewer_data);
+ g_free(statistic_viewer_data);
}
}
void
-GuiStatistic_Destructor(StatisticViewerData *Statistic_Viewer_Data)
+gui_statistic_destructor(StatisticViewerData *statistic_viewer_data)
{
/* May already been done by GTK window closing */
- if(GTK_IS_WIDGET(Statistic_Viewer_Data->HPaned_V)){
- gtk_widget_destroy(Statistic_Viewer_Data->HPaned_V);
- Statistic_Viewer_Data = NULL;
+ if(GTK_IS_WIDGET(statistic_viewer_data->hpaned_v)){
+ gtk_widget_destroy(statistic_viewer_data->hpaned_v);
+ statistic_viewer_data = NULL;
}
-
- GuiStatistic_free(Statistic_Viewer_Data);
+ //gui_statistic_free(statistic_viewer_data);
}
*
* This constructor is given as a parameter to the menuitem and toolbar button
* registration. It creates the list.
- * @param pmParentWindow A pointer to the parent window.
+ * @param parent_window A pointer to the parent window.
* @return The widget created.
*/
GtkWidget *
-hGuiStatistic(mainWindow * pmParentWindow)
+h_gui_statistic(MainWindow * parent_window, LttvTracesetSelector * s, char* key)
{
- StatisticViewerData* Statistic_Viewer_Data = GuiStatistic(pmParentWindow) ;
+ StatisticViewerData* statistic_viewer_data = gui_statistic(parent_window, s, key) ;
- if(Statistic_Viewer_Data)
- return Statistic_Viewer_Data->HPaned_V;
+ if(statistic_viewer_data)
+ return statistic_viewer_data->hpaned_v;
else return NULL;
}
+gboolean statistic_insert_traceset_stats(void * stats)
+{
+ int i, len;
+ gpointer s;
+
+ len = statistic_traceset->len;
+ for(i=0;i<len;i++){
+ s = g_ptr_array_index(statistic_traceset, i);
+ if(s == stats) break;
+ }
+ if(i==len){
+ g_ptr_array_add(statistic_traceset, stats);
+ return TRUE;
+ }
+ return FALSE;
+}
+
/**
* Statistic Viewer's constructor
*
* @return The Statistic viewer data created.
*/
StatisticViewerData *
-GuiStatistic(mainWindow *pmParentWindow)
+gui_statistic(MainWindow *parent_window, LttvTracesetSelector * s, char* key)
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
- StatisticViewerData* Statistic_Viewer_Data = g_new(StatisticViewerData,1);
+ StatisticViewerData* statistic_viewer_data = g_new(StatisticViewerData,1);
+
+ statistic_viewer_data->mw = 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);
- Statistic_Viewer_Data->mw = pmParentWindow;
- Statistic_Viewer_Data->stats = getTracesetStats(Statistic_Viewer_Data->mw);
+ 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);
+ reg_update_traceset(statistic_traceset_changed,statistic_viewer_data, statistic_viewer_data->mw);
- Statistic_Viewer_Data->Statistic_Hash = g_hash_table_new_full(g_str_hash, g_str_equal,
- Destroy_hash_key, Destroy_hash_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);
- Statistic_Viewer_Data->HPaned_V = gtk_hpaned_new();
- Statistic_Viewer_Data->Store_M = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING);
- Statistic_Viewer_Data->Tree_V = gtk_tree_view_new_with_model (GTK_TREE_MODEL (Statistic_Viewer_Data->Store_M));
- g_object_unref (G_OBJECT (Statistic_Viewer_Data->Store_M));
+ statistic_viewer_data->hpaned_v = gtk_hpaned_new();
+ statistic_viewer_data->store_m = gtk_tree_store_new (N_COLUMNS, G_TYPE_STRING);
+ statistic_viewer_data->tree_v = gtk_tree_view_new_with_model (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_signal_connect (G_OBJECT (statistic_viewer_data->tree_v), "grab-focus",
G_CALLBACK (grab_focus),
- Statistic_Viewer_Data);
+ 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);
- g_signal_connect (G_OBJECT (Statistic_Viewer_Data->Select_C), "changed",
+ 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);
+ g_signal_connect (G_OBJECT (statistic_viewer_data->select_c), "changed",
G_CALLBACK (tree_selection_changed_cb),
- Statistic_Viewer_Data);
+ statistic_viewer_data);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Statistic Name",
NULL);
gtk_tree_view_column_set_alignment (column, 0.0);
// gtk_tree_view_column_set_fixed_width (column, 45);
- gtk_tree_view_append_column (GTK_TREE_VIEW (Statistic_Viewer_Data->Tree_V), column);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (statistic_viewer_data->tree_v), column);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW (Statistic_Viewer_Data->Tree_V), FALSE);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW (statistic_viewer_data->tree_v), FALSE);
- Statistic_Viewer_Data->Scroll_Win_Tree = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Statistic_Viewer_Data->Scroll_Win_Tree),
+ statistic_viewer_data->scroll_win_tree = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(statistic_viewer_data->scroll_win_tree),
GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (Statistic_Viewer_Data->Scroll_Win_Tree), Statistic_Viewer_Data->Tree_V);
- gtk_paned_pack1(GTK_PANED(Statistic_Viewer_Data->HPaned_V),Statistic_Viewer_Data->Scroll_Win_Tree, TRUE, FALSE);
- gtk_paned_set_position(GTK_PANED(Statistic_Viewer_Data->HPaned_V), 160);
+ gtk_container_add (GTK_CONTAINER (statistic_viewer_data->scroll_win_tree), statistic_viewer_data->tree_v);
+ gtk_paned_pack1(GTK_PANED(statistic_viewer_data->hpaned_v),statistic_viewer_data->scroll_win_tree, TRUE, FALSE);
+ gtk_paned_set_position(GTK_PANED(statistic_viewer_data->hpaned_v), 160);
- Statistic_Viewer_Data->Scroll_Win_Text = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(Statistic_Viewer_Data->Scroll_Win_Text),
+ statistic_viewer_data->scroll_win_text = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(statistic_viewer_data->scroll_win_text),
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",
+ 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);
+ 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_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);
+ gtk_widget_show(statistic_viewer_data->text_v);
+ gtk_widget_show(statistic_viewer_data->hpaned_v);
+
+ //get the life span of the traceset and set the upper of the scroll bar
+ get_traceset_time_span(statistic_viewer_data->mw, &statistic_viewer_data->time_span);
+
+ statistic_viewer_data->shown = FALSE;
+ statistic_viewer_data->filter_key = g_strdup(key);
+ g_object_set_data(
+ G_OBJECT(statistic_viewer_data->hpaned_v),
+ statistic_viewer_data->filter_key,
+ s);
+
+ g_object_set_data(
+ G_OBJECT(statistic_viewer_data->hpaned_v),
+ TRACESET_TIME_SPAN,
+ &statistic_viewer_data->time_span);
- 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);
+ if(statistic_viewer_data->calculate_stats){
+ if(lttv_stats_load_statistics(statistic_viewer_data->stats))
+ statistic_viewer_data->calculate_stats = FALSE;
+ }
- 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);
- gtk_widget_show(Statistic_Viewer_Data->Text_V);
- gtk_widget_show(Statistic_Viewer_Data->HPaned_V);
+ 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),
- "Statistic_Viewer_Data",
- Statistic_Viewer_Data,
- (GDestroyNotify)GuiStatistic_free);
+ G_OBJECT(statistic_viewer_data->hpaned_v),
+ "statistic_viewer_data",
+ statistic_viewer_data,
+ (GDestroyNotify)gui_statistic_free);
/* Add the object's information to the module's array */
- gStatistic_Viewer_Data_List = g_slist_append(gStatistic_Viewer_Data_List, Statistic_Viewer_Data);
+ g_statistic_viewer_data_list = g_slist_append(
+ g_statistic_viewer_data_list,
+ statistic_viewer_data);
- get_traceset_stats(Statistic_Viewer_Data);
-
- return Statistic_Viewer_Data;
+ return statistic_viewer_data;
}
void grab_focus(GtkWidget *widget, gpointer data)
{
- StatisticViewerData *Statistic_Viewer_Data = (StatisticViewerData *)data;
- mainWindow * mw = Statistic_Viewer_Data->mw;
- SetFocusedPane(mw, gtk_widget_get_parent(Statistic_Viewer_Data->HPaned_V));
+ StatisticViewerData *statistic_viewer_data = (StatisticViewerData *)data;
+ MainWindow * mw = statistic_viewer_data->mw;
+ set_focused_pane(mw, gtk_widget_get_parent(statistic_viewer_data->hpaned_v));
}
static void
tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data)
{
- StatisticViewerData *Statistic_Viewer_Data = (StatisticViewerData*)data;
+ StatisticViewerData *statistic_viewer_data = (StatisticViewerData*)data;
GtkTreeIter iter;
- GtkTreeModel *model = GTK_TREE_MODEL(Statistic_Viewer_Data->Store_M);
- gchar *Event;
+ GtkTreeModel *model = GTK_TREE_MODEL(statistic_viewer_data->store_m);
+ gchar *event;
GtkTextBuffer* buf;
gchar * str;
GtkTreePath * path;
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
- gtk_tree_model_get (model, &iter, NAME_COLUMN, &Event, -1);
+ gtk_tree_model_get (model, &iter, NAME_COLUMN, &event, -1);
path = gtk_tree_model_get_path(GTK_TREE_MODEL(model),&iter);
str = gtk_tree_path_to_string (path);
- stats = (LttvAttribute*)g_hash_table_lookup (Statistic_Viewer_Data->Statistic_Hash,str);
+ stats = (LttvAttribute*)g_hash_table_lookup (statistic_viewer_data->statistic_hash,str);
g_free(str);
- buf = gtk_text_view_get_buffer((GtkTextView*)Statistic_Viewer_Data->Text_V);
+ buf = gtk_text_view_get_buffer((GtkTextView*)statistic_viewer_data->text_v);
gtk_text_buffer_set_text(buf,"Statistic for '", -1);
gtk_text_buffer_get_end_iter(buf, &text_iter);
- gtk_text_buffer_insert(buf, &text_iter, Event, strlen(Event));
+ gtk_text_buffer_insert(buf, &text_iter, event, strlen(event));
gtk_text_buffer_get_end_iter(buf, &text_iter);
gtk_text_buffer_insert(buf, &text_iter, "' :\n\n",5);
- show_statistic(Statistic_Viewer_Data, stats, buf);
+ show_statistic(statistic_viewer_data, stats, buf);
- g_free (Event);
+ g_free (event);
}
}
-void Destroy_hash_key(gpointer key)
+void statistic_destroy_hash_key(gpointer key)
{
g_free(key);
}
-void Destroy_hash_data(gpointer data)
+void statistic_destroy_hash_data(gpointer data)
{
// g_free(data);
}
-void get_traceset_stats(StatisticViewerData * Statistic_Viewer_Data)
-{
- LttTime start, end;
-
- start.tv_sec = 0;
- start.tv_nsec = 0;
- end.tv_sec = G_MAXULONG;
- end.tv_nsec = G_MAXULONG;
-
- stateAddEventHooks(Statistic_Viewer_Data->mw);
- statsAddEventHooks(Statistic_Viewer_Data->mw);
-
- processTraceset(Statistic_Viewer_Data->mw, start, end, G_MAXULONG);
-
- stateRemoveEventHooks(Statistic_Viewer_Data->mw);
- statsRemoveEventHooks(Statistic_Viewer_Data->mw);
-
- //establish tree view for stats
- show_traceset_stats(Statistic_Viewer_Data);
-}
-
-void show_traceset_stats(StatisticViewerData * Statistic_Viewer_Data)
+void show_traceset_stats(StatisticViewerData * statistic_viewer_data)
{
int i, nb;
LttvTraceset *ts;
LttvTraceStats *tcs;
LttSystemDescription *desc;
- LttvTracesetStats * tscs = Statistic_Viewer_Data->stats;
+ LttvTracesetStats * tscs = statistic_viewer_data->stats;
gchar * str, trace_str[PATH_LENGTH];
GtkTreePath * path;
GtkTreeIter iter;
- GtkTreeStore * store = Statistic_Viewer_Data->Store_M;
+ GtkTreeStore * store = statistic_viewer_data->store_m;
if(tscs->stats == NULL) return;
-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,
+ g_hash_table_insert(statistic_viewer_data->statistic_hash,
(gpointer)str, tscs->stats);
- show_tree(Statistic_Viewer_Data, tscs->stats, &iter);
+ show_tree(statistic_viewer_data, tscs->stats, &iter);
//show stats for all traces
ts = tscs->parent.parent.ts;
tcs = (LttvTraceStats *)(LTTV_TRACESET_CONTEXT(tscs)->traces[i]);
desc = ltt_trace_system_description(tcs->parent.parent.t);
sprintf(trace_str, "Trace on system %s at time %d secs",
- desc->node_name,desc->trace_start.tv_sec);
+ ltt_trace_system_description_node_name(desc),
+ (ltt_trace_system_description_trace_start_time(desc)).tv_sec);
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);
str = gtk_tree_path_to_string (path);
- g_hash_table_insert(Statistic_Viewer_Data->Statistic_Hash,
+ g_hash_table_insert(statistic_viewer_data->statistic_hash,
(gpointer)str,tcs->stats);
- show_tree(Statistic_Viewer_Data, tcs->stats, &iter);
+ show_tree(statistic_viewer_data, tcs->stats, &iter);
}
}
-void show_tree(StatisticViewerData * Statistic_Viewer_Data,
+void show_tree(StatisticViewerData * statistic_viewer_data,
LttvAttribute* stats, GtkTreeIter* parent)
{
int i, nb;
gchar * str, dir_str[PATH_LENGTH];
GtkTreePath * path;
GtkTreeIter iter;
- GtkTreeStore * store = Statistic_Viewer_Data->Store_M;
+ GtkTreeStore * store = statistic_viewer_data->store_m;
nb = lttv_attribute_get_number(stats);
for(i = 0 ; i < nb ; i++) {
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,
+ g_hash_table_insert(statistic_viewer_data->statistic_hash,
(gpointer)str, subtree);
- show_tree(Statistic_Viewer_Data, subtree, &iter);
+ show_tree(statistic_viewer_data, subtree, &iter);
}
break;
default:
}
}
-void show_statistic(StatisticViewerData * Statistic_Viewer_Data,
+void show_statistic(StatisticViewerData * statistic_viewer_data,
LttvAttribute* stats, GtkTextBuffer* buf)
{
int i, nb , flag;
}
}
+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);
+ }
+ return FALSE;
+}
+
+gboolean statistic_show_viewer(void * hook_data, void * call_data)
+{
+ StatisticViewerData *statistic_viewer_data = (StatisticViewerData*) hook_data;
+ LttvTracesetContext * tsc = get_traceset_context(statistic_viewer_data->mw);
+
+ if(statistic_viewer_data->shown == FALSE){
+ statistic_viewer_data->shown = TRUE;
+ show_traceset_stats(statistic_viewer_data);
+ if(statistic_viewer_data->calculate_stats){
+ statistic_remove_context_hooks(statistic_viewer_data,tsc);
+ lttv_stats_save_statistics((LttvTracesetStats*)tsc);
+ }
+ }
+
+ return FALSE;
+}
+
+gboolean statistic_traceset_changed(void * hook_data, void * call_data)
+{
+ StatisticViewerData *statistic_viewer_data = (StatisticViewerData*) hook_data;
+
+ // gtk_tree_store_clear (statistic_viewer_data->store_m);
+ // statistic_viewer_data->shown = FALSE;
+
+ return FALSE;
+}
+
+void statistic_add_context_hooks(StatisticViewerData * statistic_viewer_data,
+ LttvTracesetContext * tsc)
+{
+ gint i, j, nbi, nb_tracefile, nb_control, nb_per_cpu;
+ LttTrace *trace;
+ LttvTraceContext *tc;
+ LttvTracefileContext *tfc;
+ LttvTracesetSelector * ts_s;
+ LttvTraceSelector * t_s;
+ LttvTracefileSelector * tf_s;
+ gboolean selected;
+
+ ts_s = (LttvTracesetSelector*)g_object_get_data(G_OBJECT(statistic_viewer_data->hpaned_v),
+ statistic_viewer_data->filter_key);
+
+ //if there are hooks for traceset, add them here
+
+ nbi = lttv_traceset_number(tsc->ts);
+ for(i = 0 ; i < nbi ; 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];
+ trace = tc->t;
+ //if there are hooks for trace, add them here
+
+ nb_control = ltt_trace_control_tracefile_number(trace);
+ nb_per_cpu = ltt_trace_per_cpu_tracefile_number(trace);
+ nb_tracefile = nb_control + nb_per_cpu;
+
+ for(j = 0 ; j < nb_tracefile ; j++) {
+ tf_s = lttv_trace_selector_tracefile_get(t_s,j);
+ selected = lttv_tracefile_selector_get_selected(tf_s);
+ if(!selected) continue;
+
+ if(j < nb_control)
+ tfc = tc->control_tracefiles[j];
+ else
+ tfc = tc->per_cpu_tracefiles[j - nb_control];
+
+ //if there are hooks for tracefile, add them here
+ // lttv_tracefile_context_add_hooks(tfc, NULL,NULL,NULL,NULL,
+ // statistic_viewer_data->before_event_hooks,NULL);
+ }
+ }
+
+ //add state and stats hooks
+ // state_add_event_hooks_api(statistic_viewer_data->mw); //it is added in the main window
+ stats_add_event_hooks_api(statistic_viewer_data->mw);
+
+}
+
+void statistic_remove_context_hooks(StatisticViewerData * statistic_viewer_data,
+ LttvTracesetContext * tsc)
+{
+ gint i, j, nbi, nb_tracefile, nb_control, nb_per_cpu;
+ LttTrace *trace;
+ LttvTraceContext *tc;
+ LttvTracefileContext *tfc;
+ LttvTracesetSelector * ts_s;
+ LttvTraceSelector * t_s;
+ LttvTracefileSelector * tf_s;
+ gboolean selected;
+
+ ts_s = (LttvTracesetSelector*)g_object_get_data(G_OBJECT(statistic_viewer_data->hpaned_v),
+ statistic_viewer_data->filter_key);
+
+ //if there are hooks for traceset, remove them here
+
+ nbi = lttv_traceset_number(tsc->ts);
+ for(i = 0 ; i < nbi ; 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];
+ trace = tc->t;
+ //if there are hooks for trace, remove them here
+
+ nb_control = ltt_trace_control_tracefile_number(trace);
+ nb_per_cpu = ltt_trace_per_cpu_tracefile_number(trace);
+ nb_tracefile = nb_control + nb_per_cpu;
+
+ for(j = 0 ; j < nb_tracefile ; j++) {
+ tf_s = lttv_trace_selector_tracefile_get(t_s,j);
+ selected = lttv_tracefile_selector_get_selected(tf_s);
+ if(!selected) continue;
+
+ if(j < nb_control)
+ tfc = tc->control_tracefiles[j];
+ else
+ tfc = tc->per_cpu_tracefiles[j - nb_control];
+
+ //if there are hooks for tracefile, remove them here
+ // lttv_tracefile_context_remove_hooks(tfc, NULL,NULL,NULL,NULL,
+ // statistic_viewer_data->before_event_hooks,NULL);
+ }
+ }
+
+ //remove state and stats hooks
+ // state_remove_event_hooks_api(statistic_viewer_data->mw); //it is done in the main window
+ stats_remove_event_hooks_api(statistic_viewer_data->mw);
+}
+