diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2010-02-17 21:08:18 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-02-17 21:08:18 -0500 |
| commit | 3095089b3c0e95adda29ddcde8840e784d2f8ea5 (patch) | |
| tree | 88f20270f0166c073134bd879b7b03759e1c4a4c | |
| parent | 229c76d9937917a8a366a2547bf59b8d8842b263 (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.c | 21 | ||||
| -rw-r--r-- | trace-graph.c | 19 | ||||
| -rw-r--r-- | trace-graph.h | 4 | ||||
| -rw-r--r-- | trace-view.c | 93 | ||||
| -rw-r--r-- | trace-view.h | 4 |
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 | ||
| 1799 | void 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 | |||
| 1799 | static void redraw_pixmap_backend(struct graph_info *ginfo) | 1818 | static 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, | |||
| 274 | gboolean trace_graph_filter_on_task(struct graph_info *ginfo, gint pid); | 274 | gboolean trace_graph_filter_on_task(struct graph_info *ginfo, gint pid); |
| 275 | gboolean trace_graph_filter_on_event(struct graph_info *ginfo, struct record *record); | 275 | gboolean trace_graph_filter_on_event(struct graph_info *ginfo, struct record *record); |
| 276 | 276 | ||
| 277 | void trace_graph_copy_filter(struct graph_info *ginfo, | ||
| 278 | gboolean all_events, | ||
| 279 | struct event_filter *event_filter); | ||
| 280 | |||
| 277 | /* plots */ | 281 | /* plots */ |
| 278 | void trace_graph_plot_free(struct graph_info *ginfo); | 282 | void trace_graph_plot_free(struct graph_info *ginfo); |
| 279 | void trace_graph_plot_init(struct graph_info *ginfo); | 283 | void 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 | ||
| 382 | static 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 | |||
| 382 | void trace_view_event_filter_callback(gboolean accept, | 406 | void 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 | ||
| 436 | void trace_view_adv_filter_callback(gboolean accept, | 442 | void 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 */ | 489 | void 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 | ||
| 501 | void trace_view_cpu_filter_callback(gboolean accept, | 522 | void 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 | ||
| 60 | void trace_view_copy_filter(GtkWidget *treeview, | ||
| 61 | gboolean all_events, | ||
| 62 | struct event_filter *event_filter); | ||
| 63 | |||
| 60 | void trace_view_search_setup(GtkBox *box, GtkTreeView *treeview); | 64 | void trace_view_search_setup(GtkBox *box, GtkTreeView *treeview); |
| 61 | 65 | ||
| 62 | gint trace_view_get_selected_row(GtkWidget *treeview); | 66 | gint trace_view_get_selected_row(GtkWidget *treeview); |
