aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-01-07 17:05:55 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-01-07 17:05:55 -0500
commit21cc816a3c027f9ffe3466588dcc783702fdb642 (patch)
tree88c15e07572256b3cfd84cf3e7f6f817161bf10b
parent80020d43359030107f7f25e5b8b1f0d61d7fc6fa (diff)
kernelshark: Separate event filtering from graph and list
Let the list and the graph have their own filters. While analyzing the data, I found it nice to be able to limit the graph but still see other events in the list. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--kernel-shark.c126
1 files changed, 110 insertions, 16 deletions
diff --git a/kernel-shark.c b/kernel-shark.c
index 274a13c..720833b 100644
--- a/kernel-shark.c
+++ b/kernel-shark.c
@@ -128,24 +128,53 @@ delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
128 return TRUE; 128 return TRUE;
129} 129}
130 130
131static void event_filter_callback(gboolean accept, 131/* Callback for the clicked signal of the Events filter button */
132 gboolean all_events, 132static void
133 gchar **systems, 133list_events_clicked (gpointer data)
134 gint *events,
135 gpointer data)
136{ 134{
137 struct shark_info *info = data; 135 struct shark_info *info = data;
136 GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview);
137 GtkTreeModel *model;
138 TraceViewStore *store;
139 gboolean all_events;
140 gchar **systems;
141 gint *events;
138 142
139 trace_view_event_filter_callback(accept, all_events, systems, 143 model = gtk_tree_view_get_model(trace_tree);
140 events, info->treeview); 144 if (!model)
145 return;
141 146
142 trace_graph_event_filter_callback(accept, all_events, systems, 147 store = TRACE_VIEW_STORE(model);
143 events, info->ginfo); 148
149 all_events = trace_view_store_get_all_events_enabled(store);
150 systems = trace_view_store_get_systems_enabled(store);
151 events = trace_view_store_get_events_enabled(store);
152
153 trace_filter_event_dialog(store->handle, all_events,
154 systems, events,
155 trace_view_event_filter_callback, info->treeview);
156}
157
158static void
159graph_events_clicked (gpointer data)
160{
161 struct shark_info *info = data;
162 struct graph_info *ginfo = info->ginfo;
163 gboolean all_events;
164 gchar **systems;
165 gint *events;
166
167 all_events = ginfo->all_events;
168 systems = ginfo->systems;
169 events = ginfo->event_ids;
170
171 trace_filter_event_dialog(info->handle, all_events,
172 systems, events,
173 trace_graph_event_filter_callback, ginfo);
144} 174}
145 175
146/* Callback for the clicked signal of the Events filter button */
147static void 176static void
148events_clicked (gpointer data) 177sync_graph_events_to_list_clicked (gpointer data)
149{ 178{
150 struct shark_info *info = data; 179 struct shark_info *info = data;
151 GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview); 180 GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview);
@@ -165,9 +194,26 @@ events_clicked (gpointer data)
165 systems = trace_view_store_get_systems_enabled(store); 194 systems = trace_view_store_get_systems_enabled(store);
166 events = trace_view_store_get_events_enabled(store); 195 events = trace_view_store_get_events_enabled(store);
167 196
168 trace_filter_event_dialog(store->handle, all_events, 197 trace_graph_event_filter_callback(TRUE, all_events, systems,
169 systems, events, 198 events, info->ginfo);
170 event_filter_callback, info); 199}
200
201
202static void
203sync_list_events_to_graph_clicked (gpointer data)
204{
205 struct shark_info *info = data;
206 struct graph_info *ginfo = info->ginfo;
207 gboolean all_events;
208 gchar **systems;
209 gint *events;
210
211 all_events = ginfo->all_events;
212 systems = ginfo->systems;
213 events = ginfo->event_ids;
214
215 trace_view_event_filter_callback(TRUE, all_events, systems,
216 events, info->treeview);
171} 217}
172 218
173/* Callback for the clicked signal of the CPUs filter button */ 219/* Callback for the clicked signal of the CPUs filter button */
@@ -547,16 +593,64 @@ void kernel_shark(int argc, char **argv)
547 menu = gtk_menu_new(); /* Don't need to show menus */ 593 menu = gtk_menu_new(); /* Don't need to show menus */
548 594
549 595
596 /* --- Filter - List Events Option --- */
597
598 sub_item = gtk_menu_item_new_with_label("list events");
599
600 /* Add them to the menu */
601 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
602
603 /* We can attach the Quit menu item to our exit function */
604 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
605 G_CALLBACK (list_events_clicked),
606 (gpointer) info);
607
608 /* We do need to show menu items */
609 gtk_widget_show(sub_item);
610
611
612 /* --- Filter - Events Option --- */
613
614 sub_item = gtk_menu_item_new_with_label("graph events");
615
616 /* Add them to the menu */
617 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
618
619 /* We can attach the Quit menu item to our exit function */
620 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
621 G_CALLBACK (graph_events_clicked),
622 (gpointer) info);
623
624 /* We do need to show menu items */
625 gtk_widget_show(sub_item);
626
627
628 /* --- Filter - Events Option --- */
629
630 sub_item = gtk_menu_item_new_with_label("sync graph events to list");
631
632 /* Add them to the menu */
633 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
634
635 /* We can attach the Quit menu item to our exit function */
636 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
637 G_CALLBACK (sync_graph_events_to_list_clicked),
638 (gpointer) info);
639
640 /* We do need to show menu items */
641 gtk_widget_show(sub_item);
642
643
550 /* --- Filter - Events Option --- */ 644 /* --- Filter - Events Option --- */
551 645
552 sub_item = gtk_menu_item_new_with_label("events"); 646 sub_item = gtk_menu_item_new_with_label("sync list events to graph");
553 647
554 /* Add them to the menu */ 648 /* Add them to the menu */
555 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); 649 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
556 650
557 /* We can attach the Quit menu item to our exit function */ 651 /* We can attach the Quit menu item to our exit function */
558 g_signal_connect_swapped (G_OBJECT (sub_item), "activate", 652 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
559 G_CALLBACK (events_clicked), 653 G_CALLBACK (sync_list_events_to_graph_clicked),
560 (gpointer) info); 654 (gpointer) info);
561 655
562 /* We do need to show menu items */ 656 /* We do need to show menu items */