aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-02-17 21:08:18 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-02-17 21:08:18 -0500
commit3095089b3c0e95adda29ddcde8840e784d2f8ea5 (patch)
tree88f20270f0166c073134bd879b7b03759e1c4a4c
parent229c76d9937917a8a366a2547bf59b8d8842b263 (diff)
kernelshark: Make sync filters between graph and list handle advance
Make sure the advanced filters get copied too when syncing between the graph and list filters. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--kernel-shark.c21
-rw-r--r--trace-graph.c19
-rw-r--r--trace-graph.h4
-rw-r--r--trace-view.c93
-rw-r--r--trace-view.h4
5 files changed, 88 insertions, 53 deletions
diff --git a/kernel-shark.c b/kernel-shark.c
index 1f679ad..aa408d2 100644
--- a/kernel-shark.c
+++ b/kernel-shark.c
@@ -271,8 +271,6 @@ sync_graph_events_to_list_clicked (gpointer data)
271 GtkTreeModel *model; 271 GtkTreeModel *model;
272 TraceViewStore *store; 272 TraceViewStore *store;
273 gboolean all_events; 273 gboolean all_events;
274 gchar **systems;
275 gint *events;
276 274
277 model = gtk_tree_view_get_model(trace_tree); 275 model = gtk_tree_view_get_model(trace_tree);
278 if (!model) 276 if (!model)
@@ -283,13 +281,8 @@ sync_graph_events_to_list_clicked (gpointer data)
283 all_events = trace_view_store_get_all_events_enabled(store); 281 all_events = trace_view_store_get_all_events_enabled(store);
284 event_filter = trace_view_store_get_event_filter(store); 282 event_filter = trace_view_store_get_event_filter(store);
285 283
286 trace_filter_convert_filter_to_names(event_filter, 284 trace_graph_copy_filter(info->ginfo, all_events,
287 &systems, &events); 285 event_filter);
288
289 trace_graph_event_filter_callback(TRUE, all_events, systems,
290 events, info->ginfo);
291 free(systems);
292 free(events);
293} 286}
294 287
295 288
@@ -299,17 +292,11 @@ sync_list_events_to_graph_clicked (gpointer data)
299 struct shark_info *info = data; 292 struct shark_info *info = data;
300 struct graph_info *ginfo = info->ginfo; 293 struct graph_info *ginfo = info->ginfo;
301 gboolean all_events; 294 gboolean all_events;
302 gchar **systems;
303 gint *events;
304 295
305 all_events = ginfo->all_events; 296 all_events = ginfo->all_events;
306 trace_filter_convert_filter_to_names(ginfo->event_filter,
307 &systems, &events);
308 297
309 trace_view_event_filter_callback(TRUE, all_events, systems, 298 trace_view_copy_filter(info->treeview, all_events,
310 events, info->treeview); 299 ginfo->event_filter);
311 free(systems);
312 free(events);
313} 300}
314 301
315/* Callback for the clicked signal of the CPUs filter button */ 302/* Callback for the clicked signal of the CPUs filter button */
diff --git a/trace-graph.c b/trace-graph.c
index e83bf27..fa76874 100644
--- a/trace-graph.c
+++ b/trace-graph.c
@@ -1796,6 +1796,25 @@ void trace_graph_adv_filter_callback(gboolean accept,
1796 redraw_graph(ginfo); 1796 redraw_graph(ginfo);
1797} 1797}
1798 1798
1799void trace_graph_copy_filter(struct graph_info *ginfo,
1800 gboolean all_events,
1801 struct event_filter *event_filter)
1802{
1803 if (all_events) {
1804 ginfo->all_events = TRUE;
1805 /* filter is no longer used */
1806 pevent_filter_reset(ginfo->event_filter);
1807 redraw_graph(ginfo);
1808 return;
1809 }
1810
1811 ginfo->all_events = FALSE;
1812
1813 pevent_filter_copy(ginfo->event_filter, event_filter);
1814
1815 redraw_graph(ginfo);
1816}
1817
1799static void redraw_pixmap_backend(struct graph_info *ginfo) 1818static void redraw_pixmap_backend(struct graph_info *ginfo)
1800{ 1819{
1801 GdkPixmap *old_pix; 1820 GdkPixmap *old_pix;
diff --git a/trace-graph.h b/trace-graph.h
index 3130e98..ae5f50d 100644
--- a/trace-graph.h
+++ b/trace-graph.h
@@ -274,6 +274,10 @@ int trace_graph_check_sched_wakeup(struct graph_info *ginfo,
274gboolean trace_graph_filter_on_task(struct graph_info *ginfo, gint pid); 274gboolean trace_graph_filter_on_task(struct graph_info *ginfo, gint pid);
275gboolean trace_graph_filter_on_event(struct graph_info *ginfo, struct record *record); 275gboolean trace_graph_filter_on_event(struct graph_info *ginfo, struct record *record);
276 276
277void trace_graph_copy_filter(struct graph_info *ginfo,
278 gboolean all_events,
279 struct event_filter *event_filter);
280
277/* plots */ 281/* plots */
278void trace_graph_plot_free(struct graph_info *ginfo); 282void trace_graph_plot_free(struct graph_info *ginfo);
279void trace_graph_plot_init(struct graph_info *ginfo); 283void trace_graph_plot_init(struct graph_info *ginfo);
diff --git a/trace-view.c b/trace-view.c
index bcba484..140bfcd 100644
--- a/trace-view.c
+++ b/trace-view.c
@@ -379,6 +379,30 @@ void trace_view_select(GtkWidget *treeview, guint64 time)
379 gtk_tree_path_free(path); 379 gtk_tree_path_free(path);
380} 380}
381 381
382static void update_rows(GtkTreeView *trace_tree, TraceViewStore *store)
383{
384 TraceViewRecord *vrec;
385 guint64 time;
386 gint row;
387
388 /* Keep track of the currently selected row */
389 row = trace_view_get_selected_row(GTK_WIDGET(trace_tree));
390 if (row >= 0) {
391 vrec = trace_view_store_get_row(store, row);
392 time = vrec->timestamp;
393 }
394
395 /* Force an update */
396 g_object_ref(store);
397 gtk_tree_view_set_model(trace_tree, NULL);
398 trace_view_store_update_filter(store);
399 gtk_tree_view_set_model(trace_tree, GTK_TREE_MODEL(store));
400 g_object_unref(store);
401
402 if (row >= 0)
403 trace_view_select(GTK_WIDGET(trace_tree), time);
404}
405
382void trace_view_event_filter_callback(gboolean accept, 406void trace_view_event_filter_callback(gboolean accept,
383 gboolean all_events, 407 gboolean all_events,
384 gchar **systems, 408 gchar **systems,
@@ -389,9 +413,6 @@ void trace_view_event_filter_callback(gboolean accept,
389 GtkTreeView *trace_tree = data; 413 GtkTreeView *trace_tree = data;
390 GtkTreeModel *model; 414 GtkTreeModel *model;
391 TraceViewStore *store; 415 TraceViewStore *store;
392 TraceViewRecord *vrec;
393 guint64 time;
394 gint row;
395 416
396 if (!accept) 417 if (!accept)
397 return; 418 return;
@@ -415,22 +436,7 @@ void trace_view_event_filter_callback(gboolean accept,
415 trace_filter_convert_char_to_filter(event_filter, systems, events); 436 trace_filter_convert_char_to_filter(event_filter, systems, events);
416 } 437 }
417 438
418 /* Keep track of the currently selected row */ 439 update_rows(trace_tree, store);
419 row = trace_view_get_selected_row(GTK_WIDGET(trace_tree));
420 if (row >= 0) {
421 vrec = trace_view_store_get_row(store, row);
422 time = vrec->timestamp;
423 }
424
425 /* Force an update */
426 g_object_ref(store);
427 gtk_tree_view_set_model(trace_tree, NULL);
428 trace_view_store_update_filter(store);
429 gtk_tree_view_set_model(trace_tree, GTK_TREE_MODEL(store));
430 g_object_unref(store);
431
432 if (row >= 0)
433 trace_view_select(GTK_WIDGET(trace_tree), time);
434} 440}
435 441
436void trace_view_adv_filter_callback(gboolean accept, 442void trace_view_adv_filter_callback(gboolean accept,
@@ -442,10 +448,7 @@ void trace_view_adv_filter_callback(gboolean accept,
442 GtkTreeView *trace_tree = data; 448 GtkTreeView *trace_tree = data;
443 GtkTreeModel *model; 449 GtkTreeModel *model;
444 TraceViewStore *store; 450 TraceViewStore *store;
445 TraceViewRecord *vrec;
446 char *error_str; 451 char *error_str;
447 guint64 time;
448 gint row;
449 int ret; 452 int ret;
450 int i; 453 int i;
451 454
@@ -480,22 +483,40 @@ void trace_view_adv_filter_callback(gboolean accept,
480 } 483 }
481 } 484 }
482 485
483 /* Keep track of the currently selected row */ 486 update_rows(trace_tree, store);
484 row = trace_view_get_selected_row(GTK_WIDGET(trace_tree)); 487}
485 if (row >= 0) {
486 vrec = trace_view_store_get_row(store, row);
487 time = vrec->timestamp;
488 }
489 488
490 /* Force an update */ 489void trace_view_copy_filter(GtkWidget *treeview,
491 g_object_ref(store); 490 gboolean all_events,
492 gtk_tree_view_set_model(trace_tree, NULL); 491 struct event_filter *src_event_filter)
493 trace_view_store_update_filter(store); 492{
494 gtk_tree_view_set_model(trace_tree, GTK_TREE_MODEL(store)); 493 GtkTreeView *trace_tree;
495 g_object_unref(store); 494 struct event_filter *event_filter;
495 GtkTreeModel *model;
496 TraceViewStore *store;
496 497
497 if (row >= 0) 498 trace_tree = GTK_TREE_VIEW(treeview);
498 trace_view_select(GTK_WIDGET(trace_tree), time); 499
500 model = gtk_tree_view_get_model(trace_tree);
501 if (!model)
502 return;
503
504 store = TRACE_VIEW_STORE(model);
505
506 if (all_events) {
507 if (trace_view_store_get_all_events_enabled(store))
508 return;
509
510 trace_view_store_set_all_events_enabled(store);
511 } else {
512 trace_view_store_clear_all_events_enabled(store);
513
514 event_filter = trace_view_store_get_event_filter(store);
515
516 pevent_filter_copy(event_filter, src_event_filter);
517 }
518
519 update_rows(trace_tree, store);
499} 520}
500 521
501void trace_view_cpu_filter_callback(gboolean accept, 522void trace_view_cpu_filter_callback(gboolean accept,
diff --git a/trace-view.h b/trace-view.h
index bbc05ce..182b285 100644
--- a/trace-view.h
+++ b/trace-view.h
@@ -57,6 +57,10 @@ void trace_view_cpu_filter_callback(gboolean accept,
57 guint64 *selected_cpu_mask, 57 guint64 *selected_cpu_mask,
58 gpointer data); 58 gpointer data);
59 59
60void trace_view_copy_filter(GtkWidget *treeview,
61 gboolean all_events,
62 struct event_filter *event_filter);
63
60void trace_view_search_setup(GtkBox *box, GtkTreeView *treeview); 64void trace_view_search_setup(GtkBox *box, GtkTreeView *treeview);
61 65
62gint trace_view_get_selected_row(GtkWidget *treeview); 66gint trace_view_get_selected_row(GtkWidget *treeview);