Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit c74c3d8

Browse files
dong-jaCommit Bot
authored andcommitted
DEBUG: Log all debug messages to console
Logs all debug messages produced by GL and EGL. This is helpful for debugging when the application does not register a debug callback. Validation errors produce log messages with level INFO, and internal errors produce log messages with level WARN. Bug: angleproject:3505 Change-Id: I269055aec49e1d77edeedb482fa6873c8f79f853 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1645817 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
1 parent 70642e4 commit c74c3d8

File tree

3 files changed

+98
-13
lines changed

3 files changed

+98
-13
lines changed

src/libANGLE/Context.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5000,7 +5000,7 @@ void Context::debugMessageInsert(GLenum source,
50005000
const GLchar *buf)
50015001
{
50025002
std::string msg(buf, (length > 0) ? static_cast<size_t>(length) : strlen(buf));
5003-
mState.getDebug().insertMessage(source, type, id, severity, std::move(msg));
5003+
mState.getDebug().insertMessage(source, type, id, severity, std::move(msg), gl::LOG_INFO);
50045004
}
50055005

50065006
void Context::debugMessageCallback(GLDEBUGPROCKHR callback, const void *userParam)
@@ -8344,11 +8344,13 @@ void ErrorSet::handleError(GLenum errorCode,
83448344

83458345
std::string formattedMessage = errorStream.str();
83468346

8347-
// Always log a warning, this function is only called on unexpected internal errors.
8348-
WARN() << formattedMessage;
8347+
// Process the error, but log it with WARN severity so it shows up in logs.
8348+
ASSERT(errorCode != GL_NO_ERROR);
8349+
mErrors.insert(errorCode);
83498350

8350-
// validationError does the necessary work to process the error.
8351-
validationError(errorCode, formattedMessage.c_str());
8351+
mContext->getState().getDebug().insertMessage(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR,
8352+
errorCode, GL_DEBUG_SEVERITY_HIGH, message,
8353+
gl::LOG_WARN);
83528354
}
83538355

83548356
void ErrorSet::validationError(GLenum errorCode, const char *message)
@@ -8357,7 +8359,8 @@ void ErrorSet::validationError(GLenum errorCode, const char *message)
83578359
mErrors.insert(errorCode);
83588360

83598361
mContext->getState().getDebug().insertMessage(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_ERROR,
8360-
errorCode, GL_DEBUG_SEVERITY_HIGH, message);
8362+
errorCode, GL_DEBUG_SEVERITY_HIGH, message,
8363+
gl::LOG_INFO);
83618364
}
83628365

83638366
bool ErrorSet::empty() const

src/libANGLE/Debug.cpp

Lines changed: 85 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,67 @@
1313
#include <algorithm>
1414
#include <tuple>
1515

16+
namespace
17+
{
18+
const char *GLSeverityToString(GLenum severity)
19+
{
20+
switch (severity)
21+
{
22+
case GL_DEBUG_SEVERITY_HIGH:
23+
return "HIGH";
24+
case GL_DEBUG_SEVERITY_MEDIUM:
25+
return "MEDIUM";
26+
case GL_DEBUG_SEVERITY_LOW:
27+
return "LOW";
28+
case GL_DEBUG_SEVERITY_NOTIFICATION:
29+
default:
30+
return "NOTIFICATION";
31+
}
32+
}
33+
34+
const char *EGLMessageTypeToString(egl::MessageType messageType)
35+
{
36+
switch (messageType)
37+
{
38+
case egl::MessageType::Critical:
39+
return "CRITICAL";
40+
case egl::MessageType::Error:
41+
return "ERROR";
42+
case egl::MessageType::Warn:
43+
return "WARNING";
44+
case egl::MessageType::Info:
45+
default:
46+
return "INFO";
47+
}
48+
}
49+
50+
const char *GLMessageTypeToString(GLenum type)
51+
{
52+
switch (type)
53+
{
54+
case GL_DEBUG_TYPE_ERROR:
55+
return "error";
56+
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
57+
return "deprecated behavior";
58+
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
59+
return "undefined behavior";
60+
case GL_DEBUG_TYPE_PORTABILITY:
61+
return "portability";
62+
case GL_DEBUG_TYPE_PERFORMANCE:
63+
return "performance";
64+
case GL_DEBUG_TYPE_MARKER:
65+
return "marker";
66+
case GL_DEBUG_TYPE_PUSH_GROUP:
67+
return "start of group";
68+
case GL_DEBUG_TYPE_POP_GROUP:
69+
return "end of group";
70+
case GL_DEBUG_TYPE_OTHER:
71+
default:
72+
return "other message";
73+
}
74+
}
75+
} // namespace
76+
1677
namespace gl
1778
{
1879

@@ -87,18 +148,29 @@ void Debug::insertMessage(GLenum source,
87148
GLenum type,
88149
GLuint id,
89150
GLenum severity,
90-
const std::string &message) const
151+
const std::string &message,
152+
gl::LogSeverity logSeverity) const
91153
{
92154
std::string messageCopy(message);
93-
insertMessage(source, type, id, severity, std::move(messageCopy));
155+
insertMessage(source, type, id, severity, std::move(messageCopy), logSeverity);
94156
}
95157

