Commit 7c37ca18 by Geoff Lang Committed by Commit Bot

RendererGL: Limit warning output to 5 per message type.

BUG=768943 Change-Id: I8ed69c70d1914b56145c52ffe26f13193fb55e9e Reviewed-on: https://chromium-review.googlesource.com/685278 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent a75aa3b2
......@@ -65,100 +65,9 @@ static void INTERNAL_GL_APIENTRY LogGLDebugMessage(GLenum source,
const GLchar *message,
const void *userParam)
{
std::string sourceText;
switch (source)
{
case GL_DEBUG_SOURCE_API:
sourceText = "OpenGL";
break;
case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
sourceText = "Windows";
break;
case GL_DEBUG_SOURCE_SHADER_COMPILER:
sourceText = "Shader Compiler";
break;
case GL_DEBUG_SOURCE_THIRD_PARTY:
sourceText = "Third Party";
break;
case GL_DEBUG_SOURCE_APPLICATION:
sourceText = "Application";
break;
case GL_DEBUG_SOURCE_OTHER:
sourceText = "Other";
break;
default:
sourceText = "UNKNOWN";
break;
}
std::string typeText;
switch (type)
{
case GL_DEBUG_TYPE_ERROR:
typeText = "Error";
break;
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
typeText = "Deprecated behavior";
break;
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
typeText = "Undefined behavior";
break;
case GL_DEBUG_TYPE_PORTABILITY:
typeText = "Portability";
break;
case GL_DEBUG_TYPE_PERFORMANCE:
typeText = "Performance";
break;
case GL_DEBUG_TYPE_OTHER:
typeText = "Other";
break;
case GL_DEBUG_TYPE_MARKER:
typeText = "Marker";
break;
default:
typeText = "UNKNOWN";
break;
}
std::string severityText;
switch (severity)
{
case GL_DEBUG_SEVERITY_HIGH:
severityText = "High";
break;
case GL_DEBUG_SEVERITY_MEDIUM:
severityText = "Medium";
break;
case GL_DEBUG_SEVERITY_LOW:
severityText = "Low";
break;
case GL_DEBUG_SEVERITY_NOTIFICATION:
severityText = "Notification";
break;
default:
severityText = "UNKNOWN";
break;
}
if (type == GL_DEBUG_TYPE_ERROR)
{
ERR() << std::endl
<< "\tSource: " << sourceText << std::endl
<< "\tType: " << typeText << std::endl
<< "\tID: " << gl::Error(id) << std::endl
<< "\tSeverity: " << severityText << std::endl
<< "\tMessage: " << message;
}
else
{
// TODO(ynovikov): filter into WARN and INFO if INFO is ever implemented
WARN() << std::endl
<< "\tSource: " << sourceText << std::endl
<< "\tType: " << typeText << std::endl
<< "\tID: " << gl::Error(id) << std::endl
<< "\tSeverity: " << severityText << std::endl
<< "\tMessage: " << message;
}
ASSERT(userParam != nullptr);
rx::RendererGL *renderer = static_cast<rx::RendererGL *>(const_cast<void *>(userParam));
renderer->onDebugMessage(source, type, id, severity, length, message);
}
namespace rx
......@@ -199,7 +108,7 @@ RendererGL::RendererGL(std::unique_ptr<FunctionsGL> functions, const egl::Attrib
nullptr, GL_FALSE);
mFunctions->debugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DEBUG_SEVERITY_NOTIFICATION,
0, nullptr, GL_FALSE);
mFunctions->debugMessageCallback(&LogGLDebugMessage, nullptr);
mFunctions->debugMessageCallback(&LogGLDebugMessage, this);
}
if (mWorkarounds.initializeCurrentVertexAttributes)
......@@ -703,4 +612,27 @@ gl::Error RendererGL::memoryBarrierByRegion(GLbitfield barriers)
return gl::NoError();
}
void RendererGL::onDebugMessage(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar *message)
{
constexpr size_t kMaxDebugMessagesPerNonErrorType = 5;
const std::string formattedMessage =
nativegl::FormatDebugMessage(source, type, id, severity, length, message);
if (type == GL_DEBUG_TYPE_ERROR)
{
ERR() << std::endl << formattedMessage;
}
else if (mDebugMessageCounts[id] < kMaxDebugMessagesPerNonErrorType)
{
// TODO(ynovikov): filter into WARN and INFO if INFO is ever implemented
WARN() << std::endl << formattedMessage;
}
mDebugMessageCounts[id]++;
}
} // namespace rx
......@@ -185,6 +185,13 @@ class RendererGL : angle::NonCopyable
gl::Error memoryBarrier(GLbitfield barriers);
gl::Error memoryBarrierByRegion(GLbitfield barriers);
void onDebugMessage(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar *message);
private:
void ensureCapsInitialized() const;
void generateCaps(gl::Caps *outCaps,
......@@ -203,6 +210,7 @@ class RendererGL : angle::NonCopyable
WorkaroundsGL mWorkarounds;
bool mUseDebugOutput;
std::map<GLuint, size_t> mDebugMessageCounts;
mutable bool mCapsInitialized;
mutable gl::Caps mNativeCaps;
......
......@@ -1212,6 +1212,100 @@ void ApplyWorkarounds(const FunctionsGL *functions, gl::Workarounds *workarounds
namespace nativegl
{
std::string FormatDebugMessage(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar *message)
{
std::string sourceText;
switch (source)
{
case GL_DEBUG_SOURCE_API:
sourceText = "OpenGL";
break;
case GL_DEBUG_SOURCE_WINDOW_SYSTEM:
sourceText = "Windows";
break;
case GL_DEBUG_SOURCE_SHADER_COMPILER:
sourceText = "Shader Compiler";
break;
case GL_DEBUG_SOURCE_THIRD_PARTY:
sourceText = "Third Party";
break;
case GL_DEBUG_SOURCE_APPLICATION:
sourceText = "Application";
break;
case GL_DEBUG_SOURCE_OTHER:
sourceText = "Other";
break;
default:
sourceText = "UNKNOWN";
break;
}
std::string typeText;
switch (type)
{
case GL_DEBUG_TYPE_ERROR:
typeText = "Error";
break;
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
typeText = "Deprecated behavior";
break;
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
typeText = "Undefined behavior";
break;
case GL_DEBUG_TYPE_PORTABILITY:
typeText = "Portability";
break;
case GL_DEBUG_TYPE_PERFORMANCE:
typeText = "Performance";
break;
case GL_DEBUG_TYPE_OTHER:
typeText = "Other";
break;
case GL_DEBUG_TYPE_MARKER:
typeText = "Marker";
break;
default:
typeText = "UNKNOWN";
break;
}
std::string severityText;
switch (severity)
{
case GL_DEBUG_SEVERITY_HIGH:
severityText = "High";
break;
case GL_DEBUG_SEVERITY_MEDIUM:
severityText = "Medium";
break;
case GL_DEBUG_SEVERITY_LOW:
severityText = "Low";
break;
case GL_DEBUG_SEVERITY_NOTIFICATION:
severityText = "Notification";
break;
default:
severityText = "UNKNOWN";
break;
}
std::ostringstream stream;
stream << "\tSource: " << sourceText << std::endl
<< "\tType: " << typeText << std::endl
<< "\tID: " << gl::Error(id) << std::endl
<< "\tSeverity: " << severityText << std::endl
<< "\tMessage: " << message;
return stream.str();
}
bool SupportsFenceSync(const FunctionsGL *functions)
{
return functions->isAtLeastGL(gl::Version(3, 2)) || functions->hasGLExtension("GL_ARB_sync") ||
......
......@@ -68,6 +68,12 @@ void ApplyWorkarounds(const FunctionsGL *functions, gl::Workarounds *workarounds
namespace nativegl
{
std::string FormatDebugMessage(GLenum source,
GLenum type,
GLuint id,
GLenum severity,
GLsizei length,
const GLchar *message);
bool SupportsFenceSync(const FunctionsGL *functions);
bool SupportsOcclusionQueries(const FunctionsGL *functions);
bool SupportsNativeRendering(const FunctionsGL *functions,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment