Mesa (master): os,llvmpipe: Set rasterizer thread names on Linux.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Fri Feb 13 19:42:28 UTC 2015


Module: Mesa
Branch: master
Commit: c944b91190048e370d2adc362f0860d9f58e58f2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c944b91190048e370d2adc362f0860d9f58e58f2

Author: Jose Fonseca <jfonseca at vmware.com>
Date:   Fri Feb 13 13:51:28 2015 +0000

os,llvmpipe: Set rasterizer thread names on Linux.

To help identify llvmpipe rasterizer threads -- especially when there
can be so many.

We can eventually generalize this to other OSes, but for that we must
restrict the function to be called from the current thread.  See also
http://stackoverflow.com/a/7989973

Reviewed-by: Roland Scheidegger <sroland at vmware.com>

---

 src/gallium/auxiliary/os/os_thread.h   |   11 +++++++++++
 src/gallium/drivers/llvmpipe/lp_rast.c |    8 +++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/os/os_thread.h b/src/gallium/auxiliary/os/os_thread.h
index ff46a89..e9da895 100644
--- a/src/gallium/auxiliary/os/os_thread.h
+++ b/src/gallium/auxiliary/os/os_thread.h
@@ -85,6 +85,17 @@ static INLINE int pipe_thread_destroy( pipe_thread thread )
    return thrd_detach( thread );
 }
 
+static INLINE void pipe_thread_setname( const char *name )
+{
+#if defined(HAVE_PTHREAD)
+#  if defined(__GNU_LIBRARY__) && defined(__GLIBC__) && defined(__GLIBC_MINOR__) && \
+      (__GLIBC__ >= 3 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12))
+   pthread_setname_np(pthread_self(), name);
+#  endif
+#endif
+   (void)name;
+}
+
 
 /* pipe_mutex
  */
diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c
index e168766..903e7c5 100644
--- a/src/gallium/drivers/llvmpipe/lp_rast.c
+++ b/src/gallium/drivers/llvmpipe/lp_rast.c
@@ -31,6 +31,7 @@
 #include "util/u_rect.h"
 #include "util/u_surface.h"
 #include "util/u_pack_color.h"
+#include "util/u_string.h"
 
 #include "os/os_time.h"
 
@@ -747,11 +748,16 @@ static PIPE_THREAD_ROUTINE( thread_function, init_data )
    struct lp_rasterizer_task *task = (struct lp_rasterizer_task *) init_data;
    struct lp_rasterizer *rast = task->rast;
    boolean debug = false;
-   unsigned fpstate = util_fpstate_get();
+   char thread_name[16];
+   unsigned fpstate;
+
+   util_snprintf(thread_name, sizeof thread_name, "llvmpipe-%u", task->thread_index);
+   pipe_thread_setname(thread_name);
 
    /* Make sure that denorms are treated like zeros. This is 
     * the behavior required by D3D10. OpenGL doesn't care.
     */
+   fpstate = util_fpstate_get();
    util_fpstate_set_denorms_to_zero(fpstate);
 
    while (1) {




More information about the mesa-commit mailing list