xref: /aosp_15_r20/external/mesa3d/src/gallium/drivers/freedreno/freedreno_tracepoints.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1#
2# Copyright © 2020 Google, Inc.
3#
4# SPDX-License-Identifier: MIT
5#
6
7import argparse
8import sys
9
10#
11# TODO can we do this with less boilerplate?
12#
13parser = argparse.ArgumentParser()
14parser.add_argument('-p', '--import-path', required=True)
15parser.add_argument('-C', '--src', required=True)
16parser.add_argument('-H', '--hdr', required=True)
17args = parser.parse_args()
18sys.path.insert(0, args.import_path)
19
20
21from u_trace import Header
22from u_trace import Tracepoint
23from u_trace import TracepointArg
24from u_trace import utrace_generate
25
26# List of the default tracepoints enabled. By default tracepoints are enabled,
27# set tp_default_enabled=False to disable them by default.
28fd_default_tps = []
29
30#
31# Tracepoint definitions:
32#
33
34Header('util/u_dump.h')
35Header('freedreno_batch.h')
36
37
38def begin_end_tp(name, args=[], tp_struct=None, tp_print=None,
39                 tp_default_enabled=True):
40    global fd_default_tps
41    if tp_default_enabled:
42        fd_default_tps.append(name)
43    Tracepoint('start_{0}'.format(name),
44               toggle_name=name,
45               args=args,
46               tp_struct=tp_struct,
47               tp_perfetto='fd_start_{0}'.format(name),
48               tp_print=tp_print,
49               tp_markers='fd_cs_trace_start')
50    Tracepoint('end_{0}'.format(name),
51               toggle_name=name,
52               tp_perfetto='fd_end_{0}'.format(name),
53               tp_markers='fd_cs_trace_end')
54
55
56def singular_tp(name, args=[], tp_struct=None, tp_print=None,
57                tp_default_enabled=True):
58    global fd_default_tps
59    if tp_default_enabled:
60        fd_default_tps.append(name)
61    Tracepoint(name,
62               toggle_name=name,
63               args=args,
64               tp_struct=tp_struct,
65               tp_print=tp_print,
66               tp_markers='fd_cs_trace_msg')
67
68begin_end_tp('state_restore')
69
70singular_tp('flush_batch',
71    args=[TracepointArg(type='struct fd_batch *', var='batch',       c_format='%p'),
72          TracepointArg(type='uint16_t',          var='cleared',     c_format='%x'),
73          TracepointArg(type='uint16_t',          var='gmem_reason', c_format='%x'),
74          TracepointArg(type='uint16_t',          var='num_draws',   c_format='%u')],
75    tp_print=['%p: cleared=%x, gmem_reason=%x, num_draws=%u', '__entry->batch',
76        '__entry->cleared', '__entry->gmem_reason', '__entry->num_draws'],
77)
78
79singular_tp('render_gmem',
80    args=[TracepointArg(type='uint16_t', var='nbins_x', c_format='%u'),
81          TracepointArg(type='uint16_t', var='nbins_y', c_format='%u'),
82          TracepointArg(type='uint16_t', var='bin_w',   c_format='%u'),
83          TracepointArg(type='uint16_t', var='bin_h',   c_format='%u')],
84    tp_print=['%ux%u bins of %ux%u',
85        '__entry->nbins_x', '__entry->nbins_y', '__entry->bin_w', '__entry->bin_h'],
86)
87
88singular_tp('render_sysmem')
89
90# Note that this doesn't include full information about all of the MRTs
91# but seems to roughly match what I see with a blob trace
92begin_end_tp('render_pass',
93    args=[TracepointArg(type='uint32_t',         var='submit_id',     c_format='%u'),
94          TracepointArg(type='enum pipe_format', var='cbuf0_format',  c_format='%s', to_prim_type='util_format_description({})->short_name'),
95          TracepointArg(type='enum pipe_format', var='zs_format',     c_format='%s', to_prim_type='util_format_description({})->short_name'),
96          TracepointArg(type='uint16_t',         var='width',         c_format='%u'),
97          TracepointArg(type='uint16_t',         var='height',        c_format='%u'),
98          TracepointArg(type='uint8_t',          var='mrts',          c_format='%u'),
99          TracepointArg(type='uint8_t',          var='samples',       c_format='%u'),
100          TracepointArg(type='uint16_t',         var='nbins',         c_format='%u'),
101          TracepointArg(type='uint16_t',         var='binw',          c_format='%u'),
102          TracepointArg(type='uint16_t',         var='binh',          c_format='%u')],
103)
104
105begin_end_tp('binning_ib')
106begin_end_tp('vsc_overflow_test')
107begin_end_tp('prologue')
108
109# Either sysmem or gmem clears
110begin_end_tp('clears',
111    args=[TracepointArg(type='uint16_t', var='fast_cleared', c_format='0x%x')],
112    tp_print=['fast_cleared: 0x%x', '__entry->fast_cleared'],
113)
114
115begin_end_tp('tile_loads',
116    args=[TracepointArg(type='uint16_t', var='load', c_format='0x%x')],
117    tp_print=['load=0x%x', '__entry->load'],
118)
119
120begin_end_tp('tile_stores',
121    args=[TracepointArg(type='uint16_t', var='store', c_format='0x%x')],
122    tp_print=['store: 0x%x', '__entry->store'],
123)
124
125singular_tp('start_tile',
126    args=[TracepointArg(type='uint16_t', var='bin_h', c_format='%u'),
127          TracepointArg(type='uint16_t', var='yoff',  c_format='%u'),
128          TracepointArg(type='uint16_t', var='bin_w', c_format='%u'),
129          TracepointArg(type='uint16_t', var='xoff',  c_format='%u')],
130    tp_print=['bin_h=%d, yoff=%d, bin_w=%d, xoff=%d',
131        '__entry->bin_h', '__entry->yoff', '__entry->bin_w', '__entry->xoff'],
132)
133
134begin_end_tp('draw_ib')
135
136begin_end_tp('blit',
137    args=[TracepointArg(type='enum pipe_texture_target', var='src_target', c_format='%s', to_prim_type="util_str_tex_target({}, true)"),
138          TracepointArg(type='enum pipe_texture_target', var='dst_target', c_format='%s', to_prim_type="util_str_tex_target({}, true)")],
139    tp_print=['%s -> %s', 'util_str_tex_target(__entry->src_target, true)',
140        'util_str_tex_target(__entry->dst_target, true)'],
141)
142
143begin_end_tp('compute',
144    args=[TracepointArg(type='uint8_t',  var='indirect',     c_format='%u'),
145          TracepointArg(type='uint8_t',  var='work_dim',     c_format='%u'),
146          TracepointArg(type='uint16_t', var='local_size_x', c_format='%u'),
147          TracepointArg(type='uint16_t', var='local_size_y', c_format='%u'),
148          TracepointArg(type='uint16_t', var='local_size_z', c_format='%u'),
149          TracepointArg(type='uint32_t', var='num_groups_x', c_format='%u'),
150          TracepointArg(type='uint32_t', var='num_groups_y', c_format='%u'),
151          TracepointArg(type='uint32_t', var='num_groups_z', c_format='%u'),
152          TracepointArg(type='uint32_t', var='shader_id',    c_format='%u')]
153)
154
155utrace_generate(cpath=args.src,
156                hpath=args.hdr,
157                ctx_param='struct pipe_context *pctx',
158                trace_toggle_name='fd_gpu_tracepoint',
159                trace_toggle_defaults=fd_default_tps)
160