diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-01-07 15:52:21 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-01-07 15:52:21 -0500 |
commit | 80020d43359030107f7f25e5b8b1f0d61d7fc6fa (patch) | |
tree | f15c75e12c22407c30dee3f8a67d1a3eebcc880e | |
parent | 30f7571850c130f3e48b6c05df0c1f092f59106b (diff) |
kerenl-shark: Use callbacks for updating the filter between graph and list
Have the graph send callbacks to update the lists filters.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | kernel-shark.c | 31 | ||||
-rw-r--r-- | trace-graph.c | 12 | ||||
-rw-r--r-- | trace-graph.h | 4 |
3 files changed, 32 insertions, 15 deletions
diff --git a/kernel-shark.c b/kernel-shark.c index ddeee9f..274a13c 100644 --- a/kernel-shark.c +++ b/kernel-shark.c | |||
@@ -83,6 +83,21 @@ static void ks_graph_select(struct graph_info *ginfo, guint64 cursor) | |||
83 | trace_view_select(info->treeview, cursor); | 83 | trace_view_select(info->treeview, cursor); |
84 | } | 84 | } |
85 | 85 | ||
86 | static void ks_graph_filter(struct graph_info *ginfo, | ||
87 | struct filter_task *task_filter, | ||
88 | struct filter_task *hide_tasks) | ||
89 | { | ||
90 | struct graph_callbacks *cbs; | ||
91 | struct shark_info *info; | ||
92 | |||
93 | cbs = trace_graph_get_callbacks(ginfo); | ||
94 | info = container_of(cbs, struct shark_info, graph_cbs); | ||
95 | |||
96 | if (info->list_filter_enabled) | ||
97 | trace_view_update_filters(info->treeview, | ||
98 | task_filter, hide_tasks); | ||
99 | } | ||
100 | |||
86 | static void free_info(struct shark_info *info) | 101 | static void free_info(struct shark_info *info) |
87 | { | 102 | { |
88 | tracecmd_close(info->handle); | 103 | tracecmd_close(info->handle); |
@@ -231,12 +246,6 @@ filter_add_task_clicked (gpointer data) | |||
231 | 246 | ||
232 | trace_graph_filter_add_remove_task(info->ginfo, info->selected_task); | 247 | trace_graph_filter_add_remove_task(info->ginfo, info->selected_task); |
233 | 248 | ||
234 | if (info->list_filter_enabled) { | ||
235 | trace_view_update_filters(info->treeview, | ||
236 | info->ginfo->task_filter, | ||
237 | info->ginfo->hide_tasks); | ||
238 | } | ||
239 | |||
240 | if (!filter_task_count(info->ginfo->task_filter)) | 249 | if (!filter_task_count(info->ginfo->task_filter)) |
241 | info->list_filter_enabled = 0; | 250 | info->list_filter_enabled = 0; |
242 | } | 251 | } |
@@ -248,12 +257,6 @@ filter_hide_task_clicked (gpointer data) | |||
248 | 257 | ||
249 | trace_graph_filter_hide_show_task(info->ginfo, info->selected_task); | 258 | trace_graph_filter_hide_show_task(info->ginfo, info->selected_task); |
250 | 259 | ||
251 | if (info->list_filter_enabled) { | ||
252 | trace_view_update_filters(info->treeview, | ||
253 | info->ginfo->task_filter, | ||
254 | info->ginfo->hide_tasks); | ||
255 | } | ||
256 | |||
257 | if (!filter_task_count(info->ginfo->task_filter) && | 260 | if (!filter_task_count(info->ginfo->task_filter) && |
258 | !filter_task_count(info->ginfo->hide_tasks)) | 261 | !filter_task_count(info->ginfo->hide_tasks)) |
259 | info->list_filter_enabled = 0; | 262 | info->list_filter_enabled = 0; |
@@ -266,9 +269,6 @@ filter_clear_tasks_clicked (gpointer data) | |||
266 | 269 | ||
267 | trace_graph_clear_tasks(info->ginfo); | 270 | trace_graph_clear_tasks(info->ginfo); |
268 | 271 | ||
269 | if (info->list_filter_enabled) | ||
270 | trace_view_update_filters(info->treeview, NULL, NULL); | ||
271 | |||
272 | info->list_filter_enabled = 0; | 272 | info->list_filter_enabled = 0; |
273 | } | 273 | } |
274 | 274 | ||
@@ -593,6 +593,7 @@ void kernel_shark(int argc, char **argv) | |||
593 | /* --- Set up Graph --- */ | 593 | /* --- Set up Graph --- */ |
594 | 594 | ||
595 | info->graph_cbs.select = ks_graph_select; | 595 | info->graph_cbs.select = ks_graph_select; |
596 | info->graph_cbs.filter = ks_graph_filter; | ||
596 | 597 | ||
597 | info->ginfo = trace_graph_create_with_callbacks(handle, &info->graph_cbs); | 598 | info->ginfo = trace_graph_create_with_callbacks(handle, &info->graph_cbs); |
598 | widget = trace_graph_get_window(info->ginfo); | 599 | widget = trace_graph_get_window(info->ginfo); |
diff --git a/trace-graph.c b/trace-graph.c index b530314..513ed92 100644 --- a/trace-graph.c +++ b/trace-graph.c | |||
@@ -344,6 +344,10 @@ void trace_graph_filter_add_remove_task(struct graph_info *ginfo, | |||
344 | else | 344 | else |
345 | graph_filter_task_add_pid(ginfo, pid); | 345 | graph_filter_task_add_pid(ginfo, pid); |
346 | 346 | ||
347 | if (ginfo->callbacks && ginfo->callbacks->filter) | ||
348 | ginfo->callbacks->filter(ginfo, ginfo->task_filter, | ||
349 | ginfo->hide_tasks); | ||
350 | |||
347 | if (filter_enabled) | 351 | if (filter_enabled) |
348 | redraw_graph(ginfo); | 352 | redraw_graph(ginfo); |
349 | } | 353 | } |
@@ -361,6 +365,10 @@ void trace_graph_filter_hide_show_task(struct graph_info *ginfo, | |||
361 | else | 365 | else |
362 | graph_hide_task_add_pid(ginfo, pid); | 366 | graph_hide_task_add_pid(ginfo, pid); |
363 | 367 | ||
368 | if (ginfo->callbacks && ginfo->callbacks->filter) | ||
369 | ginfo->callbacks->filter(ginfo, ginfo->task_filter, | ||
370 | ginfo->hide_tasks); | ||
371 | |||
364 | if (filter_enabled) | 372 | if (filter_enabled) |
365 | redraw_graph(ginfo); | 373 | redraw_graph(ginfo); |
366 | } | 374 | } |
@@ -387,6 +395,10 @@ void trace_graph_clear_tasks(struct graph_info *ginfo) | |||
387 | 395 | ||
388 | graph_filter_task_clear(ginfo); | 396 | graph_filter_task_clear(ginfo); |
389 | 397 | ||
398 | if (ginfo->callbacks && ginfo->callbacks->filter) | ||
399 | ginfo->callbacks->filter(ginfo, ginfo->task_filter, | ||
400 | ginfo->hide_tasks); | ||
401 | |||
390 | if (filter_enabled) | 402 | if (filter_enabled) |
391 | redraw_graph(ginfo); | 403 | redraw_graph(ginfo); |
392 | } | 404 | } |
diff --git a/trace-graph.h b/trace-graph.h index d323acb..36320b3 100644 --- a/trace-graph.h +++ b/trace-graph.h | |||
@@ -7,9 +7,13 @@ | |||
7 | struct graph_info; | 7 | struct graph_info; |
8 | 8 | ||
9 | typedef void (graph_select_cb)(struct graph_info *ginfo, guint64 time); | 9 | typedef void (graph_select_cb)(struct graph_info *ginfo, guint64 time); |
10 | typedef void (graph_filter_cb)(struct graph_info *ginfo, | ||
11 | struct filter_task *task_filter, | ||
12 | struct filter_task *hide_tasks); | ||
10 | 13 | ||
11 | struct graph_callbacks { | 14 | struct graph_callbacks { |
12 | graph_select_cb *select; | 15 | graph_select_cb *select; |
16 | graph_filter_cb *filter; | ||
13 | }; | 17 | }; |
14 | 18 | ||
15 | struct graph_info { | 19 | struct graph_info { |