diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2010-04-05 21:43:43 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-04-09 11:56:18 -0400 |
| commit | 338a694c0002d70349de3f0e7e47322467f72765 (patch) | |
| tree | 3899dfc9d361cf98b23fe01025983f1e80a1f3bd | |
| parent | 38b92d6b993327de864ef7182cebe530abc5f5c7 (diff) | |
kernelshark: Add loading and saving of filters
Hooked to the trace-view and trace-graph code to load and save
event and task filters.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
| -rw-r--r-- | kernel-shark.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/kernel-shark.c b/kernel-shark.c index d913ae0..7bc80fe 100644 --- a/kernel-shark.c +++ b/kernel-shark.c | |||
| @@ -158,6 +158,66 @@ load_clicked (gpointer data) | |||
| 158 | g_free(filename); | 158 | g_free(filename); |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | /* Callback for the clicked signal of the Load Filters button */ | ||
| 162 | static void | ||
| 163 | load_filters_clicked (gpointer data) | ||
| 164 | { | ||
| 165 | struct shark_info *info = data; | ||
| 166 | struct graph_info *ginfo = info->ginfo; | ||
| 167 | GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview); | ||
| 168 | struct tracecmd_xml_handle *handle; | ||
| 169 | gchar *filename; | ||
| 170 | |||
| 171 | filename = trace_get_file_dialog("Load Filters"); | ||
| 172 | if (!filename) | ||
| 173 | return; | ||
| 174 | |||
| 175 | handle = tracecmd_xml_open(filename); | ||
| 176 | if (!handle) | ||
| 177 | warning("Could not open %s", filename); | ||
| 178 | g_free(filename); | ||
| 179 | |||
| 180 | /* | ||
| 181 | * Just in case we are loading only a tree view filter, | ||
| 182 | * we will load the task filters for the tree view first. | ||
| 183 | * Then we load the graph next, and if the graph has | ||
| 184 | * trace filters, than those will override them. | ||
| 185 | */ | ||
| 186 | trace_view_load_filters(handle, trace_tree, | ||
| 187 | ginfo->task_filter, | ||
| 188 | ginfo->hide_tasks); | ||
| 189 | trace_graph_load_filters(ginfo, handle); | ||
| 190 | |||
| 191 | tracecmd_xml_close(handle); | ||
| 192 | } | ||
| 193 | |||
| 194 | /* Callback for the clicked signal of the Save Filters button */ | ||
| 195 | static void | ||
| 196 | save_filters_clicked (gpointer data) | ||
| 197 | { | ||
| 198 | struct shark_info *info = data; | ||
| 199 | struct graph_info *ginfo = info->ginfo; | ||
| 200 | struct tracecmd_xml_handle *handle; | ||
| 201 | GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview); | ||
| 202 | gchar *filename; | ||
| 203 | |||
| 204 | filename = trace_get_file_dialog("Save Filters"); | ||
| 205 | if (!filename) | ||
| 206 | return; | ||
| 207 | |||
| 208 | handle = tracecmd_xml_create(filename); | ||
| 209 | if (!handle) | ||
| 210 | warning("Could not create %s", filename); | ||
| 211 | g_free(filename); | ||
| 212 | |||
| 213 | trace_view_save_filters(handle, trace_tree, | ||
| 214 | ginfo->task_filter, ginfo->hide_tasks); | ||
| 215 | |||
| 216 | trace_graph_save_filters(ginfo, handle); | ||
| 217 | |||
| 218 | tracecmd_xml_close(handle); | ||
| 219 | } | ||
| 220 | |||
| 161 | /* Callback for the clicked signal of the Exit button */ | 221 | /* Callback for the clicked signal of the Exit button */ |
| 162 | static void | 222 | static void |
| 163 | exit_clicked (gpointer data) | 223 | exit_clicked (gpointer data) |
| @@ -769,6 +829,35 @@ void kernel_shark(int argc, char **argv) | |||
| 769 | gtk_widget_show(sub_item); | 829 | gtk_widget_show(sub_item); |
| 770 | 830 | ||
| 771 | 831 | ||
| 832 | /* --- File - Load Filter Option --- */ | ||
| 833 | |||
| 834 | sub_item = gtk_menu_item_new_with_label("Load filters"); | ||
| 835 | |||
| 836 | /* Add them to the menu */ | ||
| 837 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
| 838 | |||
| 839 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
| 840 | G_CALLBACK (load_filters_clicked), | ||
| 841 | (gpointer) info); | ||
| 842 | |||
| 843 | /* We do need to show menu items */ | ||
| 844 | gtk_widget_show(sub_item); | ||
| 845 | |||
| 846 | |||
| 847 | /* --- File - Save Filter Option --- */ | ||
| 848 | |||
| 849 | sub_item = gtk_menu_item_new_with_label("Save filters"); | ||
| 850 | |||
| 851 | /* Add them to the menu */ | ||
| 852 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
| 853 | |||
| 854 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
| 855 | G_CALLBACK (save_filters_clicked), | ||
| 856 | (gpointer) info); | ||
| 857 | |||
| 858 | /* We do need to show menu items */ | ||
| 859 | gtk_widget_show(sub_item); | ||
| 860 | |||
| 772 | /* --- File - Quit Option --- */ | 861 | /* --- File - Quit Option --- */ |
| 773 | 862 | ||
| 774 | sub_item = gtk_menu_item_new_with_label("Quit"); | 863 | sub_item = gtk_menu_item_new_with_label("Quit"); |
