Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/android/binder_trace.h
26378 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) 2012 Google, Inc.
4
*/
5
6
#undef TRACE_SYSTEM
7
#define TRACE_SYSTEM binder
8
9
#if !defined(_BINDER_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
10
#define _BINDER_TRACE_H
11
12
#include <linux/tracepoint.h>
13
14
struct binder_buffer;
15
struct binder_node;
16
struct binder_proc;
17
struct binder_alloc;
18
struct binder_ref_data;
19
struct binder_thread;
20
struct binder_transaction;
21
22
TRACE_EVENT(binder_ioctl,
23
TP_PROTO(unsigned int cmd, unsigned long arg),
24
TP_ARGS(cmd, arg),
25
26
TP_STRUCT__entry(
27
__field(unsigned int, cmd)
28
__field(unsigned long, arg)
29
),
30
TP_fast_assign(
31
__entry->cmd = cmd;
32
__entry->arg = arg;
33
),
34
TP_printk("cmd=0x%x arg=0x%lx", __entry->cmd, __entry->arg)
35
);
36
37
DECLARE_EVENT_CLASS(binder_function_return_class,
38
TP_PROTO(int ret),
39
TP_ARGS(ret),
40
TP_STRUCT__entry(
41
__field(int, ret)
42
),
43
TP_fast_assign(
44
__entry->ret = ret;
45
),
46
TP_printk("ret=%d", __entry->ret)
47
);
48
49
#define DEFINE_BINDER_FUNCTION_RETURN_EVENT(name) \
50
DEFINE_EVENT(binder_function_return_class, name, \
51
TP_PROTO(int ret), \
52
TP_ARGS(ret))
53
54
DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_ioctl_done);
55
DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_write_done);
56
DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_read_done);
57
58
TRACE_EVENT(binder_wait_for_work,
59
TP_PROTO(bool proc_work, bool transaction_stack, bool thread_todo),
60
TP_ARGS(proc_work, transaction_stack, thread_todo),
61
62
TP_STRUCT__entry(
63
__field(bool, proc_work)
64
__field(bool, transaction_stack)
65
__field(bool, thread_todo)
66
),
67
TP_fast_assign(
68
__entry->proc_work = proc_work;
69
__entry->transaction_stack = transaction_stack;
70
__entry->thread_todo = thread_todo;
71
),
72
TP_printk("proc_work=%d transaction_stack=%d thread_todo=%d",
73
__entry->proc_work, __entry->transaction_stack,
74
__entry->thread_todo)
75
);
76
77
TRACE_EVENT(binder_txn_latency_free,
78
TP_PROTO(struct binder_transaction *t,
79
int from_proc, int from_thread,
80
int to_proc, int to_thread),
81
TP_ARGS(t, from_proc, from_thread, to_proc, to_thread),
82
TP_STRUCT__entry(
83
__field(int, debug_id)
84
__field(int, from_proc)
85
__field(int, from_thread)
86
__field(int, to_proc)
87
__field(int, to_thread)
88
__field(unsigned int, code)
89
__field(unsigned int, flags)
90
),
91
TP_fast_assign(
92
__entry->debug_id = t->debug_id;
93
__entry->from_proc = from_proc;
94
__entry->from_thread = from_thread;
95
__entry->to_proc = to_proc;
96
__entry->to_thread = to_thread;
97
__entry->code = t->code;
98
__entry->flags = t->flags;
99
),
100
TP_printk("transaction=%d from %d:%d to %d:%d flags=0x%x code=0x%x",
101
__entry->debug_id, __entry->from_proc, __entry->from_thread,
102
__entry->to_proc, __entry->to_thread, __entry->code,
103
__entry->flags)
104
);
105
106
TRACE_EVENT(binder_transaction,
107
TP_PROTO(bool reply, struct binder_transaction *t,
108
struct binder_node *target_node),
109
TP_ARGS(reply, t, target_node),
110
TP_STRUCT__entry(
111
__field(int, debug_id)
112
__field(int, target_node)
113
__field(int, to_proc)
114
__field(int, to_thread)
115
__field(int, reply)
116
__field(unsigned int, code)
117
__field(unsigned int, flags)
118
),
119
TP_fast_assign(
120
__entry->debug_id = t->debug_id;
121
__entry->target_node = target_node ? target_node->debug_id : 0;
122
__entry->to_proc = t->to_proc->pid;
123
__entry->to_thread = t->to_thread ? t->to_thread->pid : 0;
124
__entry->reply = reply;
125
__entry->code = t->code;
126
__entry->flags = t->flags;
127
),
128
TP_printk("transaction=%d dest_node=%d dest_proc=%d dest_thread=%d reply=%d flags=0x%x code=0x%x",
129
__entry->debug_id, __entry->target_node,
130
__entry->to_proc, __entry->to_thread,
131
__entry->reply, __entry->flags, __entry->code)
132
);
133
134
TRACE_EVENT(binder_transaction_received,
135
TP_PROTO(struct binder_transaction *t),
136
TP_ARGS(t),
137
138
TP_STRUCT__entry(
139
__field(int, debug_id)
140
),
141
TP_fast_assign(
142
__entry->debug_id = t->debug_id;
143
),
144
TP_printk("transaction=%d", __entry->debug_id)
145
);
146
147
TRACE_EVENT(binder_transaction_node_to_ref,
148
TP_PROTO(struct binder_transaction *t, struct binder_node *node,
149
struct binder_ref_data *rdata),
150
TP_ARGS(t, node, rdata),
151
152
TP_STRUCT__entry(
153
__field(int, debug_id)
154
__field(int, node_debug_id)
155
__field(binder_uintptr_t, node_ptr)
156
__field(int, ref_debug_id)
157
__field(uint32_t, ref_desc)
158
),
159
TP_fast_assign(
160
__entry->debug_id = t->debug_id;
161
__entry->node_debug_id = node->debug_id;
162
__entry->node_ptr = node->ptr;
163
__entry->ref_debug_id = rdata->debug_id;
164
__entry->ref_desc = rdata->desc;
165
),
166
TP_printk("transaction=%d node=%d src_ptr=0x%016llx ==> dest_ref=%d dest_desc=%d",
167
__entry->debug_id, __entry->node_debug_id,
168
(u64)__entry->node_ptr,
169
__entry->ref_debug_id, __entry->ref_desc)
170
);
171
172
TRACE_EVENT(binder_transaction_ref_to_node,
173
TP_PROTO(struct binder_transaction *t, struct binder_node *node,
174
struct binder_ref_data *rdata),
175
TP_ARGS(t, node, rdata),
176
177
TP_STRUCT__entry(
178
__field(int, debug_id)
179
__field(int, ref_debug_id)
180
__field(uint32_t, ref_desc)
181
__field(int, node_debug_id)
182
__field(binder_uintptr_t, node_ptr)
183
),
184
TP_fast_assign(
185
__entry->debug_id = t->debug_id;
186
__entry->ref_debug_id = rdata->debug_id;
187
__entry->ref_desc = rdata->desc;
188
__entry->node_debug_id = node->debug_id;
189
__entry->node_ptr = node->ptr;
190
),
191
TP_printk("transaction=%d node=%d src_ref=%d src_desc=%d ==> dest_ptr=0x%016llx",
192
__entry->debug_id, __entry->node_debug_id,
193
__entry->ref_debug_id, __entry->ref_desc,
194
(u64)__entry->node_ptr)
195
);
196
197
TRACE_EVENT(binder_transaction_ref_to_ref,
198
TP_PROTO(struct binder_transaction *t, struct binder_node *node,
199
struct binder_ref_data *src_ref,
200
struct binder_ref_data *dest_ref),
201
TP_ARGS(t, node, src_ref, dest_ref),
202
203
TP_STRUCT__entry(
204
__field(int, debug_id)
205
__field(int, node_debug_id)
206
__field(int, src_ref_debug_id)
207
__field(uint32_t, src_ref_desc)
208
__field(int, dest_ref_debug_id)
209
__field(uint32_t, dest_ref_desc)
210
),
211
TP_fast_assign(
212
__entry->debug_id = t->debug_id;
213
__entry->node_debug_id = node->debug_id;
214
__entry->src_ref_debug_id = src_ref->debug_id;
215
__entry->src_ref_desc = src_ref->desc;
216
__entry->dest_ref_debug_id = dest_ref->debug_id;
217
__entry->dest_ref_desc = dest_ref->desc;
218
),
219
TP_printk("transaction=%d node=%d src_ref=%d src_desc=%d ==> dest_ref=%d dest_desc=%d",
220
__entry->debug_id, __entry->node_debug_id,
221
__entry->src_ref_debug_id, __entry->src_ref_desc,
222
__entry->dest_ref_debug_id, __entry->dest_ref_desc)
223
);
224
225
TRACE_EVENT(binder_transaction_fd_send,
226
TP_PROTO(struct binder_transaction *t, int fd, size_t offset),
227
TP_ARGS(t, fd, offset),
228
229
TP_STRUCT__entry(
230
__field(int, debug_id)
231
__field(int, fd)
232
__field(size_t, offset)
233
),
234
TP_fast_assign(
235
__entry->debug_id = t->debug_id;
236
__entry->fd = fd;
237
__entry->offset = offset;
238
),
239
TP_printk("transaction=%d src_fd=%d offset=%zu",
240
__entry->debug_id, __entry->fd, __entry->offset)
241
);
242
243
TRACE_EVENT(binder_transaction_fd_recv,
244
TP_PROTO(struct binder_transaction *t, int fd, size_t offset),
245
TP_ARGS(t, fd, offset),
246
247
TP_STRUCT__entry(
248
__field(int, debug_id)
249
__field(int, fd)
250
__field(size_t, offset)
251
),
252
TP_fast_assign(
253
__entry->debug_id = t->debug_id;
254
__entry->fd = fd;
255
__entry->offset = offset;
256
),
257
TP_printk("transaction=%d dest_fd=%d offset=%zu",
258
__entry->debug_id, __entry->fd, __entry->offset)
259
);
260
261
DECLARE_EVENT_CLASS(binder_buffer_class,
262
TP_PROTO(struct binder_buffer *buf),
263
TP_ARGS(buf),
264
TP_STRUCT__entry(
265
__field(int, debug_id)
266
__field(size_t, data_size)
267
__field(size_t, offsets_size)
268
__field(size_t, extra_buffers_size)
269
),
270
TP_fast_assign(
271
__entry->debug_id = buf->debug_id;
272
__entry->data_size = buf->data_size;
273
__entry->offsets_size = buf->offsets_size;
274
__entry->extra_buffers_size = buf->extra_buffers_size;
275
),
276
TP_printk("transaction=%d data_size=%zd offsets_size=%zd extra_buffers_size=%zd",
277
__entry->debug_id, __entry->data_size, __entry->offsets_size,
278
__entry->extra_buffers_size)
279
);
280
281
DEFINE_EVENT(binder_buffer_class, binder_transaction_alloc_buf,
282
TP_PROTO(struct binder_buffer *buffer),
283
TP_ARGS(buffer));
284
285
DEFINE_EVENT(binder_buffer_class, binder_transaction_buffer_release,
286
TP_PROTO(struct binder_buffer *buffer),
287
TP_ARGS(buffer));
288
289
DEFINE_EVENT(binder_buffer_class, binder_transaction_failed_buffer_release,
290
TP_PROTO(struct binder_buffer *buffer),
291
TP_ARGS(buffer));
292
293
DEFINE_EVENT(binder_buffer_class, binder_transaction_update_buffer_release,
294
TP_PROTO(struct binder_buffer *buffer),
295
TP_ARGS(buffer));
296
297
TRACE_EVENT(binder_update_page_range,
298
TP_PROTO(struct binder_alloc *alloc, bool allocate,
299
unsigned long start, unsigned long end),
300
TP_ARGS(alloc, allocate, start, end),
301
TP_STRUCT__entry(
302
__field(int, proc)
303
__field(bool, allocate)
304
__field(size_t, offset)
305
__field(size_t, size)
306
),
307
TP_fast_assign(
308
__entry->proc = alloc->pid;
309
__entry->allocate = allocate;
310
__entry->offset = start - alloc->vm_start;
311
__entry->size = end - start;
312
),
313
TP_printk("proc=%d allocate=%d offset=%zu size=%zu",
314
__entry->proc, __entry->allocate,
315
__entry->offset, __entry->size)
316
);
317
318
DECLARE_EVENT_CLASS(binder_lru_page_class,
319
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
320
TP_ARGS(alloc, page_index),
321
TP_STRUCT__entry(
322
__field(int, proc)
323
__field(size_t, page_index)
324
),
325
TP_fast_assign(
326
__entry->proc = alloc->pid;
327
__entry->page_index = page_index;
328
),
329
TP_printk("proc=%d page_index=%zu",
330
__entry->proc, __entry->page_index)
331
);
332
333
DEFINE_EVENT(binder_lru_page_class, binder_alloc_lru_start,
334
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
335
TP_ARGS(alloc, page_index));
336
337
DEFINE_EVENT(binder_lru_page_class, binder_alloc_lru_end,
338
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
339
TP_ARGS(alloc, page_index));
340
341
DEFINE_EVENT(binder_lru_page_class, binder_free_lru_start,
342
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
343
TP_ARGS(alloc, page_index));
344
345
DEFINE_EVENT(binder_lru_page_class, binder_free_lru_end,
346
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
347
TP_ARGS(alloc, page_index));
348
349
DEFINE_EVENT(binder_lru_page_class, binder_alloc_page_start,
350
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
351
TP_ARGS(alloc, page_index));
352
353
DEFINE_EVENT(binder_lru_page_class, binder_alloc_page_end,
354
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
355
TP_ARGS(alloc, page_index));
356
357
DEFINE_EVENT(binder_lru_page_class, binder_unmap_user_start,
358
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
359
TP_ARGS(alloc, page_index));
360
361
DEFINE_EVENT(binder_lru_page_class, binder_unmap_user_end,
362
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
363
TP_ARGS(alloc, page_index));
364
365
DEFINE_EVENT(binder_lru_page_class, binder_unmap_kernel_start,
366
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
367
TP_ARGS(alloc, page_index));
368
369
DEFINE_EVENT(binder_lru_page_class, binder_unmap_kernel_end,
370
TP_PROTO(const struct binder_alloc *alloc, size_t page_index),
371
TP_ARGS(alloc, page_index));
372
373
TRACE_EVENT(binder_command,
374
TP_PROTO(uint32_t cmd),
375
TP_ARGS(cmd),
376
TP_STRUCT__entry(
377
__field(uint32_t, cmd)
378
),
379
TP_fast_assign(
380
__entry->cmd = cmd;
381
),
382
TP_printk("cmd=0x%x %s",
383
__entry->cmd,
384
_IOC_NR(__entry->cmd) < ARRAY_SIZE(binder_command_strings) ?
385
binder_command_strings[_IOC_NR(__entry->cmd)] :
386
"unknown")
387
);
388
389
TRACE_EVENT(binder_return,
390
TP_PROTO(uint32_t cmd),
391
TP_ARGS(cmd),
392
TP_STRUCT__entry(
393
__field(uint32_t, cmd)
394
),
395
TP_fast_assign(
396
__entry->cmd = cmd;
397
),
398
TP_printk("cmd=0x%x %s",
399
__entry->cmd,
400
_IOC_NR(__entry->cmd) < ARRAY_SIZE(binder_return_strings) ?
401
binder_return_strings[_IOC_NR(__entry->cmd)] :
402
"unknown")
403
);
404
405
#endif /* _BINDER_TRACE_H */
406
407
#undef TRACE_INCLUDE_PATH
408
#undef TRACE_INCLUDE_FILE
409
#define TRACE_INCLUDE_PATH .
410
#define TRACE_INCLUDE_FILE binder_trace
411
#include <trace/define_trace.h>
412
413