From 38b92d6b993327de864ef7182cebe530abc5f5c7 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Mon, 5 Apr 2010 21:30:53 -0400 Subject: trace-graph: Add loading and saving of task and event filters Add the filter loading and saving to trace-graph. Most of the work was done already to get trace-view working. This just hooks into that framework. Signed-off-by: Steven Rostedt --- trace-graph.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 6ed7851..9ec3924 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -32,6 +32,8 @@ #include "trace-hash.h" #include "trace-filter.h" +#include "version.h" + #include "util.h" #define DEBUG_LEVEL 0 @@ -2395,6 +2397,123 @@ int trace_graph_load_handle(struct graph_info *ginfo, return 0; } +static int load_event_filter(struct graph_info *ginfo, + struct tracecmd_xml_handle *handle, + struct tracecmd_xml_system_node *node) +{ + struct tracecmd_xml_system_node *child; + struct event_filter *event_filter; + const char *name; + const char *value; + + event_filter = ginfo->event_filter; + + child = tracecmd_xml_node_child(node); + name = tracecmd_xml_node_type(child); + if (strcmp(name, "FilterType") != 0) + return -1; + + value = tracecmd_xml_node_value(handle, child); + /* Do nothing with all events enabled */ + if (strcmp(value, "all events") == 0) + return 0; + + node = tracecmd_xml_node_next(child); + if (!node) + return -1; + + pevent_filter_clear_trivial(event_filter, FILTER_TRIVIAL_BOTH); + ginfo->all_events = FALSE; + + trace_filter_load_events(event_filter, handle, node); + + return 0; +} + +int trace_graph_load_filters(struct graph_info *ginfo, + struct tracecmd_xml_handle *handle) +{ + struct tracecmd_xml_system *system; + struct tracecmd_xml_system_node *syschild; + const char *name; + + system = tracecmd_xml_find_system(handle, "TraceGraph"); + if (!system) + return -1; + + syschild = tracecmd_xml_system_node(system); + if (!syschild) + goto out_free_sys; + + do { + name = tracecmd_xml_node_type(syschild); + + if (strcmp(name, "EventFilter") == 0) + load_event_filter(ginfo, handle, syschild); + + else if (strcmp(name, "TaskFilter") == 0) + trace_filter_load_task_filter(ginfo->task_filter, handle, syschild); + + else if (strcmp(name, "HideTasks") == 0) + trace_filter_load_task_filter(ginfo->hide_tasks, handle, syschild); + + syschild = tracecmd_xml_node_next(syschild); + } while (syschild); + + if (filter_task_count(ginfo->task_filter) || + filter_task_count(ginfo->hide_tasks)) + ginfo->filter_available = 1; + else + ginfo->filter_available = 0; + + tracecmd_xml_free_system(system); + + trace_graph_refresh(ginfo); + + return 0; + + out_free_sys: + tracecmd_xml_free_system(system); + return -1; +} + +int trace_graph_save_filters(struct graph_info *ginfo, + struct tracecmd_xml_handle *handle) +{ + struct event_filter *event_filter; + + tracecmd_xml_start_system(handle, "TraceGraph", VERSION_STRING); + + event_filter = ginfo->event_filter; + + tracecmd_xml_start_sub_system(handle, "EventFilter"); + + if (ginfo->all_events || !event_filter) + tracecmd_xml_write_element(handle, "FilterType", "all events"); + else { + tracecmd_xml_write_element(handle, "FilterType", "filter"); + trace_filter_save_events(handle, event_filter); + } + + tracecmd_xml_end_sub_system(handle); + + if (ginfo->task_filter && filter_task_count(ginfo->task_filter)) { + tracecmd_xml_start_sub_system(handle, "TaskFilter"); + trace_filter_save_tasks(handle, ginfo->task_filter); + tracecmd_xml_end_sub_system(handle); + } + + if (ginfo->hide_tasks && filter_task_count(ginfo->hide_tasks)) { + tracecmd_xml_start_sub_system(handle, "HideTasks"); + trace_filter_save_tasks(handle, ginfo->hide_tasks); + tracecmd_xml_end_sub_system(handle); + } + + tracecmd_xml_end_system(handle); + + return 0; +} + struct graph_info * trace_graph_create_with_callbacks(struct tracecmd_input *handle, struct graph_callbacks *cbs) -- cgit v1.2.2 From 20359fdc358744dee36b8e59c234e965fc7d2a69 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Mon, 5 Apr 2010 22:40:54 -0400 Subject: kernelshark: Make all saved filters under KernelShark Make the xml doc under ... for trace-view and trace-graph. Also pull out the task filters since the view and graph in kernelshark share the same filters. Signed-off-by: Steven Rostedt --- trace-graph.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 9ec3924..e21ee33 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -32,8 +32,6 @@ #include "trace-hash.h" #include "trace-filter.h" -#include "version.h" - #include "util.h" #define DEBUG_LEVEL 0 @@ -2437,6 +2435,12 @@ int trace_graph_load_filters(struct graph_info *ginfo, struct tracecmd_xml_system_node *syschild; const char *name; + if (filter_task_count(ginfo->task_filter) || + filter_task_count(ginfo->hide_tasks)) + ginfo->filter_available = 1; + else + ginfo->filter_available = 0; + system = tracecmd_xml_find_system(handle, "TraceGraph"); if (!system) return -1; @@ -2451,12 +2455,6 @@ int trace_graph_load_filters(struct graph_info *ginfo, if (strcmp(name, "EventFilter") == 0) load_event_filter(ginfo, handle, syschild); - else if (strcmp(name, "TaskFilter") == 0) - trace_filter_load_task_filter(ginfo->task_filter, handle, syschild); - - else if (strcmp(name, "HideTasks") == 0) - trace_filter_load_task_filter(ginfo->hide_tasks, handle, syschild); - syschild = tracecmd_xml_node_next(syschild); } while (syschild); @@ -2474,6 +2472,9 @@ int trace_graph_load_filters(struct graph_info *ginfo, out_free_sys: tracecmd_xml_free_system(system); + if (ginfo->filter_enabled) + trace_graph_refresh(ginfo); + return -1; } @@ -2482,7 +2483,7 @@ int trace_graph_save_filters(struct graph_info *ginfo, { struct event_filter *event_filter; - tracecmd_xml_start_system(handle, "TraceGraph", VERSION_STRING); + tracecmd_xml_start_system(handle, "TraceGraph"); event_filter = ginfo->event_filter; @@ -2497,18 +2498,6 @@ int trace_graph_save_filters(struct graph_info *ginfo, tracecmd_xml_end_sub_system(handle); - if (ginfo->task_filter && filter_task_count(ginfo->task_filter)) { - tracecmd_xml_start_sub_system(handle, "TaskFilter"); - trace_filter_save_tasks(handle, ginfo->task_filter); - tracecmd_xml_end_sub_system(handle); - } - - if (ginfo->hide_tasks && filter_task_count(ginfo->hide_tasks)) { - tracecmd_xml_start_sub_system(handle, "HideTasks"); - trace_filter_save_tasks(handle, ginfo->hide_tasks); - tracecmd_xml_end_sub_system(handle); - } - tracecmd_xml_end_system(handle); return 0; -- cgit v1.2.2 From 935a801c7f3eab7bad5c183a702a506540d32700 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Mon, 5 Apr 2010 22:48:07 -0400 Subject: kernelshark: Fixed grammar on popup menu remove task The popup menu for removing a task said: Remove task to filter when it should be saying: Remove task from filter Signed-off-by: Steven Rostedt --- trace-graph.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index e21ee33..afd29e3 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -718,7 +718,7 @@ do_pop_up(GtkWidget *widget, GdkEventButton *event, gpointer data) g_assert(text); if (trace_graph_filter_task_find_pid(ginfo, pid)) - snprintf(text, len, "Remove %s-%d to filter", comm, pid); + snprintf(text, len, "Remove %s-%d from filter", comm, pid); else snprintf(text, len, "Add %s-%d to filter", comm, pid); -- cgit v1.2.2 From 608ee7934adf2ade0c1504ee030ab6f6a35be9e0 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Tue, 6 Apr 2010 16:39:31 -0400 Subject: trace-graph: Add tooltips to graph markers Add tooltips to give some information on the markers. Signed-off-by: Steven Rostedt --- trace-graph.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index afd29e3..cab3647 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -2503,6 +2503,24 @@ int trace_graph_save_filters(struct graph_info *ginfo, return 0; } +static void set_label_a(GtkWidget *widget) +{ + gtk_widget_set_tooltip_text(widget, "Click left mouse on graph\n" + "to set Marker A"); +} + +static void set_label_b(GtkWidget *widget) +{ + gtk_widget_set_tooltip_text(widget, "Shift and click left mouse on graph\n" + "to set Marker B"); +} + +static void set_label_cursor(GtkWidget *widget) +{ + gtk_widget_set_tooltip_text(widget, "Double click Left mouse on graph\n" + "to set Cursor"); +} + struct graph_info * trace_graph_create_with_callbacks(struct tracecmd_input *handle, struct graph_callbacks *cbs) @@ -2562,10 +2580,12 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, /* --- Cursor --- */ label = gtk_label_new("Cursor:"); + set_label_cursor(label); gtk_table_attach(GTK_TABLE(table), label, 4, 5, 0, 1, GTK_EXPAND, GTK_EXPAND, 3, 3); gtk_widget_show(label); ginfo->cursor_label = gtk_label_new("0.0"); + set_label_cursor(ginfo->cursor_label); eventbox = gtk_event_box_new(); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &color); @@ -2581,10 +2601,13 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_widget_show(hbox); label = gtk_label_new("Marker"); + set_label_a(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); + label = gtk_label_new("A:"); + set_label_a(label); colorAB.red = 0; colorAB.green = (0xff) *(65535/255); @@ -2601,6 +2624,7 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_table_attach(GTK_TABLE(table), hbox, 9, 10, 0, 1, GTK_EXPAND, GTK_EXPAND, 3, 3); ginfo->marka_label = gtk_label_new("0.0"); + set_label_a(ginfo->marka_label); eventbox = gtk_event_box_new(); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &color); @@ -2616,10 +2640,12 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_widget_show(hbox); label = gtk_label_new("Marker"); + set_label_b(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); label = gtk_label_new("B:"); + set_label_b(label); colorAB.red = (0xff) *(65535/255); colorAB.green = 0; @@ -2637,6 +2663,7 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_widget_show(label); ginfo->markb_label = gtk_label_new("0.0"); + set_label_b(ginfo->markb_label); eventbox = gtk_event_box_new(); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &color); -- cgit v1.2.2 From 76654897a4e4c222871dda9ff487be0e72be6a9b Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Tue, 6 Apr 2010 17:23:42 -0400 Subject: trace-graph: Add tool tip about zooming Show tip window to explain how to zoom in and out on the graph. Signed-off-by: Steven Rostedt --- trace-graph.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index cab3647..27c139d 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -766,7 +766,25 @@ do_pop_up(GtkWidget *widget, GdkEventButton *event, gpointer data) return TRUE; } -static void button_press(struct graph_info *ginfo, gint x, guint state) +static void draw_info_box(struct graph_info *ginfo, const gchar *buffer, + gint x, gint y); + +static void stop_zoom_tip(struct graph_info *ginfo) +{ + clear_info_box(ginfo); +} + +static void show_zoom_tip(struct graph_info *ginfo, gint x, gint y) +{ + clear_info_box(ginfo); + + draw_info_box(ginfo, + "Click and hold left mouse and drag right to zoom in\n" + "Click and hold left mouse and drag left to zoom out", + x, y); +} + +static void button_press(struct graph_info *ginfo, gint x, gint y, guint state) { ginfo->press_x = x; ginfo->last_x = 0; @@ -785,8 +803,10 @@ static void button_press(struct graph_info *ginfo, gint x, guint state) clear_line(ginfo, convert_time_to_x(ginfo, ginfo->marka_time)); update_marka(ginfo, x); } - } else + } else { ginfo->zoom = TRUE; + show_zoom_tip(ginfo, x, y); + } return; } @@ -826,7 +846,7 @@ button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) return TRUE; } - button_press(ginfo, event->x, event->state); + button_press(ginfo, event->x, event->y, event->state); return TRUE; } @@ -839,6 +859,9 @@ static void motion_plot(struct graph_info *ginfo, gint x, gint y) { struct graph_plot *plot; + if (ginfo->zoom) + stop_zoom_tip(ginfo); + if (!ginfo->curr_pixmap) return; @@ -876,7 +899,7 @@ info_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) if (event->type == GDK_2BUTTON_PRESS) return FALSE; - button_press(ginfo, gtk_adjustment_get_value(ginfo->hadj), event->state); + button_press(ginfo, gtk_adjustment_get_value(ginfo->hadj), event->y, event->state); return FALSE; } @@ -1500,7 +1523,8 @@ static void button_release(struct graph_info *ginfo, gint x) ginfo->show_marka = TRUE; ginfo->show_markb = TRUE; update_markb(ginfo, x); - } + } else + stop_zoom_tip(ginfo); clear_line(ginfo, ginfo->last_x); clear_line(ginfo, ginfo->press_x); -- cgit v1.2.2 From c26682a8efa2b8f90e0562ab730f6283b8d70090 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Tue, 6 Apr 2010 18:44:52 -0400 Subject: kernelshark: Add compat for gtk_widget_set_tooltip_text() Add a function to handle old gtk libs that do not implement gtk_widget_set_tooltip_text(). But this compat function only works with widgets with windows, so there's not much we can do. Signed-off-by: Steven Rostedt --- trace-graph.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 27c139d..0eaa45a 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -2609,8 +2609,8 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_widget_show(label); ginfo->cursor_label = gtk_label_new("0.0"); - set_label_cursor(ginfo->cursor_label); eventbox = gtk_event_box_new(); + set_label_cursor(eventbox); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &color); gtk_container_add(GTK_CONTAINER(eventbox), ginfo->cursor_label); @@ -2631,13 +2631,13 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, label = gtk_label_new("A:"); - set_label_a(label); colorAB.red = 0; colorAB.green = (0xff) *(65535/255); colorAB.blue = 0; eventbox = gtk_event_box_new(); + set_label_a(eventbox); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &colorAB); gtk_container_add(GTK_CONTAINER(eventbox), label); @@ -2648,8 +2648,8 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_table_attach(GTK_TABLE(table), hbox, 9, 10, 0, 1, GTK_EXPAND, GTK_EXPAND, 3, 3); ginfo->marka_label = gtk_label_new("0.0"); - set_label_a(ginfo->marka_label); eventbox = gtk_event_box_new(); + set_label_a(eventbox); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &color); gtk_container_add(GTK_CONTAINER(eventbox), ginfo->marka_label); @@ -2669,13 +2669,13 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_widget_show(label); label = gtk_label_new("B:"); - set_label_b(label); colorAB.red = (0xff) *(65535/255); colorAB.green = 0; colorAB.blue = 0; eventbox = gtk_event_box_new(); + set_label_b(eventbox); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &colorAB); gtk_container_add(GTK_CONTAINER(eventbox), label); @@ -2687,8 +2687,8 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, gtk_widget_show(label); ginfo->markb_label = gtk_label_new("0.0"); - set_label_b(ginfo->markb_label); eventbox = gtk_event_box_new(); + set_label_b(eventbox); gtk_widget_show(eventbox); gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &color); gtk_container_add(GTK_CONTAINER(eventbox), ginfo->markb_label); -- cgit v1.2.2 From cf3a11c410f0f5453c2140c8737295f70bb33e3b Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Thu, 8 Apr 2010 12:54:23 -0400 Subject: trace-graph: Clear zoom tip on double click When selecting a cursor with the double click, the zoom tip does not go away. Clear it on double click. Signed-off-by: Steven Rostedt --- trace-graph.c | 1 + 1 file changed, 1 insertion(+) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 0eaa45a..8050226 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -827,6 +827,7 @@ button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) /* check for double click */ if (event->type == GDK_2BUTTON_PRESS) { + stop_zoom_tip(ginfo); if (ginfo->line_active) { ginfo->line_active = FALSE; clear_line(ginfo, ginfo->last_x); -- cgit v1.2.2 From 7327b8f423f55873d30d523e882bb8fd9338e1ac Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Thu, 27 May 2010 18:14:36 -0400 Subject: trace-graph: Fix pop up for hide task The pop up said "Hide task to filter" which does not make any sense. Change it to just "Hide task". Signed-off-by: Steven Rostedt --- trace-graph.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 8050226..9e5cd19 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -728,9 +728,9 @@ do_pop_up(GtkWidget *widget, GdkEventButton *event, gpointer data) text); if (trace_graph_hide_task_find_pid(ginfo, pid)) - snprintf(text, len, "Show %s-%d to filter", comm, pid); + snprintf(text, len, "Show %s-%d", comm, pid); else - snprintf(text, len, "Hide %s-%d to filter", comm, pid); + snprintf(text, len, "Hide %s-%d", comm, pid); gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_hide_task), text); @@ -752,7 +752,7 @@ do_pop_up(GtkWidget *widget, GdkEventButton *event, gpointer data) gtk_widget_set_sensitive(menu_filter_add_task, FALSE); gtk_menu_item_set_label(GTK_MENU_ITEM(menu_filter_hide_task), - "Hide task to filter"); + "Hide task"); gtk_widget_set_sensitive(menu_filter_hide_task, FALSE); gtk_widget_hide(menu_plot_task); -- cgit v1.2.2 From 19c146cbf37c95cf77319569d1beff35fd8d544b Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Tue, 1 Jun 2010 11:09:01 -0400 Subject: kernelshark: Allow for separate list and graph task filters To make the task filters more like the event filters, allow the list and graph to have their own filtering. Signed-off-by: Steven Rostedt --- trace-graph.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 9e5cd19..2bbe73f 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -548,6 +548,20 @@ void trace_graph_clear_tasks(struct graph_info *ginfo) redraw_graph(ginfo); } +void trace_graph_update_filters(struct graph_info *ginfo, + struct filter_task *task_filter, + struct filter_task *hide_tasks) +{ + filter_task_hash_free(ginfo->task_filter); + filter_task_hash_free(ginfo->hide_tasks); + + ginfo->task_filter = filter_task_hash_copy(task_filter); + ginfo->hide_tasks = filter_task_hash_copy(hide_tasks); + + if (ginfo->filter_enabled) + redraw_graph(ginfo); +} + static void filter_clear_tasks_clicked (gpointer data) { -- cgit v1.2.2 From 2db91eb153dfdc59ad42e13fefb59f180609b1bd Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Wed, 9 Jun 2010 21:33:57 -0400 Subject: trace-graph: Allow update of task filters with same filter Allow trace_graph_update_filters have the ginfo filters passed to it. This will give a way to let external users to refresh the graph filters. Signed-off-by: Steven Rostedt --- trace-graph.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 2bbe73f..73e69d3 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -552,11 +552,16 @@ void trace_graph_update_filters(struct graph_info *ginfo, struct filter_task *task_filter, struct filter_task *hide_tasks) { - filter_task_hash_free(ginfo->task_filter); - filter_task_hash_free(ginfo->hide_tasks); + /* Make sure the filter passed in is not the filter we use */ + if (task_filter != ginfo->task_filter) { + filter_task_hash_free(ginfo->task_filter); + ginfo->task_filter = filter_task_hash_copy(task_filter); + } - ginfo->task_filter = filter_task_hash_copy(task_filter); - ginfo->hide_tasks = filter_task_hash_copy(hide_tasks); + if (hide_tasks != ginfo->hide_tasks) { + filter_task_hash_free(ginfo->hide_tasks); + ginfo->hide_tasks = filter_task_hash_copy(hide_tasks); + } if (ginfo->filter_enabled) redraw_graph(ginfo); -- cgit v1.2.2 From 4e0828797e2226539e5389ec864ee259a718bd01 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Wed, 9 Jun 2010 21:35:35 -0400 Subject: trace-graph: Add trace_graph_refresh_filters() Add the function trace_graph_refresh_filters that redraws the graph after the filters are updated. Signed-off-by: Steven Rostedt --- trace-graph.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 73e69d3..5638ce6 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -567,6 +567,12 @@ void trace_graph_update_filters(struct graph_info *ginfo, redraw_graph(ginfo); } +void trace_graph_refresh_filters(struct graph_info *ginfo) +{ + trace_graph_update_filters(ginfo, ginfo->task_filter, + ginfo->hide_tasks); +} + static void filter_clear_tasks_clicked (gpointer data) { -- cgit v1.2.2 From 77441ff111de0fb54e4d00df57532333915be2e9 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Wed, 9 Jun 2010 21:43:00 -0400 Subject: trace-graph: Call filter callback on update task filters When the task filters are updated, call the registered callback. Signed-off-by: Steven Rostedt --- trace-graph.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 5638ce6..319b159 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -563,6 +563,10 @@ void trace_graph_update_filters(struct graph_info *ginfo, ginfo->hide_tasks = filter_task_hash_copy(hide_tasks); } + if (ginfo->callbacks && ginfo->callbacks->filter) + ginfo->callbacks->filter(ginfo, ginfo->task_filter, + ginfo->hide_tasks); + if (ginfo->filter_enabled) redraw_graph(ginfo); } -- cgit v1.2.2 From 200cb94dd4a1f1f47c86a82c1dc665a67f426214 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Thu, 10 Jun 2010 10:15:15 -0400 Subject: kernelshark: Add list and graph task filter menu Add a list and graph task filter menu to the menu bar. The tasks added to this filter are enabled by default. This also adds a nice feature that you can pick and choose tasks to filter from a dialog box. Signed-off-by: Steven Rostedt --- trace-graph.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'trace-graph.c') diff --git a/trace-graph.c b/trace-graph.c index 319b159..04e2439 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -569,6 +569,15 @@ void trace_graph_update_filters(struct graph_info *ginfo, if (ginfo->filter_enabled) redraw_graph(ginfo); + + if (filter_task_count(ginfo->task_filter) || + filter_task_count(ginfo->hide_tasks)) + ginfo->filter_available = 1; + else { + ginfo->filter_enabled = 0; + ginfo->filter_available = 0; + } + } void trace_graph_refresh_filters(struct graph_info *ginfo) -- cgit v1.2.2