From b1bb3c2496c84191ff91cb99168283450917744b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Sat, 8 Oct 2011 20:23:18 +0100 Subject: [PATCH] Uniformize warning output. --- glretrace.py | 16 ++++++++-------- glretrace_main.cpp | 32 ++++++++++++++------------------ retrace.cpp | 33 +++++++++++++++++++++++++++------ retrace.hpp | 6 ++++++ retrace.py | 5 +++-- 5 files changed, 58 insertions(+), 34 deletions(-) diff --git a/glretrace.py b/glretrace.py index 925fb18..761fe23 100644 --- a/glretrace.py +++ b/glretrace.py @@ -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 ' }' diff --git a/glretrace_main.cpp b/glretrace_main.cpp index cf250b9..fb98b61 100644 --- a/glretrace_main.cpp +++ b/glretrace_main.cpp @@ -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"; } /** diff --git a/retrace.cpp b/retrace.cpp index b04c997..4e0f360 100644 --- a/retrace.cpp +++ b/retrace.cpp @@ -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; diff --git a/retrace.hpp b/retrace.hpp index d0e986e..69cf0ad 100644 --- a/retrace.hpp +++ b/retrace.hpp @@ -28,7 +28,9 @@ #include +#include #include +#include #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); diff --git a/retrace.py b/retrace.py index 9092f35..c8bb8ea 100644 --- a/retrace.py +++ b/retrace.py @@ -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): -- 2.7.4