From 95896dee93c3ff354b586fbba34dae4e6e76c96d Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Thu, 23 Sep 2021 18:18:37 +0300 Subject: [PATCH] turnip/perfetto: Optimize timestamp synchronization We shouldn't do ioctl to get timestamp if perfetto isn't connected. Also it's better to sync timestamps after submission since the call could block until GPU is resumed. Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_drm.c | 8 ++++---- src/freedreno/vulkan/tu_perfetto.cc | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/freedreno/vulkan/tu_drm.c b/src/freedreno/vulkan/tu_drm.c index ba3582a29aa..d2d04bc7302 100644 --- a/src/freedreno/vulkan/tu_drm.c +++ b/src/freedreno/vulkan/tu_drm.c @@ -897,10 +897,6 @@ tu_queue_submit_locked(struct tu_queue *queue, struct tu_queue_submit *submit) { queue->device->submit_count++; -#if HAVE_PERFETTO - tu_perfetto_submit(queue->device, queue->device->submit_count); -#endif - uint32_t flags = MSM_PIPE_3D0; if (submit->vk_submit->wait_count) @@ -940,6 +936,10 @@ tu_queue_submit_locked(struct tu_queue *queue, struct tu_queue_submit *submit) if (ret) return vk_device_set_lost(&queue->device->vk, "submit failed: %m"); +#if HAVE_PERFETTO + tu_perfetto_submit(queue->device, queue->device->submit_count); +#endif + if (submit->cmd_buffer_trace_data) { struct tu_u_trace_flush_data *flush_data = vk_alloc(&queue->device->vk.alloc, sizeof(struct tu_u_trace_flush_data), diff --git a/src/freedreno/vulkan/tu_perfetto.cc b/src/freedreno/vulkan/tu_perfetto.cc index 656b0b978df..3ce54bd2ff9 100644 --- a/src/freedreno/vulkan/tu_perfetto.cc +++ b/src/freedreno/vulkan/tu_perfetto.cc @@ -248,6 +248,10 @@ emit_submit_id(uint32_t submission_id) void tu_perfetto_submit(struct tu_device *dev, uint32_t submission_id) { + /* sync_timestamp isn't free */ + if (!ut_perfetto_enabled) + return; + sync_timestamp(dev); emit_submit_id(submission_id); }