| /* |
| * Copyright © 2021 Google, Inc. |
| * SPDX-License-Identifier: MIT |
| */ |
| |
| #ifndef TU_PERFETTO_H_ |
| #define TU_PERFETTO_H_ |
| |
| #ifdef HAVE_PERFETTO |
| |
| /* we can't include tu_common.h because ir3 headers are not C++-compatible */ |
| #include <stdint.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define TU_PERFETTO_MAX_STACK_DEPTH 8 |
| |
| struct tu_device; |
| struct tu_u_trace_submission_data; |
| |
| struct tu_perfetto_stage { |
| int stage_id; |
| /* dynamically allocated stage iid, for app_events. 0 if stage_id should be |
| * used instead. |
| */ |
| uint64_t stage_iid; |
| uint64_t start_ts; |
| const void* payload; |
| void* start_payload_function; |
| }; |
| |
| struct tu_perfetto_state { |
| struct tu_perfetto_stage stages[TU_PERFETTO_MAX_STACK_DEPTH]; |
| unsigned stage_depth; |
| unsigned skipped_depth; |
| }; |
| |
| void tu_perfetto_init(void); |
| |
| struct tu_perfetto_clocks |
| { |
| uint64_t cpu; |
| uint64_t gpu_ts; |
| uint64_t gpu_ts_offset; |
| }; |
| |
| struct tu_perfetto_clocks |
| tu_perfetto_submit(struct tu_device *dev, |
| uint32_t submission_id, |
| struct tu_perfetto_clocks *clocks); |
| |
| void tu_perfetto_log_create_buffer(struct tu_device *dev, struct tu_buffer *buffer); |
| void tu_perfetto_log_bind_buffer(struct tu_device *dev, struct tu_buffer *buffer); |
| void tu_perfetto_log_destroy_buffer(struct tu_device *dev, struct tu_buffer *buffer); |
| |
| void tu_perfetto_log_create_image(struct tu_device *dev, struct tu_image *image); |
| void tu_perfetto_log_bind_image(struct tu_device *dev, struct tu_image *image); |
| void tu_perfetto_log_destroy_image(struct tu_device *dev, struct tu_image *image); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* HAVE_PERFETTO */ |
| |
| #endif /* TU_PERFETTO_H_ */ |