Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/tools/perf/util/event.h
10821 views
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
*/
12
struct ip_event {
13
struct perf_event_header header;
14
u64 ip;
15
u32 pid, tid;
16
unsigned char __more_data[];
17
};
18
19
struct 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
28
struct comm_event {
29
struct perf_event_header header;
30
u32 pid, tid;
31
char comm[16];
32
};
33
34
struct fork_event {
35
struct perf_event_header header;
36
u32 pid, ppid;
37
u32 tid, ptid;
38
u64 time;
39
};
40
41
struct 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
*/
50
struct 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
66
struct sample_event {
67
struct perf_event_header header;
68
u64 array[];
69
};
70
71
struct 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
87
struct 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
94
enum 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
104
struct 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
112
struct perf_trace_event_type {
113
u64 event_id;
114
char name[MAX_EVENT_NAME];
115
};
116
117
struct event_type_event {
118
struct perf_event_header header;
119
struct perf_trace_event_type event_type;
120
};
121
122
struct tracing_data_event {
123
struct perf_event_header header;
124
u32 size;
125
};
126
127
union 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
142
void perf_event__print_totals(void);
143
144
struct perf_session;
145
struct thread_map;
146
147
typedef int (*perf_event__handler_synth_t)(union perf_event *event,
148
struct perf_session *session);
149
typedef int (*perf_event__handler_t)(union perf_event *event,
150
struct perf_sample *sample,
151
struct perf_session *session);
152
153
int perf_event__synthesize_thread_map(struct thread_map *threads,
154
perf_event__handler_t process,
155
struct perf_session *session);
156
int perf_event__synthesize_threads(perf_event__handler_t process,
157
struct perf_session *session);
158
int 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
163
int perf_event__synthesize_modules(perf_event__handler_t process,
164
struct perf_session *session,
165
struct machine *machine);
166
167
int perf_event__process_comm(union perf_event *event, struct perf_sample *sample,
168
struct perf_session *session);
169
int perf_event__process_lost(union perf_event *event, struct perf_sample *sample,
170
struct perf_session *session);
171
int perf_event__process_mmap(union perf_event *event, struct perf_sample *sample,
172
struct perf_session *session);
173
int perf_event__process_task(union perf_event *event, struct perf_sample *sample,
174
struct perf_session *session);
175
int perf_event__process(union perf_event *event, struct perf_sample *sample,
176
struct perf_session *session);
177
178
struct addr_location;
179
int 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
185
const char *perf_event__name(unsigned int id);
186
187
int perf_event__parse_sample(const union perf_event *event, u64 type,
188
int sample_size, bool sample_id_all,
189
struct perf_sample *sample);
190
191
#endif /* __PERF_RECORD_H */
192
193