diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-06-10 16:15:19 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-06-10 16:15:19 -0400 |
commit | ce6dcdc247fc6194566360e74fcb986fa656043a (patch) | |
tree | 58975bf85651d65c58bb74879c497d1048370b2f | |
parent | 66256925536b9757da1f0cb2bc2230b6478dbeaf (diff) |
kernelshark: Fix the xml save/load to handle separate task filters
Update the save/load of the filters to handle the change to make the
List and Graph have separate task filters.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | kernel-shark.c | 129 | ||||
-rw-r--r-- | trace-filter.c | 6 | ||||
-rw-r--r-- | trace-filter.h | 2 | ||||
-rw-r--r-- | trace-graph-main.c | 8 | ||||
-rw-r--r-- | trace-view-main.c | 8 | ||||
-rw-r--r-- | trace-xml.c | 16 | ||||
-rw-r--r-- | trace-xml.h | 2 |
7 files changed, 132 insertions, 39 deletions
diff --git a/kernel-shark.c b/kernel-shark.c index e0ab1ed..91ecf82 100644 --- a/kernel-shark.c +++ b/kernel-shark.c | |||
@@ -223,6 +223,38 @@ static void update_title(GtkWidget *window, const gchar *file) | |||
223 | g_free(str); | 223 | g_free(str); |
224 | } | 224 | } |
225 | 225 | ||
226 | static void unsync_task_filters(struct shark_info *info) | ||
227 | { | ||
228 | info->sync_task_filters = 0; | ||
229 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->task_sync_menu), | ||
230 | "Sync Graph and List Task Filters"); | ||
231 | |||
232 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_task_menu), | ||
233 | "graph tasks"); | ||
234 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_hide_task_menu), | ||
235 | "graph hide tasks"); | ||
236 | gtk_widget_show(info->list_task_menu); | ||
237 | gtk_widget_show(info->list_hide_task_menu); | ||
238 | |||
239 | /* The list now uses its own hash */ | ||
240 | info->list_task_filter = filter_task_hash_copy(info->ginfo->task_filter); | ||
241 | info->list_hide_tasks = filter_task_hash_copy(info->ginfo->hide_tasks); | ||
242 | } | ||
243 | |||
244 | static void unsync_event_filters(struct shark_info *info) | ||
245 | { | ||
246 | info->sync_event_filters = 0; | ||
247 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->events_sync_menu), | ||
248 | "Sync Graph and List Event Filters"); | ||
249 | |||
250 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_events_menu), | ||
251 | "graph events"); | ||
252 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_adv_events_menu), | ||
253 | "graph advanced events"); | ||
254 | gtk_widget_show(info->list_events_menu); | ||
255 | gtk_widget_show(info->list_adv_events_menu); | ||
256 | } | ||
257 | |||
226 | static void | 258 | static void |
227 | /* Callback for the clicked signal of the Load button */ | 259 | /* Callback for the clicked signal of the Load button */ |
228 | load_clicked (gpointer data) | 260 | load_clicked (gpointer data) |
@@ -254,24 +286,64 @@ load_filters_clicked (gpointer data) | |||
254 | struct graph_info *ginfo = info->ginfo; | 286 | struct graph_info *ginfo = info->ginfo; |
255 | GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview); | 287 | GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview); |
256 | struct tracecmd_xml_handle *handle; | 288 | struct tracecmd_xml_handle *handle; |
289 | struct filter_task *task_filter; | ||
290 | struct filter_task *hide_tasks; | ||
257 | gchar *filename; | 291 | gchar *filename; |
292 | int ret; | ||
258 | 293 | ||
259 | filename = trace_get_file_dialog("Load Filters"); | 294 | filename = trace_get_file_dialog("Load Filters"); |
260 | if (!filename) | 295 | if (!filename) |
261 | return; | 296 | return; |
262 | 297 | ||
263 | handle = tracecmd_xml_open(filename); | 298 | handle = tracecmd_xml_open(filename); |
264 | if (!handle) | 299 | if (!handle) { |
265 | warning("Could not open %s", filename); | 300 | warning("Could not open %s", filename); |
266 | g_free(filename); | 301 | goto out; |
302 | } | ||
267 | 303 | ||
268 | trace_filter_load_filters(handle, ginfo->task_filter, | 304 | /* Unsync the list and graph filters */ |
269 | ginfo->hide_tasks); | 305 | if (info->sync_task_filters) |
306 | unsync_task_filters(info); | ||
307 | if (info->sync_event_filters) | ||
308 | unsync_event_filters(info); | ||
309 | |||
310 | ret = tracecmd_xml_system_exists(handle, | ||
311 | "GraphTaskFilter"); | ||
312 | if (ret) { | ||
313 | filter_task_clear(ginfo->task_filter); | ||
314 | filter_task_clear(ginfo->hide_tasks); | ||
315 | |||
316 | trace_filter_load_filters(handle, | ||
317 | "GraphTaskFilter", | ||
318 | ginfo->task_filter, | ||
319 | ginfo->hide_tasks); | ||
320 | trace_graph_refresh_filters(ginfo); | ||
321 | } | ||
322 | |||
323 | ret = tracecmd_xml_system_exists(handle, | ||
324 | "ListTaskFilter"); | ||
325 | if (ret) { | ||
326 | |||
327 | task_filter = info->list_task_filter; | ||
328 | hide_tasks = info->list_hide_tasks; | ||
329 | filter_task_clear(task_filter); | ||
330 | filter_task_clear(hide_tasks); | ||
331 | |||
332 | trace_filter_load_filters(handle, | ||
333 | "ListTaskFilter", | ||
334 | task_filter, | ||
335 | hide_tasks); | ||
336 | update_tree_view_filters(info, task_filter, hide_tasks); | ||
337 | } | ||
270 | 338 | ||
271 | trace_view_load_filters(handle, trace_tree); | ||
272 | trace_graph_load_filters(ginfo, handle); | 339 | trace_graph_load_filters(ginfo, handle); |
340 | ret = trace_view_load_filters(handle, trace_tree); | ||
273 | 341 | ||
274 | tracecmd_xml_close(handle); | 342 | tracecmd_xml_close(handle); |
343 | |||
344 | out: | ||
345 | g_free(filename); | ||
346 | |||
275 | } | 347 | } |
276 | 348 | ||
277 | /* Callback for the clicked signal of the Save Filters button */ | 349 | /* Callback for the clicked signal of the Save Filters button */ |
@@ -282,6 +354,8 @@ save_filters_clicked (gpointer data) | |||
282 | struct graph_info *ginfo = info->ginfo; | 354 | struct graph_info *ginfo = info->ginfo; |
283 | struct tracecmd_xml_handle *handle; | 355 | struct tracecmd_xml_handle *handle; |
284 | GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview); | 356 | GtkTreeView *trace_tree = GTK_TREE_VIEW(info->treeview); |
357 | struct filter_task *task_filter; | ||
358 | struct filter_task *hide_tasks; | ||
285 | gchar *filename; | 359 | gchar *filename; |
286 | 360 | ||
287 | filename = trace_get_file_dialog("Save Filters"); | 361 | filename = trace_get_file_dialog("Save Filters"); |
@@ -294,12 +368,25 @@ save_filters_clicked (gpointer data) | |||
294 | g_free(filename); | 368 | g_free(filename); |
295 | 369 | ||
296 | trace_view_save_filters(handle, trace_tree); | 370 | trace_view_save_filters(handle, trace_tree); |
297 | |||
298 | trace_graph_save_filters(ginfo, handle); | 371 | trace_graph_save_filters(ginfo, handle); |
299 | 372 | ||
300 | trace_filter_save_filters(handle, ginfo->task_filter, | 373 | trace_filter_save_filters(handle, |
374 | "GraphTaskFilter", | ||
375 | ginfo->task_filter, | ||
301 | ginfo->hide_tasks); | 376 | ginfo->hide_tasks); |
302 | 377 | ||
378 | if (info->sync_task_filters) { | ||
379 | task_filter = ginfo->task_filter; | ||
380 | hide_tasks = ginfo->hide_tasks; | ||
381 | } else { | ||
382 | task_filter = info->list_task_filter; | ||
383 | hide_tasks = info->list_hide_tasks; | ||
384 | } | ||
385 | |||
386 | trace_filter_save_filters(handle, | ||
387 | "ListTaskFilter", | ||
388 | task_filter, hide_tasks); | ||
389 | |||
303 | tracecmd_xml_close(handle); | 390 | tracecmd_xml_close(handle); |
304 | } | 391 | } |
305 | 392 | ||
@@ -345,20 +432,7 @@ sync_task_filter_clicked (GtkWidget *subitem, gpointer data) | |||
345 | if (info->sync_task_filters) { | 432 | if (info->sync_task_filters) { |
346 | /* Separate the List and Graph filters */ | 433 | /* Separate the List and Graph filters */ |
347 | 434 | ||
348 | info->sync_task_filters = 0; | 435 | unsync_task_filters(info); |
349 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->task_sync_menu), | ||
350 | "Sync Graph and List Task Filters"); | ||
351 | |||
352 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_task_menu), | ||
353 | "graph tasks"); | ||
354 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_hide_task_menu), | ||
355 | "graph hide tasks"); | ||
356 | gtk_widget_show(info->list_task_menu); | ||
357 | gtk_widget_show(info->list_hide_task_menu); | ||
358 | |||
359 | /* The list now uses its own hash */ | ||
360 | info->list_task_filter = filter_task_hash_copy(info->ginfo->task_filter); | ||
361 | info->list_hide_tasks = filter_task_hash_copy(info->ginfo->hide_tasks); | ||
362 | return; | 436 | return; |
363 | } | 437 | } |
364 | 438 | ||
@@ -442,18 +516,7 @@ sync_events_filter_clicked (GtkWidget *subitem, gpointer data) | |||
442 | 516 | ||
443 | if (info->sync_event_filters) { | 517 | if (info->sync_event_filters) { |
444 | /* Separate the List and Graph filters */ | 518 | /* Separate the List and Graph filters */ |
445 | 519 | unsync_event_filters(info); | |
446 | info->sync_event_filters = 0; | ||
447 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->events_sync_menu), | ||
448 | "Sync Graph and List Event Filters"); | ||
449 | |||
450 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_events_menu), | ||
451 | "graph events"); | ||
452 | gtk_menu_item_set_label(GTK_MENU_ITEM(info->graph_adv_events_menu), | ||
453 | "graph advanced events"); | ||
454 | gtk_widget_show(info->list_events_menu); | ||
455 | gtk_widget_show(info->list_adv_events_menu); | ||
456 | |||
457 | return; | 520 | return; |
458 | } | 521 | } |
459 | 522 | ||
diff --git a/trace-filter.c b/trace-filter.c index 2cc0629..b8fc76f 100644 --- a/trace-filter.c +++ b/trace-filter.c | |||
@@ -2196,6 +2196,7 @@ int trace_filter_load_task_filter(struct filter_task *filter, | |||
2196 | } | 2196 | } |
2197 | 2197 | ||
2198 | int trace_filter_load_filters(struct tracecmd_xml_handle *handle, | 2198 | int trace_filter_load_filters(struct tracecmd_xml_handle *handle, |
2199 | const char *system_name, | ||
2199 | struct filter_task *task_filter, | 2200 | struct filter_task *task_filter, |
2200 | struct filter_task *hide_tasks) | 2201 | struct filter_task *hide_tasks) |
2201 | { | 2202 | { |
@@ -2203,7 +2204,7 @@ int trace_filter_load_filters(struct tracecmd_xml_handle *handle, | |||
2203 | struct tracecmd_xml_system_node *syschild; | 2204 | struct tracecmd_xml_system_node *syschild; |
2204 | const char *name; | 2205 | const char *name; |
2205 | 2206 | ||
2206 | system = tracecmd_xml_find_system(handle, "TraceFilter"); | 2207 | system = tracecmd_xml_find_system(handle, system_name); |
2207 | if (!system) | 2208 | if (!system) |
2208 | return -1; | 2209 | return -1; |
2209 | 2210 | ||
@@ -2234,11 +2235,12 @@ int trace_filter_load_filters(struct tracecmd_xml_handle *handle, | |||
2234 | } | 2235 | } |
2235 | 2236 | ||
2236 | int trace_filter_save_filters(struct tracecmd_xml_handle *handle, | 2237 | int trace_filter_save_filters(struct tracecmd_xml_handle *handle, |
2238 | const char *system_name, | ||
2237 | struct filter_task *task_filter, | 2239 | struct filter_task *task_filter, |
2238 | struct filter_task *hide_tasks) | 2240 | struct filter_task *hide_tasks) |
2239 | { | 2241 | { |
2240 | 2242 | ||
2241 | tracecmd_xml_start_system(handle, "TraceFilter"); | 2243 | tracecmd_xml_start_system(handle, system_name); |
2242 | 2244 | ||
2243 | if (task_filter && filter_task_count(task_filter)) { | 2245 | if (task_filter && filter_task_count(task_filter)) { |
2244 | tracecmd_xml_start_sub_system(handle, "TaskFilter"); | 2246 | tracecmd_xml_start_sub_system(handle, "TaskFilter"); |
diff --git a/trace-filter.h b/trace-filter.h index e0f9f4a..1800471 100644 --- a/trace-filter.h +++ b/trace-filter.h | |||
@@ -149,9 +149,11 @@ int trace_filter_load_task_filter(struct filter_task *filter, | |||
149 | struct tracecmd_xml_handle *handle, | 149 | struct tracecmd_xml_handle *handle, |
150 | struct tracecmd_xml_system_node *node); | 150 | struct tracecmd_xml_system_node *node); |
151 | int trace_filter_load_filters(struct tracecmd_xml_handle *handle, | 151 | int trace_filter_load_filters(struct tracecmd_xml_handle *handle, |
152 | const char *system_name, | ||
152 | struct filter_task *task_filter, | 153 | struct filter_task *task_filter, |
153 | struct filter_task *hide_tasks); | 154 | struct filter_task *hide_tasks); |
154 | int trace_filter_save_filters(struct tracecmd_xml_handle *handle, | 155 | int trace_filter_save_filters(struct tracecmd_xml_handle *handle, |
156 | const char *system_name, | ||
155 | struct filter_task *task_filter, | 157 | struct filter_task *task_filter, |
156 | struct filter_task *hide_tasks); | 158 | struct filter_task *hide_tasks); |
157 | 159 | ||
diff --git a/trace-graph-main.c b/trace-graph-main.c index 2ba9447..b4f05fb 100644 --- a/trace-graph-main.c +++ b/trace-graph-main.c | |||
@@ -171,7 +171,9 @@ load_filters_clicked (gpointer data) | |||
171 | warning("Could not open %s", filename); | 171 | warning("Could not open %s", filename); |
172 | g_free(filename); | 172 | g_free(filename); |
173 | 173 | ||
174 | trace_filter_load_filters(handle, ginfo->task_filter, | 174 | trace_filter_load_filters(handle, |
175 | "GraphTaskFilter", | ||
176 | ginfo->task_filter, | ||
175 | ginfo->hide_tasks); | 177 | ginfo->hide_tasks); |
176 | 178 | ||
177 | trace_graph_load_filters(ginfo, handle); | 179 | trace_graph_load_filters(ginfo, handle); |
@@ -196,7 +198,9 @@ save_filters_clicked (gpointer data) | |||
196 | warning("Could not create %s", filename); | 198 | warning("Could not create %s", filename); |
197 | g_free(filename); | 199 | g_free(filename); |
198 | 200 | ||
199 | trace_filter_save_filters(handle, ginfo->task_filter, | 201 | trace_filter_save_filters(handle, |
202 | "GraphTaskFilter", | ||
203 | ginfo->task_filter, | ||
200 | ginfo->hide_tasks); | 204 | ginfo->hide_tasks); |
201 | 205 | ||
202 | trace_graph_save_filters(ginfo, handle); | 206 | trace_graph_save_filters(ginfo, handle); |
diff --git a/trace-view-main.c b/trace-view-main.c index 8fa9aa6..59d6838 100644 --- a/trace-view-main.c +++ b/trace-view-main.c | |||
@@ -102,7 +102,9 @@ load_filters_clicked (gpointer data) | |||
102 | } | 102 | } |
103 | g_free(filename); | 103 | g_free(filename); |
104 | 104 | ||
105 | trace_filter_load_filters(handle, info->task_filter, | 105 | trace_filter_load_filters(handle, |
106 | "ListTaskFilter", | ||
107 | info->task_filter, | ||
106 | info->hide_tasks); | 108 | info->hide_tasks); |
107 | 109 | ||
108 | trace_view_load_filters(handle, trace_tree); | 110 | trace_view_load_filters(handle, trace_tree); |
@@ -128,7 +130,9 @@ save_filters_clicked (gpointer data) | |||
128 | warning("Could not create %s", filename); | 130 | warning("Could not create %s", filename); |
129 | g_free(filename); | 131 | g_free(filename); |
130 | 132 | ||
131 | trace_filter_save_filters(handle, info->task_filter, info->hide_tasks); | 133 | trace_filter_save_filters(handle, |
134 | "ListTaskFilter", | ||
135 | info->task_filter, info->hide_tasks); | ||
132 | trace_view_save_filters(handle, trace_tree); | 136 | trace_view_save_filters(handle, trace_tree); |
133 | 137 | ||
134 | tracecmd_xml_close(handle); | 138 | tracecmd_xml_close(handle); |
diff --git a/trace-xml.c b/trace-xml.c index 62473fb..bef1f9f 100644 --- a/trace-xml.c +++ b/trace-xml.c | |||
@@ -230,3 +230,19 @@ void tracecmd_xml_free_system(struct tracecmd_xml_system *system) | |||
230 | xmlXPathFreeObject(system->result); | 230 | xmlXPathFreeObject(system->result); |
231 | free(system); | 231 | free(system); |
232 | } | 232 | } |
233 | |||
234 | int tracecmd_xml_system_exists(struct tracecmd_xml_handle *handle, | ||
235 | const char *system) | ||
236 | { | ||
237 | struct tracecmd_xml_system *sys; | ||
238 | int exists = 0; | ||
239 | |||
240 | sys = tracecmd_xml_find_system(handle, system); | ||
241 | if (sys) { | ||
242 | exists = 1; | ||
243 | tracecmd_xml_free_system(sys); | ||
244 | } | ||
245 | |||
246 | return exists; | ||
247 | } | ||
248 | |||
diff --git a/trace-xml.h b/trace-xml.h index f84907d..d1f62b0 100644 --- a/trace-xml.h +++ b/trace-xml.h | |||
@@ -56,5 +56,7 @@ struct tracecmd_xml_system_node * | |||
56 | tracecmd_xml_node_next(struct tracecmd_xml_system_node *tnode); | 56 | tracecmd_xml_node_next(struct tracecmd_xml_system_node *tnode); |
57 | const char *tracecmd_xml_node_value(struct tracecmd_xml_handle *handle, | 57 | const char *tracecmd_xml_node_value(struct tracecmd_xml_handle *handle, |
58 | struct tracecmd_xml_system_node *tnode); | 58 | struct tracecmd_xml_system_node *tnode); |
59 | int tracecmd_xml_system_exists(struct tracecmd_xml_handle *handle, | ||
60 | const char *system); | ||
59 | 61 | ||
60 | #endif /* __TRACE_XML_H */ | 62 | #endif /* __TRACE_XML_H */ |