aboutsummaryrefslogtreecommitdiffstats
path: root/kernel-shark.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel-shark.c')
-rw-r--r--kernel-shark.c129
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
226static 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
244static 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
226static void 258static void
227/* Callback for the clicked signal of the Load button */ 259/* Callback for the clicked signal of the Load button */
228load_clicked (gpointer data) 260load_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