Mesa (master): radv: Allow triggering thread traces by file.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Sep 1 14:30:07 UTC 2020
Module: Mesa
Branch: master
Commit: 00973542ffe93224949ca9654757f8b0581e2ef9
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=00973542ffe93224949ca9654757f8b0581e2ef9
Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date: Tue Sep 1 14:59:55 2020 +0200
radv: Allow triggering thread traces by file.
Makes it actually feasible to trace games and not just demos/apitraces.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6537>
---
src/amd/vulkan/layers/radv_sqtt_layer.c | 15 ++++++++++++++-
src/amd/vulkan/radv_device.c | 9 ++++++++-
src/amd/vulkan/radv_private.h | 1 +
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c
index 04909b20224..af4264b4b55 100644
--- a/src/amd/vulkan/layers/radv_sqtt_layer.c
+++ b/src/amd/vulkan/layers/radv_sqtt_layer.c
@@ -591,7 +591,20 @@ radv_handle_thread_trace(VkQueue _queue)
if (radv_get_thread_trace(queue, &thread_trace))
radv_dump_thread_trace(queue->device, &thread_trace);
} else {
- if (num_frames == queue->device->thread_trace_start_frame) {
+ bool frame_trigger = num_frames == queue->device->thread_trace_start_frame;
+ bool file_trigger = false;
+ if (queue->device->thread_trace_trigger_file &&
+ access(queue->device->thread_trace_trigger_file, W_OK) == 0) {
+ if (unlink(queue->device->thread_trace_trigger_file) == 0) {
+ file_trigger = true;
+ } else {
+ /* Do not enable tracing if we cannot remove the file,
+ * because by then we'll trace every frame ... */
+ fprintf(stderr, "RADV: could not remove thread trace trigger file, ignoring\n");
+ }
+ }
+
+ if (frame_trigger || file_trigger) {
radv_begin_thread_trace(queue);
assert(!thread_trace_enabled);
thread_trace_enabled = true;
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index e2a5727f934..a64c90e2308 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -2488,7 +2488,8 @@ radv_get_int_debug_option(const char *name, int default_value)
static bool radv_thread_trace_enabled()
{
- return radv_get_int_debug_option("RADV_THREAD_TRACE", -1) >= 0;
+ return radv_get_int_debug_option("RADV_THREAD_TRACE", -1) >= 0 ||
+ getenv("RADV_THREAD_TRACE_TRIGGER");
}
static void
@@ -2822,6 +2823,10 @@ VkResult radv_CreateDevice(
radv_get_int_debug_option("RADV_THREAD_TRACE_BUFFER_SIZE", 1024 * 1024);
device->thread_trace_start_frame = radv_get_int_debug_option("RADV_THREAD_TRACE", -1);
+ const char *trigger_file = getenv("RADV_THREAD_TRACE_TRIGGER");
+ if (trigger_file)
+ device->thread_trace_trigger_file = strdup(trigger_file);
+
if (!radv_thread_trace_init(device))
goto fail;
}
@@ -2918,6 +2923,7 @@ fail:
radv_bo_list_finish(&device->bo_list);
radv_thread_trace_finish(device);
+ free(device->thread_trace_trigger_file);
radv_trap_handler_finish(device);
@@ -2977,6 +2983,7 @@ void radv_DestroyDevice(
pthread_cond_destroy(&device->timeline_cond);
radv_bo_list_finish(&device->bo_list);
+ free(device->thread_trace_trigger_file);
radv_thread_trace_finish(device);
vk_free(&device->vk.alloc, device);
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 579b16de680..bb58fa700fe 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -846,6 +846,7 @@ struct radv_device {
void *thread_trace_ptr;
uint32_t thread_trace_buffer_size;
int thread_trace_start_frame;
+ char *thread_trace_trigger_file;
/* Trap handler. */
struct radv_shader_variant *trap_handler_shader;
More information about the mesa-commit
mailing list