aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2016-07-28 17:33:20 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-07-28 17:33:20 -0400
commit7c48dcfd32b45b69aa8d5e81108fff8c7a2272ed (patch)
treef4f810f369bbf4c0002f310014d287b99cc50448 /tools
parent674d2d69b14f677a771ceec4b48bfade94a0c5f1 (diff)
perf evsel: Introduce constructor for cycles event
That is the default used when no events is specified in tools, separate it so that simpler tools that need no evlist can use it directly. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/n/tip-67mwuthscwroz88x9pswcqyv@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/evlist.c22
-rw-r--r--tools/perf/util/evsel.c28
-rw-r--r--tools/perf/util/evsel.h2
3 files changed, 32 insertions, 20 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 2a40b8e1def7..097b3ed77fdd 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -239,31 +239,13 @@ void perf_event_attr__set_max_precise_ip(struct perf_event_attr *attr)
239 239
240int perf_evlist__add_default(struct perf_evlist *evlist) 240int perf_evlist__add_default(struct perf_evlist *evlist)
241{ 241{
242 struct perf_event_attr attr = { 242 struct perf_evsel *evsel = perf_evsel__new_cycles();
243 .type = PERF_TYPE_HARDWARE,
244 .config = PERF_COUNT_HW_CPU_CYCLES,
245 };
246 struct perf_evsel *evsel;
247
248 event_attr_init(&attr);
249 243
250 perf_event_attr__set_max_precise_ip(&attr);
251
252 evsel = perf_evsel__new(&attr);
253 if (evsel == NULL) 244 if (evsel == NULL)
254 goto error; 245 return -ENOMEM;
255
256 /* use asprintf() because free(evsel) assumes name is allocated */
257 if (asprintf(&evsel->name, "cycles%.*s",
258 attr.precise_ip ? attr.precise_ip + 1 : 0, ":ppp") < 0)
259 goto error_free;
260 246
261 perf_evlist__add(evlist, evsel); 247 perf_evlist__add(evlist, evsel);
262 return 0; 248 return 0;
263error_free:
264 perf_evsel__delete(evsel);
265error:
266 return -ENOMEM;
267} 249}
268 250
269int perf_evlist__add_dummy(struct perf_evlist *evlist) 251int perf_evlist__add_dummy(struct perf_evlist *evlist)
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 8c54df61fe64..4c2b31dc4e4d 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -253,6 +253,34 @@ struct perf_evsel *perf_evsel__new_idx(struct perf_event_attr *attr, int idx)
253 return evsel; 253 return evsel;
254} 254}
255 255
256struct perf_evsel *perf_evsel__new_cycles(void)
257{
258 struct perf_event_attr attr = {
259 .type = PERF_TYPE_HARDWARE,
260 .config = PERF_COUNT_HW_CPU_CYCLES,
261 };
262 struct perf_evsel *evsel;
263
264 event_attr_init(&attr);
265
266 perf_event_attr__set_max_precise_ip(&attr);
267
268 evsel = perf_evsel__new(&attr);
269 if (evsel == NULL)
270 goto out;
271
272 /* use asprintf() because free(evsel) assumes name is allocated */
273 if (asprintf(&evsel->name, "cycles%.*s",
274 attr.precise_ip ? attr.precise_ip + 1 : 0, ":ppp") < 0)
275 goto error_free;
276out:
277 return evsel;
278error_free:
279 perf_evsel__delete(evsel);
280 evsel = NULL;
281 goto out;
282}
283
256/* 284/*
257 * Returns pointer with encoded error via <linux/err.h> interface. 285 * Returns pointer with encoded error via <linux/err.h> interface.
258 */ 286 */
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 8a4a6c9f1480..4d44129e050b 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -175,6 +175,8 @@ static inline struct perf_evsel *perf_evsel__newtp(const char *sys, const char *
175 return perf_evsel__newtp_idx(sys, name, 0); 175 return perf_evsel__newtp_idx(sys, name, 0);
176} 176}
177 177
178struct perf_evsel *perf_evsel__new_cycles(void);
179
178struct event_format *event_format__new(const char *sys, const char *name); 180struct event_format *event_format__new(const char *sys, const char *name);
179 181
180void perf_evsel__init(struct perf_evsel *evsel, 182void perf_evsel__init(struct perf_evsel *evsel,