mesa: add _mesa_log(), _mesa_get_log_file() functions
authorBrian Paul <brianp@vmware.com>
Tue, 14 Apr 2015 16:24:22 +0000 (10:24 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 15 Apr 2015 22:30:49 +0000 (16:30 -0600)
_mesa_log() simply writes log information to stderr or MESA_LOG_FILE.
_mesa_get_log_file() returns the file handle to use for logging.

This will be used for shader dumping/logging instead of always printing
to stderr.

Reviewed-by: José Fonseca <jfonseca@vmware.com>
src/mesa/main/errors.c
src/mesa/main/errors.h

index 8ffbf413c39b0c6d7a8887a66367fc2a29c641e3..2aa1deb635f4f3dd0359c24bc32df2b58610feab 100644 (file)
@@ -1232,12 +1232,14 @@ _mesa_free_errors_data(struct gl_context *ctx)
 /** \name Diagnostics */
 /*@{*/
 
+static FILE *LogFile = NULL;
+
+
 static void
 output_if_debug(const char *prefixString, const char *outputString,
                 GLboolean newline)
 {
    static int debug = -1;
-   static FILE *fout = NULL;
 
    /* Init the local 'debug' var once.
     * Note: the _mesa_init_debug() function should have been called
@@ -1249,9 +1251,9 @@ output_if_debug(const char *prefixString, const char *outputString,
        */
       const char *logFile = getenv("MESA_LOG_FILE");
       if (logFile)
-         fout = fopen(logFile, "w");
-      if (!fout)
-         fout = stderr;
+         LogFile = fopen(logFile, "w");
+      if (!LogFile)
+         LogFile = stderr;
 #ifdef DEBUG
       /* in debug builds, print messages unless MESA_DEBUG="silent" */
       if (MESA_DEBUG_FLAGS & DEBUG_SILENT)
@@ -1266,10 +1268,13 @@ output_if_debug(const char *prefixString, const char *outputString,
 
    /* Now only print the string if we're required to do so. */
    if (debug) {
-      fprintf(fout, "%s: %s", prefixString, outputString);
+      if (prefixString)
+         fprintf(LogFile, "%s: %s", prefixString, outputString);
+      else
+         fprintf(LogFile, "%s", outputString);
       if (newline)
-         fprintf(fout, "\n");
-      fflush(fout);
+         fprintf(LogFile, "\n");
+      fflush(LogFile);
 
 #if defined(_WIN32)
       /* stderr from windows applications without console is not usually 
@@ -1284,6 +1289,18 @@ output_if_debug(const char *prefixString, const char *outputString,
 }
 
 
+/**
+ * Return the file handle to use for debug/logging.  Defaults to stderr
+ * unless MESA_LOG_FILE is defined.
+ */
+FILE *
+_mesa_get_log_file(void)
+{
+   assert(LogFile);
+   return LogFile;
+}
+
+
 /**
  * When a new type of error is recorded, print a message describing
  * previous errors which were accumulated.
@@ -1525,6 +1542,18 @@ _mesa_debug( const struct gl_context *ctx, const char *fmtString, ... )
 }
 
 
+void
+_mesa_log(const char *fmtString, ...)
+{
+   char s[MAX_DEBUG_MESSAGE_LENGTH];
+   va_list args;
+   va_start(args, fmtString);
+   _mesa_vsnprintf(s, MAX_DEBUG_MESSAGE_LENGTH, fmtString, args);
+   va_end(args);
+   output_if_debug("", s, GL_FALSE);
+}
+
+
 /**
  * Report debug information from the shader compiler via GL_ARB_debug_output.
  *
index 0c521c0d0407658c1c82d63dfb6d3a1b2734739d..e6dc9b5f1b9d4bf04715e96d05bee1b1c3dd1d19 100644 (file)
@@ -36,6 +36,7 @@
 #define ERRORS_H
 
 
+#include <stdio.h>
 #include "compiler.h"
 #include "glheader.h"
 #include "mtypes.h"
@@ -68,6 +69,12 @@ _mesa_error_no_memory(const char *caller);
 extern void
 _mesa_debug( const struct gl_context *ctx, const char *fmtString, ... ) PRINTFLIKE(2, 3);
 
+extern void
+_mesa_log(const char *fmtString, ...) PRINTFLIKE(1, 2);
+
+extern FILE *
+_mesa_get_log_file(void);
+
 extern void
 _mesa_gl_debug(struct gl_context *ctx,
                GLuint *id,