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