perf evlist: Adopt the pollfd array
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / tools / perf / util / evlist.c
1 #include <poll.h>
2 #include "evlist.h"
3 #include "evsel.h"
4 #include "util.h"
5
6 struct perf_evlist *perf_evlist__new(void)
7 {
8 struct perf_evlist *evlist = zalloc(sizeof(*evlist));
9
10 if (evlist != NULL) {
11 INIT_LIST_HEAD(&evlist->entries);
12 }
13
14 return evlist;
15 }
16
17 static void perf_evlist__purge(struct perf_evlist *evlist)
18 {
19 struct perf_evsel *pos, *n;
20
21 list_for_each_entry_safe(pos, n, &evlist->entries, node) {
22 list_del_init(&pos->node);
23 perf_evsel__delete(pos);
24 }
25
26 evlist->nr_entries = 0;
27 }
28
29 void perf_evlist__delete(struct perf_evlist *evlist)
30 {
31 perf_evlist__purge(evlist);
32 free(evlist->pollfd);
33 free(evlist);
34 }
35
36 void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry)
37 {
38 list_add_tail(&entry->node, &evlist->entries);
39 ++evlist->nr_entries;
40 }
41
42 int perf_evlist__add_default(struct perf_evlist *evlist)
43 {
44 struct perf_event_attr attr = {
45 .type = PERF_TYPE_HARDWARE,
46 .config = PERF_COUNT_HW_CPU_CYCLES,
47 };
48 struct perf_evsel *evsel = perf_evsel__new(&attr, 0);
49
50 if (evsel == NULL)
51 return -ENOMEM;
52
53 perf_evlist__add(evlist, evsel);
54 return 0;
55 }
56
57 int perf_evlist__alloc_pollfd(struct perf_evlist *evlist, int ncpus, int nthreads)
58 {
59 int nfds = ncpus * nthreads * evlist->nr_entries;
60 evlist->pollfd = malloc(sizeof(struct pollfd) * nfds);
61 return evlist->pollfd != NULL ? 0 : -ENOMEM;
62 }