Linux Audio

Check our new training course

Loading...
v3.5.6
  1#ifndef __PERF_RECORD_H
  2#define __PERF_RECORD_H
  3
  4#include <limits.h>
  5#include <stdio.h>
  6
  7#include "../perf.h"
  8#include "map.h"
 
  9
 10/*
 11 * PERF_SAMPLE_IP | PERF_SAMPLE_TID | *
 12 */
 13struct ip_event {
 14	struct perf_event_header header;
 15	u64 ip;
 16	u32 pid, tid;
 17	unsigned char __more_data[];
 
 
 
 18};
 19
 20struct mmap_event {
 21	struct perf_event_header header;
 22	u32 pid, tid;
 23	u64 start;
 24	u64 len;
 25	u64 pgoff;
 
 
 
 
 26	char filename[PATH_MAX];
 27};
 28
 29struct comm_event {
 30	struct perf_event_header header;
 31	u32 pid, tid;
 32	char comm[16];
 33};
 34
 35struct fork_event {
 36	struct perf_event_header header;
 37	u32 pid, ppid;
 38	u32 tid, ptid;
 39	u64 time;
 40};
 41
 42struct lost_event {
 43	struct perf_event_header header;
 44	u64 id;
 45	u64 lost;
 46};
 47
 48/*
 49 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
 50 */
 51struct read_event {
 52	struct perf_event_header header;
 53	u32 pid, tid;
 54	u64 value;
 55	u64 time_enabled;
 56	u64 time_running;
 57	u64 id;
 58};
 59
 
 
 
 
 
 
 60
 61#define PERF_SAMPLE_MASK				\
 62	(PERF_SAMPLE_IP | PERF_SAMPLE_TID |		\
 63	 PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR |		\
 64	PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID |	\
 65	 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
 
 
 
 
 66
 67struct sample_event {
 68	struct perf_event_header        header;
 69	u64 array[];
 70};
 71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 72struct perf_sample {
 73	u64 ip;
 74	u32 pid, tid;
 75	u64 time;
 76	u64 addr;
 77	u64 id;
 78	u64 stream_id;
 79	u64 period;
 
 
 80	u32 cpu;
 81	u32 raw_size;
 
 82	void *raw_data;
 83	struct ip_callchain *callchain;
 84	struct branch_stack *branch_stack;
 
 
 
 85};
 86
 87#define BUILD_ID_SIZE 20
 
 
 
 
 
 88
 89struct build_id_event {
 90	struct perf_event_header header;
 91	pid_t			 pid;
 92	u8			 build_id[ALIGN(BUILD_ID_SIZE, sizeof(u64))];
 93	char			 filename[];
 94};
 95
 96enum perf_user_event_type { /* above any possible kernel type */
 97	PERF_RECORD_USER_TYPE_START		= 64,
 98	PERF_RECORD_HEADER_ATTR			= 64,
 99	PERF_RECORD_HEADER_EVENT_TYPE		= 65,
100	PERF_RECORD_HEADER_TRACING_DATA		= 66,
101	PERF_RECORD_HEADER_BUILD_ID		= 67,
102	PERF_RECORD_FINISHED_ROUND		= 68,
103	PERF_RECORD_HEADER_MAX
104};
105
106struct attr_event {
107	struct perf_event_header header;
108	struct perf_event_attr attr;
109	u64 id[];
110};
111
112#define MAX_EVENT_NAME 64
113
114struct perf_trace_event_type {
115	u64	event_id;
116	char	name[MAX_EVENT_NAME];
117};
118
119struct event_type_event {
120	struct perf_event_header header;
121	struct perf_trace_event_type event_type;
122};
123
124struct tracing_data_event {
125	struct perf_event_header header;
126	u32 size;
127};
128
129union perf_event {
130	struct perf_event_header	header;
131	struct ip_event			ip;
132	struct mmap_event		mmap;
 
133	struct comm_event		comm;
134	struct fork_event		fork;
135	struct lost_event		lost;
136	struct read_event		read;
 
137	struct sample_event		sample;
138	struct attr_event		attr;
139	struct event_type_event		event_type;
140	struct tracing_data_event	tracing_data;
141	struct build_id_event		build_id;
142};
143
144void perf_event__print_totals(void);
145
146struct perf_tool;
147struct thread_map;
148
149typedef int (*perf_event__handler_t)(struct perf_tool *tool,
150				     union perf_event *event,
151				     struct perf_sample *sample,
152				     struct machine *machine);
153
154int perf_event__synthesize_thread_map(struct perf_tool *tool,
155				      struct thread_map *threads,
156				      perf_event__handler_t process,
157				      struct machine *machine);
158int perf_event__synthesize_threads(struct perf_tool *tool,
159				   perf_event__handler_t process,
160				   struct machine *machine);
161int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
162				       perf_event__handler_t process,
163				       struct machine *machine,
164				       const char *symbol_name);
165
166int perf_event__synthesize_modules(struct perf_tool *tool,
167				   perf_event__handler_t process,
168				   struct machine *machine);
169
170int perf_event__process_comm(struct perf_tool *tool,
171			     union perf_event *event,
172			     struct perf_sample *sample,
173			     struct machine *machine);
174int perf_event__process_lost(struct perf_tool *tool,
175			     union perf_event *event,
176			     struct perf_sample *sample,
177			     struct machine *machine);
178int perf_event__process_mmap(struct perf_tool *tool,
179			     union perf_event *event,
180			     struct perf_sample *sample,
181			     struct machine *machine);
182int perf_event__process_task(struct perf_tool *tool,
 
 
 
 
 
 
 
 
183			     union perf_event *event,
184			     struct perf_sample *sample,
185			     struct machine *machine);
186int perf_event__process(struct perf_tool *tool,
187			union perf_event *event,
188			struct perf_sample *sample,
189			struct machine *machine);
190
191struct addr_location;
192int perf_event__preprocess_sample(const union perf_event *self,
 
193				  struct machine *machine,
194				  struct addr_location *al,
195				  struct perf_sample *sample,
196				  symbol_filter_t filter);
197
198const char *perf_event__name(unsigned int id);
199
200int perf_event__parse_sample(const union perf_event *event, u64 type,
201			     int sample_size, bool sample_id_all,
202			     struct perf_sample *sample, bool swapped);
203int perf_event__synthesize_sample(union perf_event *event, u64 type,
 
204				  const struct perf_sample *sample,
205				  bool swapped);
206
 
 
 
 
 
 
 
