aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2012-10-03 10:40:22 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2012-10-03 10:41:22 -0400
commit39876e7dd385e0f0a438ee0ab13cf75a4f5e0e3b (patch)
tree70aade536c1561191cf80e103c21475100e682b6
parentde332ac40f69f4f18111d53817b46da73e1fcbf9 (diff)
perf evlist: Introduce add_newtp method
To reduce the boilerplate of creating and adding a new tracepoint to an evlist. Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-4z90i79gnmsza2czv2dhdrb7@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/builtin-trace.c18
-rw-r--r--tools/perf/util/evlist.c14
-rw-r--r--tools/perf/util/evlist.h3
3 files changed, 20 insertions, 15 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 76b1202c03c8..dec8ced61fb0 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -200,24 +200,12 @@ static int trace__run(struct trace *trace)
200 goto out; 200 goto out;
201 } 201 }
202 202
203 evsel = perf_evsel__newtp("raw_syscalls", "sys_enter", 0); 203 if (perf_evlist__add_newtp(evlist, "raw_syscalls", "sys_enter", trace__sys_enter) ||
204 if (evsel == NULL) { 204 perf_evlist__add_newtp(evlist, "raw_syscalls", "sys_exit", trace__sys_exit)) {
205 printf("Couldn't read the raw_syscalls:sys_enter tracepoint information!\n"); 205 printf("Couldn't read the raw_syscalls tracepoints information!\n");
206 goto out_delete_evlist; 206 goto out_delete_evlist;
207 } 207 }
208 208
209 evsel->handler.func = trace__sys_enter;
210 perf_evlist__add(evlist, evsel);
211
212 evsel = perf_evsel__newtp("raw_syscalls", "sys_exit", 1);
213 if (evsel == NULL) {
214 printf("Couldn't read the raw_syscalls:sys_exit tracepoint information!\n");
215 goto out_delete_evlist;
216 }
217
218 evsel->handler.func = trace__sys_exit;
219 perf_evlist__add(evlist, evsel);
220
221 err = perf_evlist__create_maps(evlist, &trace->opts.target); 209 err = perf_evlist__create_maps(evlist, &trace->opts.target);
222 if (err < 0) { 210 if (err < 0) {
223 printf("Problems parsing the target to trace, check your options!\n"); 211 printf("Problems parsing the target to trace, check your options!\n");
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index ae89686102f4..6a2809fd257e 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -285,6 +285,20 @@ out:
285 return err; 285 return err;
286} 286}
287 287
288int perf_evlist__add_newtp(struct perf_evlist *evlist,
289 const char *sys, const char *name, void *handler)
290{
291 struct perf_evsel *evsel;
292
293 evsel = perf_evsel__newtp(sys, name, evlist->nr_entries);
294 if (evsel == NULL)
295 return -1;
296
297 evsel->handler.func = handler;
298 perf_evlist__add(evlist, evsel);
299 return 0;
300}
301
288void perf_evlist__disable(struct perf_evlist *evlist) 302void perf_evlist__disable(struct perf_evlist *evlist)
289{ 303{
290 int cpu, thread; 304 int cpu, thread;
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index 3f1fb66be022..ac98b010f1c9 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -72,6 +72,9 @@ int perf_evlist__set_tracepoints_handlers(struct perf_evlist *evlist,
72#define perf_evlist__set_tracepoints_handlers_array(evlist, array) \ 72#define perf_evlist__set_tracepoints_handlers_array(evlist, array) \
73 perf_evlist__set_tracepoints_handlers(evlist, array, ARRAY_SIZE(array)) 73 perf_evlist__set_tracepoints_handlers(evlist, array, ARRAY_SIZE(array))
74 74
75int perf_evlist__add_newtp(struct perf_evlist *evlist,
76 const char *sys, const char *name, void *handler);
77
75int perf_evlist__set_filter(struct perf_evlist *evlist, const char *filter); 78int perf_evlist__set_filter(struct perf_evlist *evlist, const char *filter);
76 79
77struct perf_evsel * 80struct perf_evsel *