typedef struct _StatisticViewerData StatisticViewerData;
//! Statistic Viewer's constructor hook
-GtkWidget *h_gui_statistic(mainWindow *parent_window);
+GtkWidget *h_gui_statistic(MainWindow *parent_window, LttvTracesetSelector * s, char* key);
//! Statistic Viewer's constructor
-StatisticViewerData *gui_statistic(mainWindow *parent_window);
+StatisticViewerData *gui_statistic(MainWindow *parent_window,LttvTracesetSelector * s, char* key);
//! Statistic Viewer's destructor
void gui_statistic_destructor(StatisticViewerData *statistic_viewer_data);
void gui_statistic_free(StatisticViewerData *statistic_viewer_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,
LttvAttribute* stats, GtkTreeIter* parent);
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);
+
enum
{
NAME_COLUMN,
};
struct _StatisticViewerData{
- mainWindow * mw;
+ MainWindow * mw;
LttvTracesetStats * stats;
+ 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;
}
/* Register the toolbar insert button */
- ToolbarItemReg(hGuiStatisticInsert_xpm, "Insert Statistic Viewer", h_gui_statistic);
+ toolbar_item_reg(hGuiStatisticInsert_xpm, "Insert Statistic Viewer", h_gui_statistic);
/* Register the menu item insert entry */
- MenuItemReg("/", "Insert Statistic Viewer", h_gui_statistic);
+ menu_item_reg("/", "Insert Statistic Viewer", h_gui_statistic);
}
}
/* Unregister the toolbar insert button */
- ToolbarItemUnreg(h_gui_statistic);
+ toolbar_item_unreg(h_gui_statistic);
/* Unregister the menu item insert entry */
- MenuItemUnreg(h_gui_statistic);
+ menu_item_unreg(h_gui_statistic);
}
gui_statistic_free(StatisticViewerData *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);
}
* @return The widget created.
*/
GtkWidget *
-h_gui_statistic(mainWindow * parent_window)
+h_gui_statistic(MainWindow * parent_window, LttvTracesetSelector * s, char* key)
{
- StatisticViewerData* statistic_viewer_data = gui_statistic(parent_window) ;
+ StatisticViewerData* statistic_viewer_data = gui_statistic(parent_window, s, key) ;
if(statistic_viewer_data)
return statistic_viewer_data->hpaned_v;
* @return The Statistic viewer data created.
*/
StatisticViewerData *
-gui_statistic(mainWindow *parent_window)
+gui_statistic(MainWindow *parent_window, LttvTracesetSelector * s, char* key)
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
StatisticViewerData* statistic_viewer_data = g_new(StatisticViewerData,1);
statistic_viewer_data->mw = parent_window;
- statistic_viewer_data->stats = getTracesetStats(statistic_viewer_data->mw);
+ statistic_viewer_data->stats = get_traceset_stats_api(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,
statistic_destroy_hash_key,
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);
+
g_object_set_data_full(
G_OBJECT(statistic_viewer_data->hpaned_v),
"statistic_viewer_data",
g_statistic_viewer_data_list,
statistic_viewer_data);
- get_traceset_stats(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));
+ MainWindow * mw = statistic_viewer_data->mw;
+ set_focused_pane(mw, gtk_widget_get_parent(statistic_viewer_data->hpaned_v));
}
static void
// 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)
{
int i, nb;
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);
}
}
+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_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);
+ statistic_remove_context_hooks(statistic_viewer_data,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_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_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);
+ 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_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_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);
+ stats_remove_event_hooks_api(statistic_viewer_data->mw);
+}
+