207size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp);
208size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp);
 
209size_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
210size_t perf_event__fprintf(union perf_event *event, FILE *fp);
 
 
 
211
212#endif /* __PERF_RECORD_H */
v3.15
  1#ifndef __PERF_RECORD_H
  2#define __PERF_RECORD_H
  3
  4#include <limits.h>
  5#include <stdio.h>
  6
  7#include "../perf.h"
  8#include "map.h"
  9#include "build-id.h"
 10
 11struct mmap_event {
 
 
 
 12	struct perf_event_header header;
 
 13	u32 pid, tid;
 14	u64 start;
 15	u64 len;
 16	u64 pgoff;
 17	char filename[PATH_MAX];
 18};
 19
 20struct mmap2_event {
 21	struct perf_event_header header;
 22	u32 pid, tid;
 23	u64 start;
 24	u64 len;
 25	u64 pgoff;
 26	u32 maj;
 27	u32 min;
 28	u64 ino;
 29	u64 ino_generation;
 30	char filename[PATH_MAX];
 31};
 32
 33struct comm_event {
 34	struct perf_event_header header;
 35	u32 pid, tid;
 36	char comm[16];
 37};
 38
 39struct fork_event {
 40	struct perf_event_header header;
 41	u32 pid, ppid;
 42	u32 tid, ptid;
 43	u64 time;
 44};
 45
 46struct lost_event {
 47	struct perf_event_header header;
 48	u64 id;
 49	u64 lost;
 50};
 51
 52/*
 53 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
 54 */
 55struct read_event {
 56	struct perf_event_header header;
 57	u32 pid, tid;
 58	u64 value;
 59	u64 time_enabled;
 60	u64 time_running;
 61	u64 id;
 62};
 63
 64struct throttle_event {
 65	struct perf_event_header header;
 66	u64 time;
 67	u64 id;
 68	u64 stream_id;
 69};
 70
 71#define PERF_SAMPLE_MASK				\
 72	(PERF_SAMPLE_IP | PERF_SAMPLE_TID |		\
 73	 PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR |		\
 74	PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID |	\
 75	 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD |		\
 76	 PERF_SAMPLE_IDENTIFIER)
 77
 78/* perf sample has 16 bits size limit */
 79#define PERF_SAMPLE_MAX_SIZE (1 << 16)
 80
 81struct sample_event {
 82	struct perf_event_header        header;
 83	u64 array[];
 84};
 85
 86struct regs_dump {
 87	u64 abi;
 88	u64 mask;
 89	u64 *regs;
 90};
 91
 92struct stack_dump {
 93	u16 offset;
 94	u64 size;
 95	char *data;
 96};
 97
 98struct sample_read_value {
 99	u64 value;
100	u64 id;
101};
102
103struct sample_read {
104	u64 time_enabled;
105	u64 time_running;
106	union {
107		struct {
108			u64 nr;
109			struct sample_read_value *values;
110		} group;
111		struct sample_read_value one;
112	};
113};
114
115struct perf_sample {
116	u64 ip;
117	u32 pid, tid;
118	u64 time;
119	u64 addr;
120	u64 id;
121	u64 stream_id;
122	u64 period;
123	u64 weight;
124	u64 transaction;
125	u32 cpu;
126	u32 raw_size;
127	u64 data_src;
128	void *raw_data;
129	struct ip_callchain *callchain;
130	struct branch_stack *branch_stack;
131	struct regs_dump  user_regs;
132	struct stack_dump user_stack;
133	struct sample_read read;
134};
135
136#define PERF_MEM_DATA_SRC_NONE \
137	(PERF_MEM_S(OP, NA) |\
138	 PERF_MEM_S(LVL, NA) |\
139	 PERF_MEM_S(SNOOP, NA) |\
140	 PERF_MEM_S(LOCK, NA) |\
141	 PERF_MEM_S(TLB, NA))
142
143struct build_id_event {
144	struct perf_event_header header;
145	pid_t			 pid;
146	u8			 build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))];
147	char			 filename[];
148};
149
150enum perf_user_event_type { /* above any possible kernel type */
151	PERF_RECORD_USER_TYPE_START		= 64,
152	PERF_RECORD_HEADER_ATTR			= 64,
153	PERF_RECORD_HEADER_EVENT_TYPE		= 65, /* depreceated */
154	PERF_RECORD_HEADER_TRACING_DATA		= 66,
155	PERF_RECORD_HEADER_BUILD_ID		= 67,
156	PERF_RECORD_FINISHED_ROUND		= 68,
157	PERF_RECORD_HEADER_MAX
158};
159
160struct attr_event {
161	struct perf_event_header header;
162	struct perf_event_attr attr;
163	u64 id[];
164};
165
166#define MAX_EVENT_NAME 64
167
168struct perf_trace_event_type {
169	u64	event_id;
170	char	name[MAX_EVENT_NAME];
171};
172
173struct event_type_event {
174	struct perf_event_header header;
175	struct perf_trace_event_type event_type;
176};
177
178struct tracing_data_event {
179	struct perf_event_header header;
180	u32 size;
181};
182
183union perf_event {
184	struct perf_event_header	header;
 
185	struct mmap_event		mmap;
186	struct mmap2_event		mmap2;
187	struct comm_event		comm;
188	struct fork_event		fork;
189	struct lost_event		lost;
190	struct read_event		read;
191	struct throttle_event		throttle;
192	struct sample_event		sample;
193	struct attr_event		attr;
194	struct event_type_event		event_type;
195	struct tracing_data_event	tracing_data;
196	struct build_id_event		build_id;
197};
198
199void perf_event__print_totals(void);
200
201struct perf_tool;
202struct thread_map;
203
204typedef int (*perf_event__handler_t)(struct perf_tool *tool,
205				     union perf_event *event,
206				     struct perf_sample *sample,
207				     struct machine *machine);
208
209int perf_event__synthesize_thread_map(struct perf_tool *tool,
210				      struct thread_map *threads,
211				      perf_event__handler_t process,
212				      struct machine *machine, bool mmap_data);
213int perf_event__synthesize_threads(struct perf_tool *tool,
214				   perf_event__handler_t process,
215				   struct machine *machine, bool mmap_data);
216int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
217				       perf_event__handler_t process,
218				       struct machine *machine);
 
