From 2fba0aaa700bbdef37ac5da6da005b24be570e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 12 Jun 2016 13:36:39 +0200 Subject: [PATCH] gallium/u_queue: add an option to name threads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit for debugging v2: correct the snprintf use Reviewed-by: Nicolai Hähnle --- src/gallium/auxiliary/util/u_queue.c | 9 +++++++++ src/gallium/auxiliary/util/u_queue.h | 2 ++ src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 2 +- src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/util/u_queue.c b/src/gallium/auxiliary/util/u_queue.c index a958c04d5db..de0422a0c13 100644 --- a/src/gallium/auxiliary/util/u_queue.c +++ b/src/gallium/auxiliary/util/u_queue.c @@ -26,6 +26,7 @@ #include "u_queue.h" #include "u_memory.h" +#include "u_string.h" #include "os/os_time.h" static void @@ -61,6 +62,12 @@ static PIPE_THREAD_ROUTINE(util_queue_thread_func, input) FREE(input); + if (queue->name) { + char name[16]; + util_snprintf(name, sizeof(name), "%s:%i", queue->name, thread_index); + pipe_thread_setname(name); + } + while (1) { struct util_queue_job job; @@ -96,6 +103,7 @@ static PIPE_THREAD_ROUTINE(util_queue_thread_func, input) bool util_queue_init(struct util_queue *queue, + const char *name, unsigned max_jobs, unsigned num_threads, void (*execute_job)(void *, int)) @@ -103,6 +111,7 @@ util_queue_init(struct util_queue *queue, unsigned i; memset(queue, 0, sizeof(*queue)); + queue->name = name; queue->num_threads = num_threads; queue->max_jobs = max_jobs; diff --git a/src/gallium/auxiliary/util/u_queue.h b/src/gallium/auxiliary/util/u_queue.h index f3aa4f6f5c6..f005ad5ef4c 100644 --- a/src/gallium/auxiliary/util/u_queue.h +++ b/src/gallium/auxiliary/util/u_queue.h @@ -51,6 +51,7 @@ struct util_queue_job { /* Put this into your context. */ struct util_queue { + const char *name; pipe_mutex lock; pipe_semaphore has_space; pipe_semaphore queued; @@ -64,6 +65,7 @@ struct util_queue { }; bool util_queue_init(struct util_queue *queue, + const char *name, unsigned max_jobs, unsigned num_threads, void (*execute_job)(void *, int)); diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index 22a81220ace..8782665cca9 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -493,7 +493,7 @@ amdgpu_winsys_create(int fd, radeon_screen_create_t screen_create) pipe_mutex_init(ws->bo_fence_lock); if (sysconf(_SC_NPROCESSORS_ONLN) > 1 && debug_get_option_thread()) - util_queue_init(&ws->cs_queue, 8, 1, amdgpu_cs_submit_ib); + util_queue_init(&ws->cs_queue, "amdgpu_cs", 8, 1, amdgpu_cs_submit_ib); /* Create the screen at the end. The winsys must be initialized * completely. diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c index 32d58b9b9e5..ea5d212803c 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c @@ -783,7 +783,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create) ws->info.gart_page_size = sysconf(_SC_PAGESIZE); if (ws->num_cpus > 1 && debug_get_option_thread()) - util_queue_init(&ws->cs_queue, 8, 1, + util_queue_init(&ws->cs_queue, "radeon_cs", 8, 1, radeon_drm_cs_emit_ioctl_oneshot); /* Create the screen at the end. The winsys must be initialized