os,llvmpipe: Set rasterizer thread names on Linux.
authorJose Fonseca <jfonseca@vmware.com>
Fri, 13 Feb 2015 13:51:28 +0000 (13:51 +0000)
committerJose Fonseca <jfonseca@vmware.com>
Fri, 13 Feb 2015 19:42:21 +0000 (19:42 +0000)
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@vmware.com>
src/gallium/auxiliary/os/os_thread.h
src/gallium/drivers/llvmpipe/lp_rast.c

index ff46a891fe0c924e225cc88a7b3c0a1dbf8e6180..e9da895488540ac775ecbe8ff44088ec6260fc34 100644 (file)
@@ -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
  */
index e168766e348f88e27b4c8753b4e42d2a45fb7a3b..903e7c510022f339157498d5983fd4d217674b86 100644 (file)
@@ -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) {