diff options
Diffstat (limited to 'tools/perf/util/evsel.h')
-rw-r--r-- | tools/perf/util/evsel.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h new file mode 100644 index 000000000000..863d78d5ef1a --- /dev/null +++ b/tools/perf/util/evsel.h | |||
@@ -0,0 +1,115 @@ | |||
1 | #ifndef __PERF_EVSEL_H | ||
2 | #define __PERF_EVSEL_H 1 | ||
3 | |||
4 | #include <linux/list.h> | ||
5 | #include <stdbool.h> | ||
6 | #include <linux/perf_event.h> | ||
7 | #include "types.h" | ||
8 | #include "xyarray.h" | ||
9 | |||
10 | struct perf_counts_values { | ||
11 | union { | ||
12 | struct { | ||
13 | u64 val; | ||
14 | u64 ena; | ||
15 | u64 run; | ||
16 | }; | ||
17 | u64 values[3]; | ||
18 | }; | ||
19 | }; | ||
20 | |||
21 | struct perf_counts { | ||
22 | s8 scaled; | ||
23 | struct perf_counts_values aggr; | ||
24 | struct perf_counts_values cpu[]; | ||
25 | }; | ||
26 | |||
27 | struct perf_evsel { | ||
28 | struct list_head node; | ||
29 | struct perf_event_attr attr; | ||
30 | char *filter; | ||
31 | struct xyarray *fd; | ||
32 | struct perf_counts *counts; | ||
33 | int idx; | ||
34 | void *priv; | ||
35 | }; | ||
36 | |||
37 | struct cpu_map; | ||
38 | struct thread_map; | ||
39 | |||
40 | struct perf_evsel *perf_evsel__new(u32 type, u64 config, int idx); | ||
41 | void perf_evsel__delete(struct perf_evsel *evsel); | ||
42 | |||
43 | int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | ||
44 | int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus); | ||
45 | void perf_evsel__free_fd(struct perf_evsel *evsel); | ||
46 | void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads); | ||
47 | |||
48 | int perf_evsel__open_per_cpu(struct perf_evsel *evsel, struct cpu_map *cpus); | ||
49 | int perf_evsel__open_per_thread(struct perf_evsel *evsel, struct thread_map *threads); | ||
50 | int perf_evsel__open(struct perf_evsel *evsel, | ||
51 | struct cpu_map *cpus, struct thread_map *threads); | ||
52 | |||
53 | #define perf_evsel__match(evsel, t, c) \ | ||
54 | (evsel->attr.type == PERF_TYPE_##t && \ | ||
55 | evsel->attr.config == PERF_COUNT_##c) | ||
56 | |||
57 | int __perf_evsel__read_on_cpu(struct perf_evsel *evsel, | ||
58 | int cpu, int thread, bool scale); | ||
59 | |||
60 | /** | ||
61 | * perf_evsel__read_on_cpu - Read out the results on a CPU and thread | ||
62 | * | ||
63 | * @evsel - event selector to read value | ||
64 | * @cpu - CPU of interest | ||
65 | * @thread - thread of interest | ||
66 | */ | ||
67 | static inline int perf_evsel__read_on_cpu(struct perf_evsel *evsel, | ||
68 | int cpu, int thread) | ||
69 | { | ||
70 | return __perf_evsel__read_on_cpu(evsel, cpu, thread, false); | ||
71 | } | ||
72 | |||
73 | /** | ||
74 | * perf_evsel__read_on_cpu_scaled - Read out the results on a CPU and thread, scaled | ||
75 | * | ||
76 | * @evsel - event selector to read value | ||
77 | * @cpu - CPU of interest | ||
78 | * @thread - thread of interest | ||
79 | */ | ||
80 | static inline int perf_evsel__read_on_cpu_scaled(struct perf_evsel *evsel, | ||
81 | int cpu, int thread) | ||
82 | { | ||
83 | return __perf_evsel__read_on_cpu(evsel, cpu, thread, true); | ||
84 | } | ||
85 | |||
86 | int __perf_evsel__read(struct perf_evsel *evsel, int ncpus, int nthreads, | ||
87 | bool scale); | ||
88 | |||
89 | /** | ||
90 | * perf_evsel__read - Read the aggregate results on all CPUs | ||
91 | * | ||
92 | * @evsel - event selector to read value | ||
93 | * @ncpus - Number of cpus affected, from zero | ||
94 | * @nthreads - Number of threads affected, from zero | ||
95 | */ | ||
96 | static inline int perf_evsel__read(struct perf_evsel *evsel, | ||
97 | int ncpus, int nthreads) | ||
98 | { | ||
99 | return __perf_evsel__read(evsel, ncpus, nthreads, false); | ||
100 | } | ||
101 | |||
102 | /** | ||
103 | * perf_evsel__read_scaled - Read the aggregate results on all CPUs, scaled | ||
104 | * | ||
105 | * @evsel - event selector to read value | ||
106 | * @ncpus - Number of cpus affected, from zero | ||
107 | * @nthreads - Number of threads affected, from zero | ||
108 | */ | ||
109 | static inline int perf_evsel__read_scaled(struct perf_evsel *evsel, | ||
110 | int ncpus, int nthreads) | ||
111 | { | ||
112 | return __perf_evsel__read(evsel, ncpus, nthreads, true); | ||
113 | } | ||
114 | |||
115 | #endif /* __PERF_EVSEL_H */ | ||