219
220int perf_event__synthesize_modules(struct perf_tool *tool,
221				   perf_event__handler_t process,
222				   struct machine *machine);
223
224int perf_event__process_comm(struct perf_tool *tool,
225			     union perf_event *event,
226			     struct perf_sample *sample,
227			     struct machine *machine);
228int perf_event__process_lost(struct perf_tool *tool,
229			     union perf_event *event,
230			     struct perf_sample *sample,
231			     struct machine *machine);
232int perf_event__process_mmap(struct perf_tool *tool,
233			     union perf_event *event,
234			     struct perf_sample *sample,
235			     struct machine *machine);
236int perf_event__process_mmap2(struct perf_tool *tool,
237			     union perf_event *event,
238			     struct perf_sample *sample,
239			     struct machine *machine);
240int perf_event__process_fork(struct perf_tool *tool,
241			     union perf_event *event,
242			     struct perf_sample *sample,
243			     struct machine *machine);
244int perf_event__process_exit(struct perf_tool *tool,
245			     union perf_event *event,
246			     struct perf_sample *sample,
247			     struct machine *machine);
248int perf_event__process(struct perf_tool *tool,
249			union perf_event *event,
250			struct perf_sample *sample,
251			struct machine *machine);
252
253struct addr_location;
254
255int perf_event__preprocess_sample(const union perf_event *event,
256				  struct machine *machine,
257				  struct addr_location *al,
258				  struct perf_sample *sample);
 
259
260const char *perf_event__name(unsigned int id);
261
262size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
263				     u64 read_format);
 
264int perf_event__synthesize_sample(union perf_event *event, u64 type,
265				  u64 read_format,
266				  const struct perf_sample *sample,
267				  bool swapped);
268
269int perf_event__synthesize_mmap_events(struct perf_tool *tool,
270				       union perf_event *event,
271				       pid_t pid, pid_t tgid,
272				       perf_event__handler_t process,
273				       struct machine *machine,
274				       bool mmap_data);
275
276size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp);
277size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp);
278size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp);
279size_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
280size_t perf_event__fprintf(union perf_event *event, FILE *fp);
281
282u64 kallsyms__get_function_start(const char *kallsyms_filename,
283				 const char *symbol_name);
284
285#endif /* __PERF_RECORD_H */