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.1
  1#ifndef __PERF_RECORD_H
  2#define __PERF_RECORD_H
  3
  4#include <limits.h>
 
  5
  6#include "../perf.h"
  7#include "map.h"
  8
  9/*
 10 * PERF_SAMPLE_IP | PERF_SAMPLE_TID | *
 11 */
 12struct ip_event {
 13	struct perf_event_header header;
 14	u64 ip;
 15	u32 pid, tid;
 16	unsigned char __more_data[];
 17};
 18
 19struct mmap_event {
 20	struct perf_event_header header;
 21	u32 pid, tid;
 22	u64 start;
 23	u64 len;
 24	u64 pgoff;
 25	char filename[PATH_MAX];
 26};
 27
 28struct comm_event {
 29	struct perf_event_header header;
 30	u32 pid, tid;
 31	char comm[16];
 32};
 33
 34struct fork_event {
 35	struct perf_event_header header;
 36	u32 pid, ppid;
 37	u32 tid, ptid;
 38	u64 time;
 39};
 40
 41struct lost_event {
 42	struct perf_event_header header;
 43	u64 id;
 44	u64 lost;
 45};
 46
 47/*
 48 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
 49 */
 50struct read_event {
 51	struct perf_event_header header;
 52	u32 pid, tid;
 53	u64 value;
 54	u64 time_enabled;
 55	u64 time_running;
 56	u64 id;
 57};
 58
 59
 60#define PERF_SAMPLE_MASK				\
 61	(PERF_SAMPLE_IP | PERF_SAMPLE_TID |		\
 62	 PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR |		\
 63	PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID |	\
 64	 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
 65
 66struct sample_event {
 67	struct perf_event_header        header;
 68	u64 array[];
 69};
 70
 71struct perf_sample {
 72	u64 ip;
 73	u32 pid, tid;
 74	u64 time;
 75	u64 addr;
 76	u64 id;
 77	u64 stream_id;
 78	u64 period;
 79	u32 cpu;
 80	u32 raw_size;
 81	void *raw_data;
 82	struct ip_callchain *callchain;
 
 83};
 84
 85#define BUILD_ID_SIZE 20
 86
 87struct build_id_event {
 88	struct perf_event_header header;
 89	pid_t			 pid;
 90	u8			 build_id[ALIGN(BUILD_ID_SIZE, sizeof(u64))];
 91	char			 filename[];
 92};
 93
 94enum perf_user_event_type { /* above any possible kernel type */
 95	PERF_RECORD_USER_TYPE_START		= 64,
 96	PERF_RECORD_HEADER_ATTR			= 64,
 97	PERF_RECORD_HEADER_EVENT_TYPE		= 65,
 98	PERF_RECORD_HEADER_TRACING_DATA		= 66,
 99	PERF_RECORD_HEADER_BUILD_ID		= 67,
100	PERF_RECORD_FINISHED_ROUND		= 68,
101	PERF_RECORD_HEADER_MAX
102};
103
104struct attr_event {
105	struct perf_event_header header;
106	struct perf_event_attr attr;
107	u64 id[];
108};
109
110#define MAX_EVENT_NAME 64
111
112struct perf_trace_event_type {
113	u64	event_id;
114	char	name[MAX_EVENT_NAME];
115};
116
117struct event_type_event {
118	struct perf_event_header header;
119	struct perf_trace_event_type event_type;
120};
121
122struct tracing_data_event {
123	struct perf_event_header header;
124	u32 size;
125};
126
127union perf_event {
128	struct perf_event_header	header;
129	struct ip_event			ip;
130	struct mmap_event		mmap;
131	struct comm_event		comm;
132	struct fork_event		fork;
133	struct lost_event		lost;
134	struct read_event		read;
135	struct sample_event		sample;
136	struct attr_event		attr;
137	struct event_type_event		event_type;
138	struct tracing_data_event	tracing_data;
139	struct build_id_event		build_id;
140};
141
142void perf_event__print_totals(void);
143
144struct perf_session;
145struct thread_map;
146
147typedef int (*perf_event__handler_synth_t)(union perf_event *event, 
148					   struct perf_session *session);
149typedef int (*perf_event__handler_t)(union perf_event *event,
150				     struct perf_sample *sample,
151				      struct perf_session *session);
152
153int perf_event__synthesize_thread_map(struct thread_map *threads,
 
154				      perf_event__handler_t process,
155				      struct perf_session *session);
156int perf_event__synthesize_threads(perf_event__handler_t process,
157				   struct perf_session *session);
158int perf_event__synthesize_kernel_mmap(perf_event__handler_t process,
159				       struct perf_session *session,
 
160				       struct machine *machine,
161				       const char *symbol_name);
162
163int perf_event__synthesize_modules(perf_event__handler_t process,
164				   struct perf_session *session,
165				   struct machine *machine);
166
167int perf_event__process_comm(union perf_event *event, struct perf_sample *sample,
168			     struct perf_session *session);
169int perf_event__process_lost(union perf_event *event, struct perf_sample *sample,
170			     struct perf_session *session);
171int perf_event__process_mmap(union perf_event *event, struct perf_sample *sample,
172			     struct perf_session *session);
173int perf_event__process_task(union perf_event *event, struct perf_sample *sample,
174			     struct perf_session *session);
175int perf_event__process(union perf_event *event, struct perf_sample *sample,
176			struct perf_session *session);
 
 
 
 
 
 
 
 
 
 
177
178struct addr_location;
179int perf_event__preprocess_sample(const union perf_event *self,
180				  struct perf_session *session,
181				  struct addr_location *al,
182				  struct perf_sample *sample,
183				  symbol_filter_t filter);
184
185const char *perf_event__name(unsigned int id);
186
187int perf_event__parse_sample(const union perf_event *event, u64 type,
188			     int sample_size, bool sample_id_all,
189			     struct perf_sample *sample, bool swapped);
 
 
 
 
 
 
 
 
190
191#endif /* __PERF_RECORD_H */