[intel] By default, output batchbuffer decode to stderr like other debug info.
[mesa.git] / src / egl / main / egllog.c
1 /**
2 * Logging facility for debug/info messages.
3 */
4
5
6 #include <stdarg.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include "egllog.h"
11
12 #define MAXSTRING 1000
13 #define FALLBACK_LOG_LEVEL _EGL_DEBUG
14 #define FALLBACK_LOG_LEVEL_STR "debug"
15
16 static EGLint ReportingLevel = -1;
17
18
19 static void
20 log_level_initialize (void)
21 {
22 char *log_env = getenv ("EGL_LOG_LEVEL");
23
24 if (log_env == NULL) {
25 ReportingLevel = FALLBACK_LOG_LEVEL;
26 }
27 else if (strcasecmp (log_env, "fatal") == 0) {
28 ReportingLevel = _EGL_FATAL;
29 }
30 else if (strcasecmp (log_env, "warning") == 0) {
31 ReportingLevel = _EGL_WARNING;
32 }
33 else if (strcasecmp (log_env, "info") == 0) {
34 ReportingLevel = _EGL_INFO;
35 }
36 else if (strcasecmp (log_env, "debug") == 0) {
37 ReportingLevel = _EGL_DEBUG;
38 }
39 else {
40 fprintf (stderr, "Unrecognized EGL_LOG_LEVEL environment variable value. "
41 "Expected one of \"fatal\", \"warning\", \"info\", \"debug\". "
42 "Got \"%s\". Falling back to \"%s\".\n",
43 log_env, FALLBACK_LOG_LEVEL_STR);
44 ReportingLevel = FALLBACK_LOG_LEVEL;
45 }
46 }
47
48
49 /**
50 * Log a message to stderr.
51 * \param level one of _EGL_FATAL, _EGL_WARNING, _EGL_INFO, _EGL_DEBUG.
52 */
53 void
54 _eglLog(EGLint level, const char *fmtStr, ...)
55 {
56 va_list args;
57 char msg[MAXSTRING];
58 const char *levelStr;
59 static int log_level_initialized = 0;
60
61 if (!log_level_initialized) {
62 log_level_initialize ();
63 log_level_initialized = 1;
64 }
65
66 if (level <= ReportingLevel) {
67 switch (level) {
68 case _EGL_FATAL:
69 levelStr = "Fatal";
70 break;
71 case _EGL_WARNING:
72 levelStr = "Warning";
73 break;
74 case _EGL_INFO:
75 levelStr = "Info";
76 break;
77 case _EGL_DEBUG:
78 levelStr = "Debug";
79 break;
80 default:
81 levelStr = "";
82 }
83
84 va_start(args, fmtStr);
85 vsnprintf(msg, MAXSTRING, fmtStr, args);
86 va_end(args);
87
88 fprintf(stderr, "EGL %s: %s\n", levelStr, msg);
89
90 if (level == _EGL_FATAL) {
91 exit(1); /* or abort()? */
92 }
93 }
94 }