svga: log the process command line to the vmware.log file
authorBrian Paul <brianp@vmware.com>
Tue, 23 May 2017 13:45:12 +0000 (07:45 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 24 May 2017 17:33:47 +0000 (11:33 -0600)
This is useful for Piglit when thousands of tests are run and we want
to determine which test triggered a device error.

v2: only log command line info if the new SVGA_EXTRA_LOGGING env var is set

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
docs/envvars.html
src/gallium/drivers/svga/svga_screen.c

index e075c20536a386d609a7245c532ca20e23f581a2..a970a6668a1511e680136531ef3233c9be586822 100644 (file)
@@ -304,6 +304,8 @@ See src/mesa/state_tracker/st_debug.c for other options.
 (will often result in incorrect rendering).
 <li>SVGA_DEBUG - for dumping shaders, constant buffers, etc.  See the code
 for details.
+<li>SVGA_EXTRA_LOGGING - if set, enables extra logging to the vmware.log file,
+such as the OpenGL program's name and command line arguments.
 <li>See the driver code for other, lesser-used variables.
 </ul>
 
index 866eef13930bf6643b9b6c140d6aa95a49a88039..81856b304352e770e9e039d285057b475a22124b 100644 (file)
@@ -30,6 +30,8 @@
 #include "util/u_string.h"
 #include "util/u_math.h"
 
+#include "os/os_process.h"
+
 #include "svga_winsys.h"
 #include "svga_public.h"
 #include "svga_context.h"
@@ -42,6 +44,7 @@
 
 #include "svga3d_shaderdefs.h"
 #include "VGPU10ShaderTokens.h"
+#include "svga_msg.h"
 
 /* NOTE: this constant may get moved into a svga3d*.h header file */
 #define SVGA3D_DX_MAX_RESOURCE_SIZE (128 * 1024 * 1024)
@@ -949,6 +952,7 @@ svga_screen_create(struct svga_winsys_screen *sws)
 {
    struct svga_screen *svgascreen;
    struct pipe_screen *screen;
+   char host_log[200];
 
 #ifdef DEBUG
    SVGA_DEBUG = debug_get_flags_option("SVGA_DEBUG", svga_debug_flags, 0 );
@@ -1138,6 +1142,18 @@ svga_screen_create(struct svga_winsys_screen *sws)
                  "%s%s (%s)", HOST_LOG_PREFIX, PACKAGE_VERSION, MESA_GIT_SHA1);
    svga_host_log(host_log);
 
+   /* If the SVGA_EXTRA_LOGGING env var is set, log the process's command
+    * line (program name and arguments).
+    */
+   if (debug_get_bool_option("SVGA_EXTRA_LOGGING", FALSE)) {
+      char cmdline[1000];
+      if (os_get_command_line(cmdline, sizeof(cmdline))) {
+         util_snprintf(host_log, sizeof(host_log) - strlen(HOST_LOG_PREFIX),
+                       "%s%s", HOST_LOG_PREFIX, cmdline);
+         svga_host_log(host_log);
+      }
+   }
+
    return screen;
 error2:
    FREE(svgascreen);