diff options
Diffstat (limited to 'kernel-shark.c')
-rw-r--r-- | kernel-shark.c | 129 |
1 files changed, 96 insertions, 33 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 | ||