96158
void Debug::insertMessage(GLenum source,
97159
GLenum type,
98160
GLuint id,
99161
GLenum severity,
100-
std::string &&message) const
162+
std::string &&message,
163+
gl::LogSeverity logSeverity) const
101164
{
165+
{
166+
// output all messages to the debug log
167+
const char *messageTypeString = GLMessageTypeToString(type);
168+
const char *severityString = GLSeverityToString(severity);
169+
std::ostringstream messageStream;
170+
messageStream << "GL " << messageTypeString << ": " << severityString << ": " << message;
171+
gl::Trace(logSeverity, messageStream.str().c_str());
172+
}
173+
102174
if (!isMessageEnabled(source, type, id, severity))
103175
{
104176
return;
@@ -223,7 +295,7 @@ void Debug::setMessageControl(GLenum source,
223295
void Debug::pushGroup(GLenum source, GLuint id, std::string &&message)
224296
{
225297
insertMessage(source, GL_DEBUG_TYPE_PUSH_GROUP, id, GL_DEBUG_SEVERITY_NOTIFICATION,
226-
std::string(message));
298+
std::string(message), gl::LOG_INFO);
227299

228300
Group g;
229301
g.source = source;
@@ -241,7 +313,7 @@ void Debug::popGroup()
241313
mGroups.pop_back();
242314

243315
insertMessage(g.source, GL_DEBUG_TYPE_POP_GROUP, g.id, GL_DEBUG_SEVERITY_NOTIFICATION,
244-
g.message);
316+
g.message, gl::LOG_INFO);
245317
}
246318

247319
size_t Debug::getGroupStackDepth() const
@@ -365,6 +437,14 @@ void Debug::insertMessage(EGLenum error,
365437
EGLLabelKHR objectLabel,
366438
const std::string &message) const
367439
{
440+
{
441+
// output all messages to the debug log
442+
const char *messageTypeString = EGLMessageTypeToString(messageType);
443+
std::ostringstream messageStream;
444+
messageStream << "EGL " << messageTypeString << ": " << command << ": " << message;
445+
gl::Trace(gl::LOG_INFO, messageStream.str().c_str());
446+
}
447+
368448
// TODO(geofflang): Lock before checking the callback. http://anglebug.com/2464
369449
if (mCallback && isMessageTypeEnabled(messageType))
370450
{

src/libANGLE/Debug.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,14 @@ class Debug : angle::NonCopyable
5252
GLenum type,
5353
GLuint id,
5454
GLenum severity,
55-
const std::string &message) const;
55+
const std::string &message,
56+
gl::LogSeverity logSeverity) const;
5657
void insertMessage(GLenum source,
5758
GLenum type,
5859
GLuint id,
5960
GLenum severity,
60-
std::string &&message) const;
61+
std::string &&message,
62+
gl::LogSeverity logSeverity) const;
6163

6264
void setMessageControl(GLenum source,
6365
GLenum type,

0 commit comments

Comments
 (0)