diff options
23 files changed, 690 insertions, 108 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 103431c..d2b1fba 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -1714,6 +1714,21 @@ _FUNCTION_INFO = { 'needs_size': True, 'gl_test_func': 'DoBindUniformLocationCHROMIUM', }, + 'InsertEventMarkerEXT': { + 'type': 'GLcharN', + 'decoder_func': 'DoInsertEventMarkerEXT', + 'expectation': False, + }, + 'PushGroupMarkerEXT': { + 'type': 'GLcharN', + 'decoder_func': 'DoPushGroupMarkerEXT', + 'expectation': False, + }, + 'PopGroupMarkerEXT': { + 'decoder_func': 'DoPopGroupMarkerEXT', + 'expectation': False, + 'impl_func': False, + }, } @@ -2227,7 +2242,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { if len(func.GetOriginalArgs()): comma = " << " file.Write( - ' GPU_CLIENT_LOG("[" << this << "] gl%s("%s%s << ")");\n' % + ' GPU_CLIENT_LOG("[" << GetLogPrefix() << "] gl%s("%s%s << ")");\n' % (func.original_name, comma, func.MakeLogArgString())) def WriteClientGLReturnLog(self, func, file): @@ -4276,6 +4291,49 @@ TEST_F(GLES2FormatTest, %(func_name)s) { }) +class GLcharNHandler(CustomHandler): + """Handler for functions that pass a single string with an optional len.""" + + def __init__(self): + CustomHandler.__init__(self) + + def InitFunction(self, func): + """Overrriden from TypeHandler.""" + func.cmd_args = [] + func.AddCmdArg(Argument('bucket_id', 'GLuint')) + + def AddImmediateFunction(self, generator, func): + """Overrriden from TypeHandler.""" + pass + + def AddBucketFunction(self, generator, func): + """Overrriden from TypeHandler.""" + pass + + def WriteServiceImplementation(self, func, file): + """Overrriden from TypeHandler.""" + file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s( + uint32 immediate_data_size, const gles2::%(name)s& c) { + GLuint bucket_id = static_cast<GLuint>(c.%(bucket_id)s); + Bucket* bucket = GetBucket(bucket_id); + if (!bucket || bucket->size() == 0) { + return error::kInvalidArguments; + } + std::string str; + if (!bucket->GetAsString(&str)) { + return error::kInvalidArguments; + } + %(gl_func_name)s(0, str.c_str()); + return error::kNoError; +} + +""" % { + 'name': func.name, + 'gl_func_name': func.GetGLFunctionName(), + 'bucket_id': func.cmd_args[0].name, + }) + + class IsHandler(TypeHandler): """Handler for glIs____ type and glGetError functions.""" @@ -4444,7 +4502,8 @@ class STRnHandler(TypeHandler): code_1 = """%(return_type)s %(func_name)s(%(args)s) { GPU_CLIENT_SINGLE_THREAD_CHECK(); """ - code_2 = """ GPU_CLIENT_LOG("[" << this << "] gl%(func_name)s" << "(" + code_2 = """ GPU_CLIENT_LOG("[" << GetLogPrefix() + << "] gl%(func_name)s" << "(" << %(arg0)s << ", " << %(arg1)s << ", " << static_cast<void*>(%(arg2)s) << ", " @@ -5622,6 +5681,7 @@ class GLGenerator(object): 'GENn': GENnHandler(), 'GETn': GETnHandler(), 'GLchar': GLcharHandler(), + 'GLcharN': GLcharNHandler(), 'HandWritten': HandWrittenHandler(), 'Is': IsHandler(), 'Manual': ManualHandler(), diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index c1ecb31..2f4fe35 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h @@ -544,6 +544,15 @@ void GLES2GetQueryivEXT(GLenum target, GLenum pname, GLint* params) { void GLES2GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) { gles2::GetGLContext()->GetQueryObjectuivEXT(id, pname, params); } +void GLES2InsertEventMarkerEXT(GLsizei length, const GLchar* marker) { + gles2::GetGLContext()->InsertEventMarkerEXT(length, marker); +} +void GLES2PushGroupMarkerEXT(GLsizei length, const GLchar* marker) { + gles2::GetGLContext()->PushGroupMarkerEXT(length, marker); +} +void GLES2PopGroupMarkerEXT() { + gles2::GetGLContext()->PopGroupMarkerEXT(); +} void GLES2SwapBuffers() { gles2::GetGLContext()->SwapBuffers(); } diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index 098674d..77c1ac1 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h @@ -1574,6 +1574,28 @@ } } + void InsertEventMarkerEXT(GLuint bucket_id) { + gles2::InsertEventMarkerEXT* c = + GetCmdSpace<gles2::InsertEventMarkerEXT>(); + if (c) { + c->Init(bucket_id); + } + } + + void PushGroupMarkerEXT(GLuint bucket_id) { + gles2::PushGroupMarkerEXT* c = GetCmdSpace<gles2::PushGroupMarkerEXT>(); + if (c) { + c->Init(bucket_id); + } + } + + void PopGroupMarkerEXT() { + gles2::PopGroupMarkerEXT* c = GetCmdSpace<gles2::PopGroupMarkerEXT>(); + if (c) { + c->Init(); + } + } + void SwapBuffers() { gles2::SwapBuffers* c = GetCmdSpace<gles2::SwapBuffers>(); if (c) { diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index f600bed..c0e1a01 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc @@ -10,6 +10,8 @@ #include <map> #include <queue> #include <set> +#include <stdio.h> +#include <string.h> #include <GLES2/gl2ext.h> #include "../client/mapped_memory.h" #include "../client/program_info_manager.h" @@ -424,6 +426,11 @@ GLES2Implementation::GLES2Implementation( context_lost_(false) { GPU_DCHECK(helper); GPU_DCHECK(transfer_buffer); + + char temp[128]; + sprintf(temp, "%p", this); + this_in_hex_ = std::string(temp); + GPU_CLIENT_LOG_CODE_BLOCK({ debug_ = CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableGPUClientLogging); @@ -604,9 +611,14 @@ bool GLES2Implementation::IsAnglePackReverseRowOrderAvailable() { } } +const std::string& GLES2Implementation::GetLogPrefix() const { + const std::string& prefix(debug_marker_manager_.GetMarker()); + return prefix.empty() ? this_in_hex_ : prefix; +} + GLenum GLES2Implementation::GetError() { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetError()"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetError()"); GLenum err = GetGLError(); GPU_CLIENT_LOG("returned " << GLES2Util::GetStringError(err)); return err; @@ -652,7 +664,7 @@ GLenum GLES2Implementation::GetGLError() { void GLES2Implementation::SetGLError( GLenum error, const char* function_name, const char* msg) { - GPU_CLIENT_LOG("[" << this << "] Client Synthesized Error: " + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] Client Synthesized Error: " << GLES2Util::GetStringError(error) << ": " << function_name << ": " << msg); if (msg) { @@ -804,7 +816,7 @@ bool GLES2Implementation::SetCapabilityState(GLenum cap, bool enabled) { void GLES2Implementation::Disable(GLenum cap) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glDisable(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDisable(" << GLES2Util::GetStringCapability(cap) << ")"); SetCapabilityState(cap, false); helper_->Disable(cap); @@ -812,7 +824,7 @@ void GLES2Implementation::Disable(GLenum cap) { void GLES2Implementation::Enable(GLenum cap) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glEnable(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glEnable(" << GLES2Util::GetStringCapability(cap) << ")"); SetCapabilityState(cap, true); helper_->Enable(cap); @@ -820,7 +832,7 @@ void GLES2Implementation::Enable(GLenum cap) { GLboolean GLES2Implementation::IsEnabled(GLenum cap) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glIsEnabled(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsEnabled(" << GLES2Util::GetStringCapability(cap) << ")"); bool state = false; switch (cap) { @@ -991,7 +1003,7 @@ GLuint GLES2Implementation::GetMaxValueInBufferCHROMIUMHelper( GLuint GLES2Implementation::GetMaxValueInBufferCHROMIUM( GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetMaxValueInBufferCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetMaxValueInBufferCHROMIUM(" << buffer_id << ", " << count << ", " << GLES2Util::GetStringGetMaxIndexType(type) << ", " << offset << ")"); @@ -1003,14 +1015,14 @@ GLuint GLES2Implementation::GetMaxValueInBufferCHROMIUM( void GLES2Implementation::Clear(GLbitfield mask) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glClear(" << mask << ")"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClear(" << mask << ")"); helper_->Clear(mask); } void GLES2Implementation::DrawElements( GLenum mode, GLsizei count, GLenum type, const void* indices) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glDrawElements(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawElements(" << GLES2Util::GetStringDrawMode(mode) << ", " << count << ", " << GLES2Util::GetStringIndexType(type) << ", " @@ -1063,7 +1075,7 @@ void GLES2Implementation::DrawElements( void GLES2Implementation::Flush() { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glFlush()"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFlush()"); // Insert the cmd to call glFlush helper_->Flush(); // Flush our command buffer @@ -1073,7 +1085,7 @@ void GLES2Implementation::Flush() { void GLES2Implementation::ShallowFlushCHROMIUM() { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glShallowFlushCHROMIUM()"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glShallowFlushCHROMIUM()"); // Flush our command buffer // (tell the service to execute up to the flush cmd.) helper_->CommandBufferHelper::Flush(); @@ -1094,7 +1106,7 @@ bool GLES2Implementation::MustBeContextLost() { } void GLES2Implementation::FinishHelper() { - GPU_CLIENT_LOG("[" << this << "] glFinish()"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFinish()"); TRACE_EVENT0("gpu", "GLES2::Finish"); // Insert the cmd to call glFinish helper_->Finish(); @@ -1106,7 +1118,7 @@ void GLES2Implementation::FinishHelper() { void GLES2Implementation::SwapBuffers() { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glSwapBuffers()"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glSwapBuffers()"); // TODO(piman): Strictly speaking we'd want to insert the token after the // swap, but the state update with the updated token might not have happened // by the time the SwapBuffer callback gets called, forcing us to synchronize @@ -1127,7 +1139,7 @@ void GLES2Implementation::SwapBuffers() { void GLES2Implementation::GenSharedIdsCHROMIUM( GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) { - GPU_CLIENT_LOG("[" << this << "] glGenSharedIdsCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenSharedIdsCHROMIUM(" << namespace_id << ", " << id_offset << ", " << n << ", " << static_cast<void*>(ids) << ")"); TRACE_EVENT0("gpu", "GLES2::GenSharedIdsCHROMIUM"); @@ -1155,7 +1167,7 @@ void GLES2Implementation::GenSharedIdsCHROMIUM( void GLES2Implementation::DeleteSharedIdsCHROMIUM( GLuint namespace_id, GLsizei n, const GLuint* ids) { - GPU_CLIENT_LOG("[" << this << "] glDeleteSharedIdsCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteSharedIdsCHROMIUM(" << namespace_id << ", " << n << ", " << static_cast<const void*>(ids) << ")"); GPU_CLIENT_LOG_CODE_BLOCK({ @@ -1181,7 +1193,7 @@ void GLES2Implementation::DeleteSharedIdsCHROMIUM( void GLES2Implementation::RegisterSharedIdsCHROMIUM( GLuint namespace_id, GLsizei n, const GLuint* ids) { - GPU_CLIENT_LOG("[" << this << "] glRegisterSharedIdsCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRegisterSharedIdsCHROMIUM(" << namespace_id << ", " << n << ", " << static_cast<const void*>(ids) << ")"); GPU_CLIENT_LOG_CODE_BLOCK({ @@ -1208,8 +1220,8 @@ void GLES2Implementation::RegisterSharedIdsCHROMIUM( void GLES2Implementation::BindAttribLocation( GLuint program, GLuint index, const char* name) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glBindAttribLocation(" << program << ", " - << index << ", " << name << ")"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindAttribLocation(" + << program << ", " << index << ", " << name << ")"); SetBucketAsString(kResultBucketId, name); helper_->BindAttribLocationBucket(program, index, kResultBucketId); helper_->SetBucketSize(kResultBucketId, 0); @@ -1218,7 +1230,7 @@ void GLES2Implementation::BindAttribLocation( void GLES2Implementation::BindUniformLocationCHROMIUM( GLuint program, GLint location, const char* name) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glBindUniformLocationCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindUniformLocationCHROMIUM(" << program << ", " << location << ", " << name << ")"); SetBucketAsString(kResultBucketId, name); helper_->BindUniformLocationCHROMIUMBucket( @@ -1229,8 +1241,8 @@ void GLES2Implementation::BindUniformLocationCHROMIUM( void GLES2Implementation::GetVertexAttribPointerv( GLuint index, GLenum pname, void** ptr) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetVertexAttribPointer(" << index << ", " - << GLES2Util::GetStringVertexPointer(pname) << ", " + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetVertexAttribPointer(" + << index << ", " << GLES2Util::GetStringVertexPointer(pname) << ", " << static_cast<void*>(ptr) << ")"); #if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) @@ -1314,7 +1326,7 @@ GLint GLES2Implementation::GetAttribLocationHelper( GLint GLES2Implementation::GetAttribLocation( GLuint program, const char* name) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetAttribLocation(" << program + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetAttribLocation(" << program << ", " << name << ")"); TRACE_EVENT0("gpu", "GLES2::GetAttribLocation"); GLint loc = share_group_->program_info_manager()->GetAttribLocation( @@ -1342,7 +1354,7 @@ GLint GLES2Implementation::GetUniformLocationHelper( GLint GLES2Implementation::GetUniformLocation( GLuint program, const char* name) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetUniformLocation(" << program + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetUniformLocation(" << program << ", " << name << ")"); TRACE_EVENT0("gpu", "GLES2::GetUniformLocation"); GLint loc = share_group_->program_info_manager()->GetUniformLocation( @@ -1365,7 +1377,7 @@ bool GLES2Implementation::GetProgramivHelper( void GLES2Implementation::LinkProgram(GLuint program) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glLinkProgram(" << program << ")"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glLinkProgram(" << program << ")"); helper_->LinkProgram(program); share_group_->program_info_manager()->CreateInfo(program); } @@ -1374,7 +1386,7 @@ void GLES2Implementation::ShaderBinary( GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glShaderBinary(" << n << ", " + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glShaderBinary(" << n << ", " << static_cast<const void*>(shaders) << ", " << GLES2Util::GetStringEnum(binaryformat) << ", " << static_cast<const void*>(binary) << ", " @@ -1411,7 +1423,7 @@ void GLES2Implementation::ShaderBinary( void GLES2Implementation::PixelStorei(GLenum pname, GLint param) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glPixelStorei(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPixelStorei(" << GLES2Util::GetStringPixelStore(pname) << ", " << param << ")"); switch (pname) { @@ -1448,7 +1460,7 @@ void GLES2Implementation::VertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glVertexAttribPointer(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttribPointer(" << index << ", " << size << ", " << GLES2Util::GetStringVertexAttribType(type) << ", " @@ -1473,7 +1485,7 @@ void GLES2Implementation::VertexAttribPointer( void GLES2Implementation::VertexAttribDivisorANGLE( GLuint index, GLuint divisor) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glVertexAttribDivisorANGLE(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttribDivisorANGLE(" << index << ", " << divisor << ") "); #if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) @@ -1486,7 +1498,7 @@ void GLES2Implementation::VertexAttribDivisorANGLE( void GLES2Implementation::ShaderSource( GLuint shader, GLsizei count, const char** source, const GLint* length) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glShaderSource(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glShaderSource(" << shader << ", " << count << ", " << static_cast<const void*>(source) << ", " << static_cast<const void*>(length) << ")"); @@ -1593,7 +1605,7 @@ void GLES2Implementation::BufferDataHelper( void GLES2Implementation::BufferData( GLenum target, GLsizeiptr size, const void* data, GLenum usage) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glBufferData(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBufferData(" << GLES2Util::GetStringBufferTarget(target) << ", " << size << ", " << static_cast<const void*>(data) << ", " @@ -1643,7 +1655,7 @@ void GLES2Implementation::BufferSubDataHelperImpl( void GLES2Implementation::BufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const void* data) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glBufferSubData(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBufferSubData(" << GLES2Util::GetStringBufferTarget(target) << ", " << offset << ", " << size << ", " << static_cast<const void*>(data) << ")"); @@ -1654,7 +1666,7 @@ void GLES2Implementation::CompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei image_size, const void* data) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glCompressedTexImage2D(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompressedTexImage2D(" << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", " << GLES2Util::GetStringCompressedTextureFormat(internalformat) << ", " @@ -1681,7 +1693,7 @@ void GLES2Implementation::CompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei image_size, const void* data) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glCompressedTexSubImage2D(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompressedTexSubImage2D(" << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", " << xoffset << ", " << yoffset << ", " @@ -1742,7 +1754,7 @@ void GLES2Implementation::TexImage2D( GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glTexImage2D(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexImage2D(" << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", " << GLES2Util::GetStringTextureInternalFormat(internalformat) << ", " @@ -1824,7 +1836,7 @@ void GLES2Implementation::TexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glTexSubImage2D(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexSubImage2D(" << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", " << xoffset << ", " << yoffset << ", " @@ -1976,7 +1988,7 @@ void GLES2Implementation::GetActiveAttrib( GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetActiveAttrib(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetActiveAttrib(" << program << ", " << index << ", " << bufsize << ", " << static_cast<const void*>(length) << ", " << static_cast<const void*>(size) << ", " @@ -2046,7 +2058,7 @@ void GLES2Implementation::GetActiveUniform( GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetActiveUniform(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetActiveUniform(" << program << ", " << index << ", " << bufsize << ", " << static_cast<const void*>(length) << ", " << static_cast<const void*>(size) << ", " @@ -2075,7 +2087,7 @@ void GLES2Implementation::GetActiveUniform( void GLES2Implementation::GetAttachedShaders( GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetAttachedShaders(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetAttachedShaders(" << program << ", " << maxcount << ", " << static_cast<const void*>(count) << ", " << static_cast<const void*>(shaders) << ", "); @@ -2113,7 +2125,7 @@ void GLES2Implementation::GetAttachedShaders( void GLES2Implementation::GetShaderPrecisionFormat( GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetShaderPrecisionFormat(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderPrecisionFormat(" << GLES2Util::GetStringShaderType(shadertype) << ", " << GLES2Util::GetStringShaderPrecision(precisiontype) << ", " << static_cast<const void*>(range) << ", " @@ -2189,7 +2201,7 @@ const GLubyte* GLES2Implementation::GetStringHelper(GLenum name) { const GLubyte* GLES2Implementation::GetString(GLenum name) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetString(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetString(" << GLES2Util::GetStringStringType(name) << ")"); const GLubyte* result = GetStringHelper(name); GPU_CLIENT_LOG(" returned " << reinterpret_cast<const char*>(result)); @@ -2199,7 +2211,7 @@ const GLubyte* GLES2Implementation::GetString(GLenum name) { void GLES2Implementation::GetUniformfv( GLuint program, GLint location, GLfloat* params) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetUniformfv(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetUniformfv(" << program << ", " << location << ", " << static_cast<const void*>(params) << ")"); TRACE_EVENT0("gpu", "GLES2::GetUniformfv"); @@ -2223,7 +2235,7 @@ void GLES2Implementation::GetUniformfv( void GLES2Implementation::GetUniformiv( GLuint program, GLint location, GLint* params) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetUniformiv(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetUniformiv(" << program << ", " << location << ", " << static_cast<const void*>(params) << ")"); TRACE_EVENT0("gpu", "GLES2::GetUniformiv"); @@ -2248,7 +2260,7 @@ void GLES2Implementation::ReadPixels( GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glReadPixels(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReadPixels(" << xoffset << ", " << yoffset << ", " << width << ", " << height << ", " << GLES2Util::GetStringReadPixelFormat(format) << ", " @@ -2336,7 +2348,7 @@ void GLES2Implementation::ReadPixels( void GLES2Implementation::ActiveTexture(GLenum texture) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glActiveTexture(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glActiveTexture(" << GLES2Util::GetStringEnum(texture) << ")"); GLuint texture_index = texture - GL_TEXTURE0; if (texture_index >= static_cast<GLuint>( @@ -2537,7 +2549,7 @@ void GLES2Implementation::DeleteTexturesStub( void GLES2Implementation::DisableVertexAttribArray(GLuint index) { GPU_CLIENT_SINGLE_THREAD_CHECK(); GPU_CLIENT_LOG( - "[" << this << "] glDisableVertexAttribArray(" << index << ")"); + "[" << GetLogPrefix() << "] glDisableVertexAttribArray(" << index << ")"); #if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) client_side_buffer_helper_->SetAttribEnable(index, false); #endif @@ -2546,7 +2558,8 @@ void GLES2Implementation::DisableVertexAttribArray(GLuint index) { void GLES2Implementation::EnableVertexAttribArray(GLuint index) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glEnableVertexAttribArray(" << index << ")"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glEnableVertexAttribArray(" + << index << ")"); #if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS) client_side_buffer_helper_->SetAttribEnable(index, true); #endif @@ -2555,7 +2568,7 @@ void GLES2Implementation::EnableVertexAttribArray(GLuint index) { void GLES2Implementation::DrawArrays(GLenum mode, GLint first, GLsizei count) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glDrawArrays(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawArrays(" << GLES2Util::GetStringDrawMode(mode) << ", " << first << ", " << count << ")"); if (count < 0) { @@ -2620,7 +2633,7 @@ bool GLES2Implementation::GetVertexAttribHelper( void GLES2Implementation::GetVertexAttribfv( GLuint index, GLenum pname, GLfloat* params) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetVertexAttribfv(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetVertexAttribfv(" << index << ", " << GLES2Util::GetStringVertexAttribute(pname) << ", " << static_cast<const void*>(params) << ")"); @@ -2652,7 +2665,7 @@ void GLES2Implementation::GetVertexAttribfv( void GLES2Implementation::GetVertexAttribiv( GLuint index, GLenum pname, GLint* params) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetVertexAttribiv(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetVertexAttribiv(" << index << ", " << GLES2Util::GetStringVertexAttribute(pname) << ", " << static_cast<const void*>(params) << ")"); @@ -2684,7 +2697,7 @@ void GLES2Implementation::GetVertexAttribiv( GLboolean GLES2Implementation::EnableFeatureCHROMIUM( const char* feature) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glEnableFeatureCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glEnableFeatureCHROMIUM(" << feature << ")"); TRACE_EVENT0("gpu", "GLES2::EnableFeatureCHROMIUM"); typedef EnableFeatureCHROMIUM::Result Result; @@ -2705,7 +2718,7 @@ GLboolean GLES2Implementation::EnableFeatureCHROMIUM( void* GLES2Implementation::MapBufferSubDataCHROMIUM( GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glMapBufferSubDataCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapBufferSubDataCHROMIUM(" << target << ", " << offset << ", " << size << ", " << GLES2Util::GetStringEnum(access) << ")"); // NOTE: target is NOT checked because the service will check it @@ -2740,7 +2753,7 @@ void* GLES2Implementation::MapBufferSubDataCHROMIUM( void GLES2Implementation::UnmapBufferSubDataCHROMIUM(const void* mem) { GPU_CLIENT_SINGLE_THREAD_CHECK(); GPU_CLIENT_LOG( - "[" << this << "] glUnmapBufferSubDataCHROMIUM(" << mem << ")"); + "[" << GetLogPrefix() << "] glUnmapBufferSubDataCHROMIUM(" << mem << ")"); MappedBufferMap::iterator it = mapped_buffers_.find(mem); if (it == mapped_buffers_.end()) { SetGLError( @@ -2765,7 +2778,7 @@ void* GLES2Implementation::MapTexSubImage2DCHROMIUM( GLenum type, GLenum access) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glMapTexSubImage2DCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapTexSubImage2DCHROMIUM(" << target << ", " << level << ", " << xoffset << ", " << yoffset << ", " << width << ", " << height << ", " @@ -2813,7 +2826,7 @@ void* GLES2Implementation::MapTexSubImage2DCHROMIUM( void GLES2Implementation::UnmapTexSubImage2DCHROMIUM(const void* mem) { GPU_CLIENT_SINGLE_THREAD_CHECK(); GPU_CLIENT_LOG( - "[" << this << "] glUnmapTexSubImage2DCHROMIUM(" << mem << ")"); + "[" << GetLogPrefix() << "] glUnmapTexSubImage2DCHROMIUM(" << mem << ")"); MappedTextureMap::iterator it = mapped_textures_.find(mem); if (it == mapped_textures_.end()) { SetGLError( @@ -2830,14 +2843,15 @@ void GLES2Implementation::UnmapTexSubImage2DCHROMIUM(const void* mem) { void GLES2Implementation::ResizeCHROMIUM(GLuint width, GLuint height) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glResizeCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glResizeCHROMIUM(" << width << ", " << height << ")"); helper_->ResizeCHROMIUM(width, height); } const GLchar* GLES2Implementation::GetRequestableExtensionsCHROMIUM() { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetRequestableExtensionsCHROMIUM()"); + GPU_CLIENT_LOG("[" << GetLogPrefix() + << "] glGetRequestableExtensionsCHROMIUM()"); TRACE_EVENT0("gpu", "GLES2Implementation::GetRequestableExtensionsCHROMIUM()"); const char* result = NULL; @@ -2867,7 +2881,7 @@ const GLchar* GLES2Implementation::GetRequestableExtensionsCHROMIUM() { void GLES2Implementation::RequestExtensionCHROMIUM(const char* extension) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glRequestExtensionCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRequestExtensionCHROMIUM(" << extension << ")"); SetBucketAsCString(kResultBucketId, extension); helper_->RequestExtensionCHROMIUM(kResultBucketId); @@ -2880,7 +2894,7 @@ void GLES2Implementation::RequestExtensionCHROMIUM(const char* extension) { void GLES2Implementation::RateLimitOffscreenContextCHROMIUM() { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glRateLimitOffscreenCHROMIUM()"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRateLimitOffscreenCHROMIUM()"); // Wait if this would add too many rate limit tokens. if (rate_limit_tokens_.size() == kMaxSwapBuffers) { helper_->WaitForToken(rate_limit_tokens_.front()); @@ -2892,7 +2906,7 @@ void GLES2Implementation::RateLimitOffscreenContextCHROMIUM() { void GLES2Implementation::GetMultipleIntegervCHROMIUM( const GLenum* pnames, GLuint count, GLint* results, GLsizeiptr size) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGetMultipleIntegervCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetMultipleIntegervCHROMIUM(" << static_cast<const void*>(pnames) << ", " << count << ", " << results << ", " << size << ")"); GPU_CLIENT_LOG_CODE_BLOCK({ @@ -2993,7 +3007,7 @@ void GLES2Implementation::GetProgramInfoCHROMIUM( GLuint GLES2Implementation::CreateStreamTextureCHROMIUM(GLuint texture) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] CreateStreamTextureCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] CreateStreamTextureCHROMIUM(" << texture << ")"); TRACE_EVENT0("gpu", "GLES2::CreateStreamTextureCHROMIUM"); typedef CreateStreamTextureCHROMIUM::Result Result; @@ -3013,7 +3027,7 @@ GLuint GLES2Implementation::CreateStreamTextureCHROMIUM(GLuint texture) { void GLES2Implementation::DestroyStreamTextureCHROMIUM(GLuint texture) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] DestroyStreamTextureCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] DestroyStreamTextureCHROMIUM(" << texture << ")"); TRACE_EVENT0("gpu", "GLES2::DestroyStreamTextureCHROMIUM"); helper_->DestroyStreamTextureCHROMIUM(texture); @@ -3022,7 +3036,7 @@ void GLES2Implementation::DestroyStreamTextureCHROMIUM(GLuint texture) { void GLES2Implementation::PostSubBufferCHROMIUM( GLint x, GLint y, GLint width, GLint height) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] PostSubBufferCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] PostSubBufferCHROMIUM(" << x << ", " << y << ", " << width << ", " << height << ")"); TRACE_EVENT0("gpu", "GLES2::PostSubBufferCHROMIUM"); @@ -3086,7 +3100,7 @@ void GLES2Implementation::DeleteQueriesStub( GLboolean GLES2Implementation::IsQueryEXT(GLuint id) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] IsQueryEXT(" << id << ")"); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] IsQueryEXT(" << id << ")"); // TODO(gman): To be spec compliant IDs from other contexts sharing // resources need to return true here even though you can't share @@ -3096,7 +3110,7 @@ GLboolean GLES2Implementation::IsQueryEXT(GLuint id) { void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] BeginQueryEXT(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] BeginQueryEXT(" << GLES2Util::GetStringQueryTarget(target) << ", " << id << ")"); @@ -3136,7 +3150,7 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) { void GLES2Implementation::EndQueryEXT(GLenum target) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] EndQueryEXT(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] EndQueryEXT(" << GLES2Util::GetStringQueryTarget(target) << ")"); // Don't do anything if the context is lost. if (context_lost_) { @@ -3161,7 +3175,7 @@ void GLES2Implementation::EndQueryEXT(GLenum target) { void GLES2Implementation::GetQueryivEXT( GLenum target, GLenum pname, GLint* params) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] GetQueryivEXT(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryivEXT(" << GLES2Util::GetStringQueryTarget(target) << ", " << GLES2Util::GetStringQueryParameter(pname) << ", " << static_cast<const void*>(params) << ")"); @@ -3178,7 +3192,7 @@ void GLES2Implementation::GetQueryivEXT( void GLES2Implementation::GetQueryObjectuivEXT( GLuint id, GLenum pname, GLuint* params) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] GetQueryivEXT(" << id << ", " + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryivEXT(" << id << ", " << GLES2Util::GetStringQueryObjectParameter(pname) << ", " << static_cast<const void*>(params) << ")"); @@ -3232,7 +3246,7 @@ void GLES2Implementation::GetQueryObjectuivEXT( void GLES2Implementation::DrawArraysInstancedANGLE( GLenum mode, GLint first, GLsizei count, GLsizei primcount) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glDrawArraysInstancedANGLE(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawArraysInstancedANGLE(" << GLES2Util::GetStringDrawMode(mode) << ", " << first << ", " << count << ", " << primcount << ")"); if (count < 0) { @@ -3267,7 +3281,7 @@ void GLES2Implementation::DrawElementsInstancedANGLE( GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glDrawElementsInstancedANGLE(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawElementsInstancedANGLE(" << GLES2Util::GetStringDrawMode(mode) << ", " << count << ", " << GLES2Util::GetStringIndexType(type) << ", " @@ -3332,7 +3346,7 @@ void GLES2Implementation::DrawElementsInstancedANGLE( void GLES2Implementation::GenMailboxCHROMIUM( GLbyte* mailbox) { GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << this << "] glGenMailboxCHROMIUM(" + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenMailboxCHROMIUM(" << static_cast<const void*>(mailbox) << ")"); TRACE_EVENT0("gpu", "GLES2::GenMailboxCHROMIUM"); @@ -3344,5 +3358,46 @@ void GLES2Implementation::GenMailboxCHROMIUM( std::copy(result.begin(), result.end(), mailbox); } +void GLES2Implementation::PushGroupMarkerEXT( + GLsizei length, const GLchar* marker) { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPushGroupMarkerEXT(" + << length << ", " << marker << ")"); + if (!marker) { + marker = ""; + } + SetBucketAsString( + kResultBucketId, + (length ? std::string(marker, length) : std::string(marker))); + helper_->PushGroupMarkerEXT(kResultBucketId); + helper_->SetBucketSize(kResultBucketId, 0); + debug_marker_manager_.PushGroup( + length ? std::string(marker, length) : std::string(marker)); +} + +void GLES2Implementation::InsertEventMarkerEXT( + GLsizei length, const GLchar* marker) { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glInsertEventMarkerEXT(" + << length << ", " << marker << ")"); + if (!marker) { + marker = ""; + } + SetBucketAsString( + kResultBucketId, + (length ? std::string(marker, length) : std::string(marker))); + helper_->InsertEventMarkerEXT(kResultBucketId); + helper_->SetBucketSize(kResultBucketId, 0); + debug_marker_manager_.SetMarker( + length ? std::string(marker, length) : std::string(marker)); +} + +void GLES2Implementation::PopGroupMarkerEXT() { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPopGroupMarkerEXT()"); + helper_->PopGroupMarkerEXT(); + debug_marker_manager_.PopGroup(); +} + } // namespace gles2 } // namespace gpu diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h index 44fcc891..04e2c8a 100644 --- a/gpu/command_buffer/client/gles2_implementation.h +++ b/gpu/command_buffer/client/gles2_implementation.h @@ -13,6 +13,7 @@ #include <string> #include <vector> +#include "../common/debug_marker_manager.h" #include "../common/gles2_cmd_utils.h" #include "../common/scoped_ptr.h" #include "../client/ref_counted.h" @@ -468,10 +469,14 @@ class GLES2_IMPL_EXPORT GLES2Implementation { // for error checking. bool MustBeContextLost(); + const std::string& GetLogPrefix() const; + GLES2Util util_; GLES2CmdHelper* helper_; TransferBufferInterface* transfer_buffer_; std::string last_error_; + DebugMarkerManager debug_marker_manager_; + std::string this_in_hex_; std::queue<int32> swap_buffers_tokens_; std::queue<int32> rate_limit_tokens_; diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index f4c5920..1dd7de9 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h @@ -1432,6 +1432,12 @@ void GetQueryivEXT(GLenum target, GLenum pname, GLint* params); void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params); +void InsertEventMarkerEXT(GLsizei length, const GLchar* marker); + +void PushGroupMarkerEXT(GLsizei length, const GLchar* marker); + +void PopGroupMarkerEXT(); + void SwapBuffers(); GLuint GetMaxValueInBufferCHROMIUM( diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h index 8e977e7..ddf5d71 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h @@ -1594,6 +1594,19 @@ TEST_F(GLES2ImplementationTest, DeleteQueriesEXT) { EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); } // TODO: Implement unit test for BeginQueryEXT +// TODO: Implement unit test for InsertEventMarkerEXT +// TODO: Implement unit test for PushGroupMarkerEXT + +TEST_F(GLES2ImplementationTest, PopGroupMarkerEXT) { + struct Cmds { + PopGroupMarkerEXT cmd; + }; + Cmds expected; + expected.cmd.Init(); + + gl_->PopGroupMarkerEXT(); + EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); +} // TODO: Implement unit test for GenSharedIdsCHROMIUM // TODO: Implement unit test for DeleteSharedIdsCHROMIUM // TODO: Implement unit test for RegisterSharedIdsCHROMIUM diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt index a46a415..ca64fdc 100644 --- a/gpu/command_buffer/cmd_buffer_functions.txt +++ b/gpu/command_buffer/cmd_buffer_functions.txt @@ -157,6 +157,10 @@ GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenumQueryTarget target, G GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenumQueryTarget target); GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenumQueryTarget target, GLenumQueryParameter pname, GLint* params); GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLidQuery id, GLenumQueryObjectParameter pname, GLuint* params); +GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar* marker); +GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar* marker); +GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); + // Non-GL commands. GL_APICALL void GL_APIENTRY glSwapBuffers (void); GL_APICALL GLuint GL_APIENTRY glGetMaxValueInBufferCHROMIUM (GLidBuffer buffer_id, GLsizei count, GLenumGetMaxIndexType type, GLuint offset); diff --git a/gpu/command_buffer/common/debug_marker_manager.cc b/gpu/command_buffer/common/debug_marker_manager.cc new file mode 100644 index 0000000..f0127d5 --- /dev/null +++ b/gpu/command_buffer/common/debug_marker_manager.cc @@ -0,0 +1,51 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gpu/command_buffer/common/debug_marker_manager.h" + +namespace gpu { +namespace gles2 { + +DebugMarkerManager::Group::Group(const std::string& name) + : name_(name), + marker_(name) { +} + +DebugMarkerManager::Group::~Group() { +} + +void DebugMarkerManager::Group::SetMarker(const std::string& marker) { + marker_ = name_ + "." + marker; +} + +DebugMarkerManager::DebugMarkerManager() { + // Push root group. + group_stack_.push(Group(std::string(""))); +}; + +DebugMarkerManager::~DebugMarkerManager() { +} + +void DebugMarkerManager::SetMarker(const std::string& marker) { + group_stack_.top().SetMarker(marker); +} + +const std::string& DebugMarkerManager::GetMarker() const { + return group_stack_.top().marker(); +} + +void DebugMarkerManager::PushGroup(const std::string& name) { + group_stack_.push(Group(group_stack_.top().name() + "." + name)); +} + +void DebugMarkerManager::PopGroup(void) { + if (group_stack_.size() > 1) { + group_stack_.pop(); + } +} + +} // namespace gles2 +} // namespace gpu + + diff --git a/gpu/command_buffer/common/debug_marker_manager.h b/gpu/command_buffer/common/debug_marker_manager.h new file mode 100644 index 0000000..d7f8389 --- /dev/null +++ b/gpu/command_buffer/common/debug_marker_manager.h @@ -0,0 +1,62 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GPU_COMMAND_BUFFER_SERVICE_DEBUG_MARKER_MANAGER_H_ +#define GPU_COMMAND_BUFFER_SERVICE_DEBUG_MARKER_MANAGER_H_ + +#include <stack> +#include <string> +#include "../../gpu_export.h" + +namespace gpu { +namespace gles2 { + +// Tracks debug marker. +class GPU_EXPORT DebugMarkerManager { + public: + DebugMarkerManager(); + ~DebugMarkerManager(); + + // Gets the current marker on the top group. + const std::string& GetMarker() const; + // Sets the current marker on the top group. + void SetMarker(const std::string& marker); + // Pushes a new group. + void PushGroup(const std::string& name); + // Removes the top group. This is safe to call even when stack is empty. + void PopGroup(void); + + private: + // Info about Buffers currently in the system. + class Group { + public: + explicit Group(const std::string& name); + ~Group(); + + const std::string& name() const { + return name_; + } + + void SetMarker(const std::string& marker); + + const std::string& marker() const { + return marker_; + } + + private: + std::string name_; + std::string marker_; + }; + + typedef std::stack<Group> GroupStack; + + GroupStack group_stack_; + std::string empty_; +}; + +} // namespace gles2 +} // namespace gpu + +#endif // GPU_COMMAND_BUFFER_SERVICE_DEBUG_MARKER_MANAGER_H_ + diff --git a/gpu/command_buffer/common/debug_marker_manager_unittest.cc b/gpu/command_buffer/common/debug_marker_manager_unittest.cc new file mode 100644 index 0000000..c64297d --- /dev/null +++ b/gpu/command_buffer/common/debug_marker_manager_unittest.cc @@ -0,0 +1,63 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gpu/command_buffer/common/debug_marker_manager.h" +#include "gpu/command_buffer/common/gl_mock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace gpu { +namespace gles2 { + +class DebugMarkerManagerTest : public testing::Test { + protected: + virtual void SetUp() { + } + + virtual void TearDown() { + } + + DebugMarkerManager manager_; +}; + +TEST_F(DebugMarkerManagerTest, Basic) { + // Test we can get root + EXPECT_STREQ("", manager_.GetMarker().c_str()); + // Test it's safe to pop an empty stack. + manager_.PopGroup(); + // Test we can still get root. + EXPECT_STREQ("", manager_.GetMarker().c_str()); + // Test setting a marker. + manager_.SetMarker("mark1"); + EXPECT_STREQ(".mark1", manager_.GetMarker().c_str()); + manager_.SetMarker("mark2"); + EXPECT_STREQ(".mark2", manager_.GetMarker().c_str()); + // Test pushing a group. + manager_.PushGroup("abc"); + EXPECT_STREQ(".abc", manager_.GetMarker().c_str()); + // Test setting a marker on the group + manager_.SetMarker("mark3"); + EXPECT_STREQ(".abc.mark3", manager_.GetMarker().c_str()); + manager_.SetMarker("mark4"); + EXPECT_STREQ(".abc.mark4", manager_.GetMarker().c_str()); + // Test pushing a 2nd group. + manager_.PushGroup("def"); + EXPECT_STREQ(".abc.def", manager_.GetMarker().c_str()); + // Test setting a marker on the group + manager_.SetMarker("mark5"); + EXPECT_STREQ(".abc.def.mark5", manager_.GetMarker().c_str()); + manager_.SetMarker("mark6"); + EXPECT_STREQ(".abc.def.mark6", manager_.GetMarker().c_str()); + // Test poping 2nd group. + manager_.PopGroup(); + EXPECT_STREQ(".abc.mark4", manager_.GetMarker().c_str()); + manager_.PopGroup(); + EXPECT_STREQ(".mark2", manager_.GetMarker().c_str()); + manager_.PopGroup(); + EXPECT_STREQ(".mark2", manager_.GetMarker().c_str()); +} + +} // namespace gles2 +} // namespace gpu + + diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index b45640b..d6978d4 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h @@ -8786,6 +8786,104 @@ COMPILE_ASSERT(offsetof(EndQueryEXT, target) == 4, COMPILE_ASSERT(offsetof(EndQueryEXT, submit_count) == 8, OffsetOf_EndQueryEXT_submit_count_not_8); +struct InsertEventMarkerEXT { + typedef InsertEventMarkerEXT ValueType; + static const CommandId kCmdId = kInsertEventMarkerEXT; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + + static uint32 ComputeSize() { + return static_cast<uint32>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { + header.SetCmd<ValueType>(); + } + + void Init(GLuint _bucket_id) { + SetHeader(); + bucket_id = _bucket_id; + } + + void* Set(void* cmd, GLuint _bucket_id) { + static_cast<ValueType*>(cmd)->Init(_bucket_id); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; + uint32 bucket_id; +}; + +COMPILE_ASSERT(sizeof(InsertEventMarkerEXT) == 8, + Sizeof_InsertEventMarkerEXT_is_not_8); +COMPILE_ASSERT(offsetof(InsertEventMarkerEXT, header) == 0, + OffsetOf_InsertEventMarkerEXT_header_not_0); +COMPILE_ASSERT(offsetof(InsertEventMarkerEXT, bucket_id) == 4, + OffsetOf_InsertEventMarkerEXT_bucket_id_not_4); + +struct PushGroupMarkerEXT { + typedef PushGroupMarkerEXT ValueType; + static const CommandId kCmdId = kPushGroupMarkerEXT; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + + static uint32 ComputeSize() { + return static_cast<uint32>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { + header.SetCmd<ValueType>(); + } + + void Init(GLuint _bucket_id) { + SetHeader(); + bucket_id = _bucket_id; + } + + void* Set(void* cmd, GLuint _bucket_id) { + static_cast<ValueType*>(cmd)->Init(_bucket_id); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; + uint32 bucket_id; +}; + +COMPILE_ASSERT(sizeof(PushGroupMarkerEXT) == 8, + Sizeof_PushGroupMarkerEXT_is_not_8); +COMPILE_ASSERT(offsetof(PushGroupMarkerEXT, header) == 0, + OffsetOf_PushGroupMarkerEXT_header_not_0); +COMPILE_ASSERT(offsetof(PushGroupMarkerEXT, bucket_id) == 4, + OffsetOf_PushGroupMarkerEXT_bucket_id_not_4); + +struct PopGroupMarkerEXT { + typedef PopGroupMarkerEXT ValueType; + static const CommandId kCmdId = kPopGroupMarkerEXT; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + + static uint32 ComputeSize() { + return static_cast<uint32>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { + header.SetCmd<ValueType>(); + } + + void Init() { + SetHeader(); + } + + void* Set(void* cmd) { + static_cast<ValueType*>(cmd)->Init(); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; +}; + +COMPILE_ASSERT(sizeof(PopGroupMarkerEXT) == 4, + Sizeof_PopGroupMarkerEXT_is_not_4); +COMPILE_ASSERT(offsetof(PopGroupMarkerEXT, header) == 0, + OffsetOf_PopGroupMarkerEXT_header_not_0); + struct SwapBuffers { typedef SwapBuffers ValueType; static const CommandId kCmdId = kSwapBuffers; diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h index 7c95789..9682fc2 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h @@ -3420,6 +3420,43 @@ TEST_F(GLES2FormatTest, EndQueryEXT) { next_cmd, sizeof(cmd)); } +TEST_F(GLES2FormatTest, InsertEventMarkerEXT) { + InsertEventMarkerEXT& cmd = *GetBufferAs<InsertEventMarkerEXT>(); + void* next_cmd = cmd.Set( + &cmd, + static_cast<GLuint>(11)); + EXPECT_EQ(static_cast<uint32>(InsertEventMarkerEXT::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id); + CheckBytesWrittenMatchesExpectedSize( + next_cmd, sizeof(cmd)); +} + +TEST_F(GLES2FormatTest, PushGroupMarkerEXT) { + PushGroupMarkerEXT& cmd = *GetBufferAs<PushGroupMarkerEXT>(); + void* next_cmd = cmd.Set( + &cmd, + static_cast<GLuint>(11)); + EXPECT_EQ(static_cast<uint32>(PushGroupMarkerEXT::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id); + CheckBytesWrittenMatchesExpectedSize( + next_cmd, sizeof(cmd)); +} + +TEST_F(GLES2FormatTest, PopGroupMarkerEXT) { + PopGroupMarkerEXT& cmd = *GetBufferAs<PopGroupMarkerEXT>(); + void* next_cmd = cmd.Set( + &cmd); + EXPECT_EQ(static_cast<uint32>(PopGroupMarkerEXT::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + CheckBytesWrittenMatchesExpectedSize( + next_cmd, sizeof(cmd)); +} + TEST_F(GLES2FormatTest, SwapBuffers) { SwapBuffers& cmd = *GetBufferAs<SwapBuffers>(); void* next_cmd = cmd.Set( diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h index decd48b..1bc9ac6 100644 --- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h @@ -202,34 +202,37 @@ OP(DeleteQueriesEXTImmediate) /* 445 */ \ OP(BeginQueryEXT) /* 446 */ \ OP(EndQueryEXT) /* 447 */ \ - OP(SwapBuffers) /* 448 */ \ - OP(GetMaxValueInBufferCHROMIUM) /* 449 */ \ - OP(GenSharedIdsCHROMIUM) /* 450 */ \ - OP(DeleteSharedIdsCHROMIUM) /* 451 */ \ - OP(RegisterSharedIdsCHROMIUM) /* 452 */ \ - OP(EnableFeatureCHROMIUM) /* 453 */ \ - OP(ResizeCHROMIUM) /* 454 */ \ - OP(GetRequestableExtensionsCHROMIUM) /* 455 */ \ - OP(RequestExtensionCHROMIUM) /* 456 */ \ - OP(GetMultipleIntegervCHROMIUM) /* 457 */ \ - OP(GetProgramInfoCHROMIUM) /* 458 */ \ - OP(CreateStreamTextureCHROMIUM) /* 459 */ \ - OP(DestroyStreamTextureCHROMIUM) /* 460 */ \ - OP(GetTranslatedShaderSourceANGLE) /* 461 */ \ - OP(PostSubBufferCHROMIUM) /* 462 */ \ - OP(TexImageIOSurface2DCHROMIUM) /* 463 */ \ - OP(CopyTextureCHROMIUM) /* 464 */ \ - OP(DrawArraysInstancedANGLE) /* 465 */ \ - OP(DrawElementsInstancedANGLE) /* 466 */ \ - OP(VertexAttribDivisorANGLE) /* 467 */ \ - OP(GenMailboxCHROMIUM) /* 468 */ \ - OP(ProduceTextureCHROMIUM) /* 469 */ \ - OP(ProduceTextureCHROMIUMImmediate) /* 470 */ \ - OP(ConsumeTextureCHROMIUM) /* 471 */ \ - OP(ConsumeTextureCHROMIUMImmediate) /* 472 */ \ - OP(BindUniformLocationCHROMIUM) /* 473 */ \ - OP(BindUniformLocationCHROMIUMImmediate) /* 474 */ \ - OP(BindUniformLocationCHROMIUMBucket) /* 475 */ \ + OP(InsertEventMarkerEXT) /* 448 */ \ + OP(PushGroupMarkerEXT) /* 449 */ \ + OP(PopGroupMarkerEXT) /* 450 */ \ + OP(SwapBuffers) /* 451 */ \ + OP(GetMaxValueInBufferCHROMIUM) /* 452 */ \ + OP(GenSharedIdsCHROMIUM) /* 453 */ \ + OP(DeleteSharedIdsCHROMIUM) /* 454 */ \ + OP(RegisterSharedIdsCHROMIUM) /* 455 */ \ + OP(EnableFeatureCHROMIUM) /* 456 */ \ + OP(ResizeCHROMIUM) /* 457 */ \ + OP(GetRequestableExtensionsCHROMIUM) /* 458 */ \ + OP(RequestExtensionCHROMIUM) /* 459 */ \ + OP(GetMultipleIntegervCHROMIUM) /* 460 */ \ + OP(GetProgramInfoCHROMIUM) /* 461 */ \ + OP(CreateStreamTextureCHROMIUM) /* 462 */ \ + OP(DestroyStreamTextureCHROMIUM) /* 463 */ \ + OP(GetTranslatedShaderSourceANGLE) /* 464 */ \ + OP(PostSubBufferCHROMIUM) /* 465 */ \ + OP(TexImageIOSurface2DCHROMIUM) /* 466 */ \ + OP(CopyTextureCHROMIUM) /* 467 */ \ + OP(DrawArraysInstancedANGLE) /* 468 */ \ + OP(DrawElementsInstancedANGLE) /* 469 */ \ + OP(VertexAttribDivisorANGLE) /* 470 */ \ + OP(GenMailboxCHROMIUM) /* 471 */ \ + OP(ProduceTextureCHROMIUM) /* 472 */ \ + OP(ProduceTextureCHROMIUMImmediate) /* 473 */ \ + OP(ConsumeTextureCHROMIUM) /* 474 */ \ + OP(ConsumeTextureCHROMIUMImmediate) /* 475 */ \ + OP(BindUniformLocationCHROMIUM) /* 476 */ \ + OP(BindUniformLocationCHROMIUMImmediate) /* 477 */ \ + OP(BindUniformLocationCHROMIUMBucket) /* 478 */ \ enum CommandId { kStartPoint = cmd::kLastCommonId, // All GLES2 commands start after this. diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index c7321de..c195084 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -227,6 +227,7 @@ void FeatureInfo::AddFeatures(const char* desired_features) { AddExtensionString("GL_CHROMIUM_set_visibility"); AddExtensionString("GL_CHROMIUM_strict_attribs"); AddExtensionString("GL_CHROMIUM_texture_mailbox"); + AddExtensionString("GL_EXT_debug_marker"); if (!disallowed_features_.gpu_memory_manager) AddExtensionString("GL_CHROMIUM_gpu_memory_manager"); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 21bc59f..fe8961e 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. diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index dc85cc2..5d1c28f 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h @@ -2644,6 +2644,42 @@ error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate( return error::kNoError; } +error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT( + uint32 immediate_data_size, const gles2::InsertEventMarkerEXT& c) { + GLuint bucket_id = static_cast<GLuint>(c.bucket_id); + Bucket* bucket = GetBucket(bucket_id); + if (!bucket || bucket->size() == 0) { + return error::kInvalidArguments; + } + std::string str; + if (!bucket->GetAsString(&str)) { + return error::kInvalidArguments; + } + DoInsertEventMarkerEXT(0, str.c_str()); + return error::kNoError; +} + +error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT( + uint32 immediate_data_size, const gles2::PushGroupMarkerEXT& c) { + GLuint bucket_id = static_cast<GLuint>(c.bucket_id); + Bucket* bucket = GetBucket(bucket_id); + if (!bucket || bucket->size() == 0) { + return error::kInvalidArguments; + } + std::string str; + if (!bucket->GetAsString(&str)) { + return error::kInvalidArguments; + } + DoPushGroupMarkerEXT(0, str.c_str()); + return error::kNoError; +} + +error::Error GLES2DecoderImpl::HandlePopGroupMarkerEXT( + uint32 immediate_data_size, const gles2::PopGroupMarkerEXT& c) { + DoPopGroupMarkerEXT(); + return error::kNoError; +} + error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM( uint32 immediate_data_size, const gles2::GetMaxValueInBufferCHROMIUM& c) { GLuint buffer_id = c.buffer_id; diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h index c315152..e8a03a0 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h @@ -1725,11 +1725,18 @@ TEST_F(GLES2DecoderTest2, ViewportInvalidArgs3_0) { // TODO(gman): EndQueryEXT -// TODO(gman): SwapBuffers -// TODO(gman): GetMaxValueInBufferCHROMIUM -// TODO(gman): GenSharedIdsCHROMIUM +// TODO(gman): InsertEventMarkerEXT + +// TODO(gman): PushGroupMarkerEXT -// TODO(gman): DeleteSharedIdsCHROMIUM +TEST_F(GLES2DecoderTest2, PopGroupMarkerEXTValidArgs) { + SpecializedSetup<PopGroupMarkerEXT, 0>(true); + PopGroupMarkerEXT cmd; + cmd.Init(); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} +// TODO(gman): SwapBuffers #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h index 12d8e6e..f701f8b 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h @@ -10,6 +10,11 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_ +// TODO(gman): GetMaxValueInBufferCHROMIUM +// TODO(gman): GenSharedIdsCHROMIUM + +// TODO(gman): DeleteSharedIdsCHROMIUM + // TODO(gman): RegisterSharedIdsCHROMIUM // TODO(gman): EnableFeatureCHROMIUM diff --git a/gpu/command_buffer_common.gypi b/gpu/command_buffer_common.gypi index d998321..33578af 100644 --- a/gpu/command_buffer_common.gypi +++ b/gpu/command_buffer_common.gypi @@ -19,6 +19,8 @@ 'command_buffer/common/command_buffer.h', 'command_buffer/common/compiler_specific.h', 'command_buffer/common/constants.h', + 'command_buffer/common/debug_marker_manager.cc', + 'command_buffer/common/debug_marker_manager.h', 'command_buffer/common/gles2_cmd_ids_autogen.h', 'command_buffer/common/gles2_cmd_ids.h', 'command_buffer/common/gles2_cmd_format_autogen.h', diff --git a/gpu/command_buffer_service.gypi b/gpu/command_buffer_service.gypi index 46ffcf0..7c70c5d 100644 --- a/gpu/command_buffer_service.gypi +++ b/gpu/command_buffer_service.gypi @@ -25,8 +25,6 @@ 'sources': [ 'command_buffer/service/buffer_manager.h', 'command_buffer/service/buffer_manager.cc', - 'command_buffer/service/framebuffer_manager.h', - 'command_buffer/service/framebuffer_manager.cc', 'command_buffer/service/cmd_buffer_engine.h', 'command_buffer/service/cmd_parser.cc', 'command_buffer/service/cmd_parser.h', @@ -38,6 +36,8 @@ 'command_buffer/service/context_group.cc', 'command_buffer/service/feature_info.h', 'command_buffer/service/feature_info.cc', + 'command_buffer/service/framebuffer_manager.h', + 'command_buffer/service/framebuffer_manager.cc', 'command_buffer/service/gles2_cmd_copy_texture_chromium.cc', 'command_buffer/service/gles2_cmd_copy_texture_chromium.h', 'command_buffer/service/gles2_cmd_decoder.h', diff --git a/gpu/gpu.gyp b/gpu/gpu.gyp index e1c303a..acb3b68 100644 --- a/gpu/gpu.gyp +++ b/gpu/gpu.gyp @@ -156,6 +156,7 @@ 'command_buffer/common/command_buffer_mock.cc', 'command_buffer/common/command_buffer_mock.h', 'command_buffer/common/command_buffer_shared_test.cc', + 'command_buffer/common/debug_marker_manager_unittest.cc', 'command_buffer/common/gles2_cmd_format_test.cc', 'command_buffer/common/gles2_cmd_format_test_autogen.h', 'command_buffer/common/gles2_cmd_utils_unittest.cc', diff --git a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp index 7994bdb..558e1a9 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp +++ b/ppapi/native_client/src/shared/ppapi_proxy/ppapi_proxy_untrusted.gyp @@ -24,6 +24,7 @@ ], 'sources': [ '<(DEPTH)/gpu/command_buffer/common/cmd_buffer_common.cc', + '<(DEPTH)/gpu/command_buffer/common/debug_marker_manager.cc', '<(DEPTH)/gpu/command_buffer/common/gles2_cmd_format.cc', '<(DEPTH)/gpu/command_buffer/common/gles2_cmd_utils.cc', '<(DEPTH)/gpu/command_buffer/common/logging.cc', |