aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-01-07 15:52:21 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-01-07 15:52:21 -0500
commit80020d43359030107f7f25e5b8b1f0d61d7fc6fa (patch)
treef15c75e12c22407c30dee3f8a67d1a3eebcc880e
parent30f7571850c130f3e48b6c05df0c1f092f59106b (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.c31
-rw-r--r--trace-graph.c12
-rw-r--r--trace-graph.h4
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
86static 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
86static void free_info(struct shark_info *info) 101static 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 @@
7struct graph_info; 7struct graph_info;
8 8
9typedef void (graph_select_cb)(struct graph_info *ginfo, guint64 time); 9typedef void (graph_select_cb)(struct graph_info *ginfo, guint64 time);
10typedef void (graph_filter_cb)(struct graph_info *ginfo,
11 struct filter_task *task_filter,
12 struct filter_task *hide_tasks);
10 13
11struct graph_callbacks { 14struct graph_callbacks {
12 graph_select_cb *select; 15 graph_select_cb *select;
16 graph_filter_cb *filter;
13}; 17};
14 18
15struct graph_info { 19struct graph_info {