aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/evlist.c28
-rw-r--r--tools/perf/util/evlist.h3
2 files changed, 31 insertions, 0 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index b9eac0daa0b9..fa6dbf0ea0d6 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -68,6 +68,18 @@ struct perf_evlist *perf_evlist__new_default(void)
68 return evlist; 68 return evlist;
69} 69}
70 70
71struct perf_evlist *perf_evlist__new_dummy(void)
72{
73 struct perf_evlist *evlist = perf_evlist__new();
74
75 if (evlist && perf_evlist__add_dummy(evlist)) {
76 perf_evlist__delete(evlist);
77 evlist = NULL;
78 }
79
80 return evlist;
81}
82
71/** 83/**
72 * perf_evlist__set_id_pos - set the positions of event ids. 84 * perf_evlist__set_id_pos - set the positions of event ids.
73 * @evlist: selected event list 85 * @evlist: selected event list
@@ -248,6 +260,22 @@ error:
248 return -ENOMEM; 260 return -ENOMEM;
249} 261}
250 262
263int perf_evlist__add_dummy(struct perf_evlist *evlist)
264{
265 struct perf_event_attr attr = {
266 .type = PERF_TYPE_SOFTWARE,
267 .config = PERF_COUNT_SW_DUMMY,
268 .size = sizeof(attr), /* to capture ABI version */
269 };
270 struct perf_evsel *evsel = perf_evsel__new(&attr);
271
272 if (evsel == NULL)
273 return -ENOMEM;
274
275 perf_evlist__add(evlist, evsel);
276 return 0;
277}
278
251static int perf_evlist__add_attrs(struct perf_evlist *evlist, 279static int perf_evlist__add_attrs(struct perf_evlist *evlist,
252 struct perf_event_attr *attrs, size_t nr_attrs) 280 struct perf_event_attr *attrs, size_t nr_attrs)
253{ 281{
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index 139a50038097..3b7e1e2f1a86 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -67,6 +67,7 @@ struct perf_evsel_str_handler {
67 67
68struct perf_evlist *perf_evlist__new(void); 68struct perf_evlist *perf_evlist__new(void);
69struct perf_evlist *perf_evlist__new_default(void); 69struct perf_evlist *perf_evlist__new_default(void);
70struct perf_evlist *perf_evlist__new_dummy(void);
70void perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus, 71void perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus,
71 struct thread_map *threads); 72 struct thread_map *threads);
72void perf_evlist__exit(struct perf_evlist *evlist); 73void perf_evlist__exit(struct perf_evlist *evlist);
@@ -81,6 +82,8 @@ int __perf_evlist__add_default_attrs(struct perf_evlist *evlist,
81#define perf_evlist__add_default_attrs(evlist, array) \ 82#define perf_evlist__add_default_attrs(evlist, array) \
82 __perf_evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array)) 83 __perf_evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array))
83 84
85int perf_evlist__add_dummy(struct perf_evlist *evlist);
86
84int perf_evlist__add_newtp(struct perf_evlist *evlist, 87int perf_evlist__add_newtp(struct perf_evlist *evlist,
85 const char *sys, const char *name, void *handler); 88 const char *sys, const char *name, void *handler);
86 89