Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index 21bc59fc339c7c6f84a5c6505e444ab47de9c934..fe8961e93e630c0fc8784b7ed32be0925c7b42ce 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -27,6 +27,7 @@ |
#define GLES2_GPU_SERVICE 1 |
#include "gpu/command_buffer/common/gles2_cmd_format.h" |
#include "gpu/command_buffer/common/gles2_cmd_utils.h" |
+#include "gpu/command_buffer/common/debug_marker_manager.h" |
#include "gpu/command_buffer/common/id_allocator.h" |
#include "gpu/command_buffer/service/buffer_manager.h" |
#include "gpu/command_buffer/service/cmd_buffer_engine.h" |
@@ -1175,6 +1176,10 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
// Wrapper for glValidateProgram. |
void DoValidateProgram(GLuint program_client_id); |
+ void DoInsertEventMarkerEXT(GLsizei length, const GLchar* marker); |
+ void DoPushGroupMarkerEXT(GLsizei length, const GLchar* group); |
+ void DoPopGroupMarkerEXT(void); |
+ |
// Gets the number of values that will be returned by glGetXXX. Returns |
// false if pname is unknown. |
bool GetNumValuesReturnedForGLGet(GLenum pname, GLsizei* num_values); |
@@ -1355,6 +1360,7 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
void LogMessage(const std::string& msg); |
void RenderWarning(const std::string& msg); |
void PerformanceWarning(const std::string& msg); |
+ const std::string& GetLogPrefix() const; |
bool ShouldDeferDraws() { |
return !offscreen_target_frame_buffer_.get() && |
@@ -1527,6 +1533,9 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
// The current decoder error. |
error::Error current_decoder_error_; |
+ DebugMarkerManager debug_marker_manager_; |
+ std::string this_in_hex_; |
+ |
bool use_shader_translator_; |
scoped_refptr<ShaderTranslator> vertex_translator_; |
scoped_refptr<ShaderTranslator> fragment_translator_; |
@@ -1982,6 +1991,9 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) |
viewport_max_height_(0) { |
DCHECK(group); |
+ GLES2DecoderImpl* this_temp = this; |
+ this_in_hex_ = HexEncode(&this_temp, sizeof(this_temp)); |
+ |
attrib_0_value_.v[0] = 0.0f; |
attrib_0_value_.v[1] = 0.0f; |
attrib_0_value_.v[2] = 0.0f; |
@@ -3200,7 +3212,8 @@ error::Error GLES2DecoderImpl::DoCommand( |
if (log_commands()) { |
// TODO(notme): Change this to a LOG/VLOG that works in release. Tried |
// LOG(INFO), tried VLOG(1), no luck. |
- LOG(ERROR) << "[" << this << "]" << "cmd: " << GetCommandName(command); |
+ LOG(ERROR) << "[" << GetLogPrefix() << "]" << "cmd: " |
+ << GetCommandName(command); |
} |
unsigned int command_index = command - kStartPoint - 1; |
if (command_index < arraysize(g_command_info)) { |
@@ -3224,7 +3237,7 @@ error::Error GLES2DecoderImpl::DoCommand( |
if (debug()) { |
GLenum error; |
while ((error = glGetError()) != GL_NO_ERROR) { |
- LOG(ERROR) << "[" << this << "] " |
+ LOG(ERROR) << "[" << GetLogPrefix() << "] " |
<< "GL ERROR: " << GLES2Util::GetStringEnum(error) << " : " |
<< GetCommandName(command); |
SetGLError(error, "DoCommand", "GL error from driver"); |
@@ -5095,13 +5108,18 @@ void GLES2DecoderImpl::SetGLError( |
GLenum error, const char* function_name, const char* msg) { |
if (msg) { |
last_error_ = msg; |
- LogMessage(std::string("GL ERROR :") + |
+ LogMessage(GetLogPrefix() + ": " + std::string("GL ERROR :") + |
GLES2Util::GetStringEnum(error) + " : " + |
function_name + ": " + msg); |
} |
error_bits_ |= GLES2Util::GLErrorToErrorBit(error); |
} |
+const std::string& GLES2DecoderImpl::GetLogPrefix() const { |
+ const std::string& prefix(debug_marker_manager_.GetMarker()); |
+ return prefix.empty() ? this_in_hex_ : prefix; |
+} |
+ |
void GLES2DecoderImpl::LogMessage(const std::string& msg) { |
if (log_message_count_ < kMaxLogMessages || |
CommandLine::ForCurrentProcess()->HasSwitch( |
@@ -9192,6 +9210,29 @@ void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target, |
BindAndApplyTextureParameters(info); |
} |
+void GLES2DecoderImpl::DoInsertEventMarkerEXT( |
+ GLsizei length, const GLchar* marker) { |
+ if (!marker) { |
+ marker = ""; |
+ } |
+ debug_marker_manager_.SetMarker( |
+ length ? std::string(marker, length) : std::string(marker)); |
+} |
+ |
+void GLES2DecoderImpl::DoPushGroupMarkerEXT( |
+ GLsizei length, const GLchar* marker) { |
+ if (!marker) { |
+ marker = ""; |
+ } |
+ debug_marker_manager_.PushGroup( |
+ length ? std::string(marker, length) : std::string(marker)); |
+} |
+ |
+void GLES2DecoderImpl::DoPopGroupMarkerEXT(void) { |
+ debug_marker_manager_.PopGroup(); |
+} |
+ |
+ |
// Include the auto-generated part of this file. We split this because it means |
// we can easily edit the non-auto generated parts right here in this file |
// instead of having to edit some template or the code generator. |