diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-01-07 17:05:55 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-01-07 17:05:55 -0500 |
commit | 21cc816a3c027f9ffe3466588dcc783702fdb642 (patch) | |
tree | 88c15e07572256b3cfd84cf3e7f6f817161bf10b | |
parent | 80020d43359030107f7f25e5b8b1f0d61d7fc6fa (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.c | 126 |
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 | ||
131 | static void event_filter_callback(gboolean accept, | 131 | /* Callback for the clicked signal of the Events filter button */ |
132 | gboolean all_events, | 132 | static void |
133 | gchar **systems, | 133 | list_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 | |||
158 | static void | ||
159 | graph_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 */ | ||
147 | static void | 176 | static void |
148 | events_clicked (gpointer data) | 177 | sync_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 | |||
202 | static void | ||
203 | sync_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 */ |