xref: /aosp_15_r20/external/mesa3d/src/freedreno/vulkan/tu_perfetto.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2021 Google, Inc.
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef TU_PERFETTO_H_
7*61046927SAndroid Build Coastguard Worker #define TU_PERFETTO_H_
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker #ifdef HAVE_PERFETTO
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker /* we can't include tu_common.h because ir3 headers are not C++-compatible */
12*61046927SAndroid Build Coastguard Worker #include <stdint.h>
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
15*61046927SAndroid Build Coastguard Worker extern "C" {
16*61046927SAndroid Build Coastguard Worker #endif
17*61046927SAndroid Build Coastguard Worker 
18*61046927SAndroid Build Coastguard Worker #define TU_PERFETTO_MAX_STACK_DEPTH 8
19*61046927SAndroid Build Coastguard Worker 
20*61046927SAndroid Build Coastguard Worker struct tu_device;
21*61046927SAndroid Build Coastguard Worker struct tu_u_trace_submission_data;
22*61046927SAndroid Build Coastguard Worker 
23*61046927SAndroid Build Coastguard Worker struct tu_perfetto_stage {
24*61046927SAndroid Build Coastguard Worker    int stage_id;
25*61046927SAndroid Build Coastguard Worker    /* dynamically allocated stage iid, for app_events.  0 if stage_id should be
26*61046927SAndroid Build Coastguard Worker     * used instead.
27*61046927SAndroid Build Coastguard Worker     */
28*61046927SAndroid Build Coastguard Worker    uint64_t stage_iid;
29*61046927SAndroid Build Coastguard Worker    uint64_t start_ts;
30*61046927SAndroid Build Coastguard Worker    const void* payload;
31*61046927SAndroid Build Coastguard Worker    void* start_payload_function;
32*61046927SAndroid Build Coastguard Worker };
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker struct tu_perfetto_state {
35*61046927SAndroid Build Coastguard Worker    struct tu_perfetto_stage stages[TU_PERFETTO_MAX_STACK_DEPTH];
36*61046927SAndroid Build Coastguard Worker    unsigned stage_depth;
37*61046927SAndroid Build Coastguard Worker    unsigned skipped_depth;
38*61046927SAndroid Build Coastguard Worker };
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker void tu_perfetto_init(void);
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker struct tu_perfetto_clocks
43*61046927SAndroid Build Coastguard Worker {
44*61046927SAndroid Build Coastguard Worker    uint64_t cpu;
45*61046927SAndroid Build Coastguard Worker    uint64_t gpu_ts;
46*61046927SAndroid Build Coastguard Worker    uint64_t gpu_ts_offset;
47*61046927SAndroid Build Coastguard Worker };
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker struct tu_perfetto_clocks
50*61046927SAndroid Build Coastguard Worker tu_perfetto_submit(struct tu_device *dev,
51*61046927SAndroid Build Coastguard Worker                    uint32_t submission_id,
52*61046927SAndroid Build Coastguard Worker                    struct tu_perfetto_clocks *clocks);
53*61046927SAndroid Build Coastguard Worker 
54*61046927SAndroid Build Coastguard Worker void tu_perfetto_log_create_buffer(struct tu_device *dev, struct tu_buffer *buffer);
55*61046927SAndroid Build Coastguard Worker void tu_perfetto_log_bind_buffer(struct tu_device *dev, struct tu_buffer *buffer);
56*61046927SAndroid Build Coastguard Worker void tu_perfetto_log_destroy_buffer(struct tu_device *dev, struct tu_buffer *buffer);
57*61046927SAndroid Build Coastguard Worker 
58*61046927SAndroid Build Coastguard Worker void tu_perfetto_log_create_image(struct tu_device *dev, struct tu_image *image);
59*61046927SAndroid Build Coastguard Worker void tu_perfetto_log_bind_image(struct tu_device *dev, struct tu_image *image);
60*61046927SAndroid Build Coastguard Worker void tu_perfetto_log_destroy_image(struct tu_device *dev, struct tu_image *image);
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
63*61046927SAndroid Build Coastguard Worker }
64*61046927SAndroid Build Coastguard Worker #endif
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker #endif /* HAVE_PERFETTO */
67*61046927SAndroid Build Coastguard Worker 
68*61046927SAndroid Build Coastguard Worker #endif /* TU_PERFETTO_H_ */
69