Blame view

tools/perf/util/evsel.h 4.22 KB
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
1
2
3
4
  #ifndef __PERF_EVSEL_H
  #define __PERF_EVSEL_H 1
  
  #include <linux/list.h>
c52b12ed2   Arnaldo Carvalho de Melo   perf evsel: Steal...
5
  #include <stdbool.h>
d030260ad   Stephane Eranian   perf tools: Fix p...
6
  #include "../../../include/linux/perf_event.h"
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
7
8
  #include "types.h"
  #include "xyarray.h"
023695d96   Stephane Eranian   perf tool: Add cg...
9
  #include "cgroup.h"
e248de331   Arnaldo Carvalho de Melo   perf tools: Impro...
10
  #include "hist.h"
c52b12ed2   Arnaldo Carvalho de Melo   perf evsel: Steal...
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   
  struct perf_counts_values {
  	union {
  		struct {
  			u64 val;
  			u64 ena;
  			u64 run;
  		};
  		u64 values[3];
  	};
  };
  
  struct perf_counts {
  	s8		   	  scaled;
  	struct perf_counts_values aggr;
  	struct perf_counts_values cpu[];
  };
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
28

70db7533c   Arnaldo Carvalho de Melo   perf evlist: Move...
29
30
31
32
33
34
35
36
37
38
39
  struct perf_evsel;
  
  /*
   * Per fd, to map back from PERF_SAMPLE_ID to evsel, only used when there are
   * more than one entry in the evlist.
   */
  struct perf_sample_id {
  	struct hlist_node 	node;
  	u64		 	id;
  	struct perf_evsel	*evsel;
  };
f0c55bcf4   Stephane Eranian   perf: make perf s...
40
41
42
43
44
45
  /** struct perf_evsel - event selector
   *
   * @name - Can be set to retain the original event name passed by the user,
   *         so that when showing results in tools such as 'perf stat', we
   *         show the name used, not some alias.
   */
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
46
47
48
49
50
  struct perf_evsel {
  	struct list_head	node;
  	struct perf_event_attr	attr;
  	char			*filter;
  	struct xyarray		*fd;
a91e5431d   Arnaldo Carvalho de Melo   perf session: Use...
51
52
  	struct xyarray		*sample_id;
  	u64			*id;
c52b12ed2   Arnaldo Carvalho de Melo   perf evsel: Steal...
53
  	struct perf_counts	*counts;
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
54
  	int			idx;
a91e5431d   Arnaldo Carvalho de Melo   perf session: Use...
55
  	int			ids;
e248de331   Arnaldo Carvalho de Melo   perf tools: Impro...
56
  	struct hists		hists;
f0c55bcf4   Stephane Eranian   perf: make perf s...
57
  	char			*name;
a91e5431d   Arnaldo Carvalho de Melo   perf session: Use...
58
59
60
61
  	union {
  		void		*priv;
  		off_t		id_offset;
  	};
023695d96   Stephane Eranian   perf tool: Add cg...
62
  	struct cgroup_sel	*cgrp;
2cee77c45   David Ahern   perf stat: clarif...
63
  	bool 			supported;
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
64
  };
86bd5e860   Arnaldo Carvalho de Melo   perf evsel: Use {...
65
66
  struct cpu_map;
  struct thread_map;
70082dd92   Arnaldo Carvalho de Melo   perf evsel: Intro...
67
  struct perf_evlist;
86bd5e860   Arnaldo Carvalho de Melo   perf evsel: Use {...
68

23a2f3ab4   Lin Ming   perf tools: Pass ...
69
  struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr, int idx);
ef1d1af28   Arnaldo Carvalho de Melo   perf evsel: Intro...
70
71
72
  void perf_evsel__init(struct perf_evsel *evsel,
  		      struct perf_event_attr *attr, int idx);
  void perf_evsel__exit(struct perf_evsel *evsel);
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
73
74
75
  void perf_evsel__delete(struct perf_evsel *evsel);
  
  int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads);
70db7533c   Arnaldo Carvalho de Melo   perf evlist: Move...
76
  int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads);
c52b12ed2   Arnaldo Carvalho de Melo   perf evsel: Steal...
77
  int perf_evsel__alloc_counts(struct perf_evsel *evsel, int ncpus);
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
78
  void perf_evsel__free_fd(struct perf_evsel *evsel);
