diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-01-11 17:56:53 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-01-22 16:56:28 -0500 |
commit | 361c99a661a78ed22264649440e87fe4fe8da1f2 (patch) | |
tree | a60bc86f132608f2d41c800760b41f6f54f8e7af /tools/perf/util/evlist.c | |
parent | 00e99a49f6f3a6b5a84ba8bf8f632c9b974bea7a (diff) |
perf evsel: Introduce perf_evlist
Killing two more perf wide global variables: nr_counters and evsel_list
as a list_head.
There are more operations that will need more fields in perf_evlist,
like the pollfd for polling all the fds in a list of evsel instances.
Use option->value to pass the evsel_list to parse_{events,filters}.
LKML-Reference: <new-submission>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/evlist.c')
-rw-r--r-- | tools/perf/util/evlist.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c new file mode 100644 index 000000000000..7b4faec23737 --- /dev/null +++ b/tools/perf/util/evlist.c | |||
@@ -0,0 +1,53 @@ | |||
1 | #include "evlist.h" | ||
2 | #include "evsel.h" | ||
3 | #include "util.h" | ||
4 | |||
5 | struct perf_evlist *perf_evlist__new(void) | ||
6 | { | ||
7 | struct perf_evlist *evlist = zalloc(sizeof(*evlist)); | ||
8 | |||
9 | if (evlist != NULL) { | ||
10 | INIT_LIST_HEAD(&evlist->entries); | ||
11 | } | ||
12 | |||
13 | return evlist; | ||
14 | } | ||
15 | |||
16 | static void perf_evlist__purge(struct perf_evlist *evlist) | ||
17 | { | ||
18 | struct perf_evsel *pos, *n; | ||
19 | |||
20 | list_for_each_entry_safe(pos, n, &evlist->entries, node) { | ||
21 | list_del_init(&pos->node); | ||
22 | perf_evsel__delete(pos); | ||
23 | } | ||
24 | |||
25 | evlist->nr_entries = 0; | ||
26 | } | ||
27 | |||
28 | void perf_evlist__delete(struct perf_evlist *evlist) | ||
29 | { | ||
30 | perf_evlist__purge(evlist); | ||
31 | free(evlist); | ||
32 | } | ||
33 | |||
34 | void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *entry) | ||
35 | { | ||
36 | list_add_tail(&entry->node, &evlist->entries); | ||
37 | ++evlist->nr_entries; | ||
38 | } | ||
39 | |||
40 | int perf_evlist__add_default(struct perf_evlist *evlist) | ||
41 | { | ||
42 | struct perf_event_attr attr = { | ||
43 | .type = PERF_TYPE_HARDWARE, | ||
44 | .config = PERF_COUNT_HW_CPU_CYCLES, | ||
45 | }; | ||
46 | struct perf_evsel *evsel = perf_evsel__new(&attr, 0); | ||
47 | |||
48 | if (evsel == NULL) | ||
49 | return -ENOMEM; | ||
50 | |||
51 | perf_evlist__add(evlist, evsel); | ||
52 | return 0; | ||
53 | } | ||