diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-10-03 10:40:22 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-10-03 10:41:22 -0400 |
commit | 39876e7dd385e0f0a438ee0ab13cf75a4f5e0e3b (patch) | |
tree | 70aade536c1561191cf80e103c21475100e682b6 | |
parent | de332ac40f69f4f18111d53817b46da73e1fcbf9 (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.c | 18 | ||||
-rw-r--r-- | tools/perf/util/evlist.c | 14 | ||||
-rw-r--r-- | tools/perf/util/evlist.h | 3 |
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 | ||
288 | int 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 | |||
288 | void perf_evlist__disable(struct perf_evlist *evlist) | 302 | void 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 | ||
75 | int perf_evlist__add_newtp(struct perf_evlist *evlist, | ||
76 | const char *sys, const char *name, void *handler); | ||
77 | |||
75 | int perf_evlist__set_filter(struct perf_evlist *evlist, const char *filter); | 78 | int perf_evlist__set_filter(struct perf_evlist *evlist, const char *filter); |
76 | 79 | ||
77 | struct perf_evsel * | 80 | struct perf_evsel * |