From 39876e7dd385e0f0a438ee0ab13cf75a4f5e0e3b Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Wed, 3 Oct 2012 11:40:22 -0300 Subject: perf evlist: Introduce add_newtp method To reduce the boilerplate of creating and adding a new tracepoint to an evlist. Cc: David Ahern Cc: Frederic Weisbecker Cc: Jiri Olsa Cc: Mike Galbraith Cc: Namhyung Kim Cc: Paul Mackerras Cc: Peter Zijlstra Cc: Stephane Eranian Link: http://lkml.kernel.org/n/tip-4z90i79gnmsza2czv2dhdrb7@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-trace.c | 18 +++--------------- tools/perf/util/evlist.c | 14 ++++++++++++++ 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 76b1202c03c..dec8ced61fb 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -200,24 +200,12 @@ static int trace__run(struct trace *trace) goto out; } - evsel = perf_evsel__newtp("raw_syscalls", "sys_enter", 0); - if (evsel == NULL) { - printf("Couldn't read the raw_syscalls:sys_enter tracepoint information!\n"); + if (perf_evlist__add_newtp(evlist, "raw_syscalls", "sys_enter", trace__sys_enter) || + perf_evlist__add_newtp(evlist, "raw_syscalls", "sys_exit", trace__sys_exit)) { + printf("Couldn't read the raw_syscalls tracepoints information!\n"); goto out_delete_evlist; } - evsel->handler.func = trace__sys_enter; - perf_evlist__add(evlist, evsel); - - evsel = perf_evsel__newtp("raw_syscalls", "sys_exit", 1); - if (evsel == NULL) { - printf("Couldn't read the raw_syscalls:sys_exit tracepoint information!\n"); - goto out_delete_evlist; - } - - evsel->handler.func = trace__sys_exit; - perf_evlist__add(evlist, evsel); - err = perf_evlist__create_maps(evlist, &trace->opts.target); if (err < 0) { 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 ae89686102f..6a2809fd257 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -285,6 +285,20 @@ out: return err; } +int perf_evlist__add_newtp(struct perf_evlist *evlist, + const char *sys, const char *name, void *handler) +{ + struct perf_evsel *evsel; + + evsel = perf_evsel__newtp(sys, name, evlist->nr_entries); + if (evsel == NULL) + return -1; + + evsel->handler.func = handler; + perf_evlist__add(evlist, evsel); + return 0; +} + void perf_evlist__disable(struct perf_evlist *evlist) { int cpu, thread; diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 3f1fb66be02..ac98b010f1c 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, #define perf_evlist__set_tracepoints_handlers_array(evlist, array) \ perf_evlist__set_tracepoints_handlers(evlist, array, ARRAY_SIZE(array)) +int perf_evlist__add_newtp(struct perf_evlist *evlist, + const char *sys, const char *name, void *handler); + int perf_evlist__set_filter(struct perf_evlist *evlist, const char *filter); struct perf_evsel * -- cgit v1.2.3