]> git.notmuchmail.org Git - apitrace/commitdiff
Uniformize warning output.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 8 Oct 2011 19:23:18 +0000 (20:23 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 8 Oct 2011 19:23:18 +0000 (20:23 +0100)
glretrace.py
glretrace_main.cpp
retrace.cpp
retrace.hpp
retrace.py

index 925fb181dd1751e8b8032958fa981636dda1c688..761fe23f4faf9a27d496ebcd0b9b02ec800fe2d8 100644 (file)
@@ -237,7 +237,7 @@ class GlRetracer(Retracer):
                 print r'        glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_position);'
                 print r'        if (error_position != -1) {'
                 print r'            const char *error_string = (const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB);'
-                print r'            std::cerr << call.no << ": warning: " << error_string << "\n";'
+                print r'            retrace::warning(call) << error_string << "\n";'
                 print r'        }'
             if function.name == 'glCompileShader':
                 print r'        GLint compile_status = 0;'
@@ -247,7 +247,7 @@ class GlRetracer(Retracer):
                 print r'             glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_log_length);'
                 print r'             GLchar *infoLog = new GLchar[info_log_length];'
                 print r'             glGetShaderInfoLog(shader, info_log_length, NULL, infoLog);'
-                print r'             std::cerr << call.no << ": warning: " << infoLog << "\n";'
+                print r'             retrace::warning(call) << infoLog << "\n";'
                 print r'             delete [] infoLog;'
                 print r'        }'
             if function.name == 'glLinkProgram':
@@ -258,7 +258,7 @@ class GlRetracer(Retracer):
                 print r'             glGetProgramiv(program, GL_INFO_LOG_LENGTH, &info_log_length);'
                 print r'             GLchar *infoLog = new GLchar[info_log_length];'
                 print r'             glGetProgramInfoLog(program, info_log_length, NULL, infoLog);'
-                print r'             std::cerr << call.no << ": warning: " << infoLog << "\n";'
+                print r'             retrace::warning(call) << infoLog << "\n";'
                 print r'             delete [] infoLog;'
                 print r'        }'
             if function.name == 'glCompileShaderARB':
@@ -269,7 +269,7 @@ class GlRetracer(Retracer):
                 print r'             glGetObjectParameterivARB(shaderObj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_log_length);'
                 print r'             GLchar *infoLog = new GLchar[info_log_length];'
                 print r'             glGetInfoLogARB(shaderObj, info_log_length, NULL, infoLog);'
-                print r'             std::cerr << call.no << ": warning: " << infoLog << "\n";'
+                print r'             retrace::warning(call) << infoLog << "\n";'
                 print r'             delete [] infoLog;'
                 print r'        }'
             if function.name == 'glLinkProgramARB':
@@ -280,23 +280,23 @@ class GlRetracer(Retracer):
                 print r'             glGetObjectParameterivARB(programObj, GL_OBJECT_INFO_LOG_LENGTH_ARB, &info_log_length);'
                 print r'             GLchar *infoLog = new GLchar[info_log_length];'
                 print r'             glGetInfoLogARB(programObj, info_log_length, NULL, infoLog);'
-                print r'             std::cerr << call.no << ": warning: " << infoLog << "\n";'
+                print r'             retrace::warning(call) << infoLog << "\n";'
                 print r'             delete [] infoLog;'
                 print r'        }'
             if function.name in ('glMapBuffer', 'glMapBufferARB', 'glMapBufferRange', 'glMapNamedBufferEXT', 'glMapNamedBufferRangeEXT'):
                 print r'        if (!__result) {'
-                print r'             std::cerr << call.no << ": warning: failed to map buffer\n";'
+                print r'             retrace::warning(call) << "failed to map buffer\n";'
                 print r'        }'
             if function.name in ('glGetAttribLocation', 'glGetAttribLocationARB'):
                 print r'    GLint __orig_result = call.ret->toSInt();'
                 print r'    if (__result != __orig_result) {'
-                print r'        std::cerr << call.no << ": warning: vertex attrib location mismatch " << __orig_result << " -> " << __result << "\n";'
+                print r'        retrace::warning(call) << "vertex attrib location mismatch " << __orig_result << " -> " << __result << "\n";'
                 print r'    }'
             if function.name in ('glCheckFramebufferStatus', 'glCheckFramebufferStatusEXT', 'glCheckNamedFramebufferStatusEXT'):
                 print r'    GLint __orig_result = call.ret->toSInt();'
                 print r'    if (__orig_result == GL_FRAMEBUFFER_COMPLETE &&'
                 print r'        __result != GL_FRAMEBUFFER_COMPLETE) {'
-                print r'        std::cerr << call.no << ": warning: incomplete framebuffer (" << glstate::enumToString(__result) << ")\n";'
+                print r'        retrace::warning(call) << "incomplete framebuffer (" << glstate::enumToString(__result) << ")\n";'
                 print r'    }'
             print '    }'
 
index cf250b9e572373d982205f91f762dccfdc68dca0..fb98b615aa9625dcc6159a4126041b6982a31f0f 100644 (file)
@@ -61,46 +61,42 @@ checkGlError(Trace::Call &call) {
         return;
     }
 
-    if (retrace::verbosity == 0) {
-        std::cout << call;
-        std::cout.flush();
-    }
+    std::ostream & os = retrace::warning(call);
 
-    std::cerr << call.no << ": ";
-    std::cerr << "warning: glGetError(";
-    std::cerr << call.name();
-    std::cerr << ") = ";
+    os << "glGetError(";
+    os << call.name();
+    os << ") = ";
 
     switch (error) {
     case GL_INVALID_ENUM:
-        std::cerr << "GL_INVALID_ENUM";
+        os << "GL_INVALID_ENUM";
         break;
     case GL_INVALID_VALUE:
-        std::cerr << "GL_INVALID_VALUE";
+        os << "GL_INVALID_VALUE";
         break;
     case GL_INVALID_OPERATION:
-        std::cerr << "GL_INVALID_OPERATION";
+        os << "GL_INVALID_OPERATION";
         break;
     case GL_STACK_OVERFLOW:
-        std::cerr << "GL_STACK_OVERFLOW";
+        os << "GL_STACK_OVERFLOW";
         break;
     case GL_STACK_UNDERFLOW:
-        std::cerr << "GL_STACK_UNDERFLOW";
+        os << "GL_STACK_UNDERFLOW";
         break;
     case GL_OUT_OF_MEMORY:
-        std::cerr << "GL_OUT_OF_MEMORY";
+        os << "GL_OUT_OF_MEMORY";
         break;
     case GL_INVALID_FRAMEBUFFER_OPERATION:
-        std::cerr << "GL_INVALID_FRAMEBUFFER_OPERATION";
+        os << "GL_INVALID_FRAMEBUFFER_OPERATION";
         break;
     case GL_TABLE_TOO_LARGE:
-        std::cerr << "GL_TABLE_TOO_LARGE";
+        os << "GL_TABLE_TOO_LARGE";
         break;
     default:
-        std::cerr << error;
+        os << error;
         break;
     }
-    std::cerr << "\n";
+    os << "\n";
 }
 
 /**
index b04c997b6eb90d5cba51b1c688b4d33abf2705d7..4e0f360a9716ad95c41163ac35aecb8bfc208f19 100644 (file)
@@ -36,14 +36,34 @@ namespace retrace {
 int verbosity = 0;
 
 
+static bool call_dumped = false;
+
+
+static void dumpCall(Trace::Call &call) {
+    if (verbosity >= 0 && !call_dumped) {
+        std::cout << call;
+        std::cout.flush();
+        call_dumped = true;
+    }
+}
+
+
+std::ostream &warning(Trace::Call &call) {
+    dumpCall(call);
+
+    std::cerr << call.no << ": ";
+    std::cerr << "warning: ";
+
+    return std::cerr;
+}
+
+
 void ignore(Trace::Call &call) {
     (void)call;
 }
 
-static void unknown(Trace::Call &call) {
-    if (verbosity >= 0) {
-        std::cerr << call.no << ": warning: unknown call " << call.name() << "\n";
-    }
+void unknown(Trace::Call &call) {
+    warning(call) << "unknown call " << call.name() << "\n";
 }
 
 inline void Retracer::addCallback(const Entry *entry) {
@@ -61,9 +81,10 @@ void Retracer::addCallbacks(const Entry *entries) {
 
 
 void Retracer::retrace(Trace::Call &call) {
+    call_dumped = false;
+
     if (verbosity >= 1) {
-        std::cout << call;
-        std::cout.flush();
+        dumpCall(call);
     }
 
     Callback callback = 0;
index d0e986e0f2ec53fc3c90e4996091647b500f1044..69cf0ad4d2c171a69de8b56a5c0b4670a6cc5809 100644 (file)
@@ -28,7 +28,9 @@
 
 #include <string.h>
 
+#include <list>
 #include <map>
+#include <ostream>
 
 #include "trace_model.hpp"
 
@@ -84,7 +86,11 @@ public:
 extern int verbosity;
 
 
+std::ostream &warning(Trace::Call &call);
+
+
 void ignore(Trace::Call &call);
+void unknown(Trace::Call &call);
 
 
 typedef void (*Callback)(Trace::Call &call);
index 9092f351366a2377231761c962e2c1daec382879..c8bb8eae283eb1631a7b4ab61eee10ecd0ce164c 100644 (file)
@@ -227,8 +227,9 @@ class Retracer:
                 print '   // FIXME: result'
 
     def fail_function(self, function):
-        print '    if (retrace::verbosity >= 0)'
-        print '        std::cerr << "warning: unsupported call %s\\n";' % function.name
+        print '    if (retrace::verbosity >= 0) {'
+        print '        retrace::unknown(call);'
+        print '    }'
         print '    return;'
 
     def extract_arg(self, function, arg, arg_type, lvalue, rvalue):