70db7533c   Arnaldo Carvalho de Melo   perf evlist: Move...
79
  void perf_evsel__free_id(struct perf_evsel *evsel);
c52b12ed2   Arnaldo Carvalho de Melo   perf evsel: Steal...
80
  void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads);
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
81

f08199d31   Arnaldo Carvalho de Melo   perf evsel: Suppo...
82
  int perf_evsel__open_per_cpu(struct perf_evsel *evsel,
5d2cd9092   Arnaldo Carvalho de Melo   perf evsel: Fix u...
83
  			     struct cpu_map *cpus, bool group);
f08199d31   Arnaldo Carvalho de Melo   perf evsel: Suppo...
84
  int perf_evsel__open_per_thread(struct perf_evsel *evsel,
5d2cd9092   Arnaldo Carvalho de Melo   perf evsel: Fix u...
85
  				struct thread_map *threads, bool group);
f08199d31   Arnaldo Carvalho de Melo   perf evsel: Suppo...
86
  int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
5d2cd9092   Arnaldo Carvalho de Melo   perf evsel: Fix u...
87
  		     struct thread_map *threads, bool group);
48290609c   Arnaldo Carvalho de Melo   perf evsel: Intro...
88

daec78a09   Arnaldo Carvalho de Melo   perf evsel: Adopt...
89
90
91
  #define perf_evsel__match(evsel, t, c)		\
  	(evsel->attr.type == PERF_TYPE_##t &&	\
  	 evsel->attr.config == PERF_COUNT_##c)
c52b12ed2   Arnaldo Carvalho de Melo   perf evsel: Steal...
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
  int __perf_evsel__read_on_cpu(struct perf_evsel *evsel,
  			      int cpu, int thread, bool scale);
  
  /**
   * perf_evsel__read_on_cpu - Read out the results on a CPU and thread
   *
   * @evsel - event selector to read value
   * @cpu - CPU of interest
   * @thread - thread of interest
   */
  static inline int perf_evsel__read_on_cpu(struct perf_evsel *evsel,
  					  int cpu, int thread)
  {
  	return __perf_evsel__read_on_cpu(evsel, cpu, thread, false);
  }
  
  /**
   * perf_evsel__read_on_cpu_scaled - Read out the results on a CPU and thread, scaled
   *
   * @evsel - event selector to read value
   * @cpu - CPU of interest
   * @thread - thread of interest
   */
  static inline int perf_evsel__read_on_cpu_scaled(struct perf_evsel *evsel,
  						 int cpu, int thread)
  {
  	return __perf_evsel__read_on_cpu(evsel, cpu, thread, true);
  }
  
  int __perf_evsel__read(struct perf_evsel *evsel, int ncpus, int nthreads,
  		       bool scale);
  
  /**
   * perf_evsel__read - Read the aggregate results on all CPUs
   *
   * @evsel - event selector to read value
   * @ncpus - Number of cpus affected, from zero
   * @nthreads - Number of threads affected, from zero
   */
  static inline int perf_evsel__read(struct perf_evsel *evsel,
  				    int ncpus, int nthreads)
  {
  	return __perf_evsel__read(evsel, ncpus, nthreads, false);
  }
  
  /**
   * perf_evsel__read_scaled - Read the aggregate results on all CPUs, scaled
   *
   * @evsel - event selector to read value
   * @ncpus - Number of cpus affected, from zero
   * @nthreads - Number of threads affected, from zero
   */
  static inline int perf_evsel__read_scaled(struct perf_evsel *evsel,
  					  int ncpus, int nthreads)
  {
  	return __perf_evsel__read(evsel, ncpus, nthreads, true);
  }
c2a70653a   Arnaldo Carvalho de Melo   perf evlist: Don'...
149
150
151
152
153
154
  int __perf_evsel__sample_size(u64 sample_type);
  
  static inline int perf_evsel__sample_size(struct perf_evsel *evsel)
  {
  	return __perf_evsel__sample_size(evsel->attr.sample_type);
  }
69aad6f1e   Arnaldo Carvalho de Melo   perf tools: Intro...
155
  #endif /* __PERF_EVSEL_H */