diff options
author | amineer <amineer@chromium.org> | 2015-07-01 13:29:46 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-01 20:31:09 +0000 |
commit | 6c3e20e4fccf530aea0f519532cc6a3a067051c5 (patch) | |
tree | dc5569623282e4b2e7f83137ac01bd2d07b707c6 | |
parent | 324ef9d027121777efc9ec91a8654436581bf628 (diff) | |
download | chromium_src-6c3e20e4fccf530aea0f519532cc6a3a067051c5.zip chromium_src-6c3e20e4fccf530aea0f519532cc6a3a067051c5.tar.gz chromium_src-6c3e20e4fccf530aea0f519532cc6a3a067051c5.tar.bz2 |
Revert of Added support for Time Elapsed queries through the command buffer. (patchset #10 id:180001 of https://codereview.chromium.org/1188013004/)
Reason for revert:
May be causing crashes
BUG=506120
Original issue's description:
> Added support for Time Elapsed queries through the command buffer.
>
> This CL adds support for Time Elapsed queries through the command
> buffer.
>
> Since it was easy to support, I have also added support
> for getting the current TimeStamp through GetInteger64(),
> GetInteger()...etc. Note that this is different from getting the
> GPU timestamp using QueryCounter which is asynchronous.
>
> BUG=345227
> TEST=trybots
>
> Committed: https://crrev.com/1b6a2940fcb25df247b9f8b795e84e1ca5742904
> Cr-Commit-Position: refs/heads/master@{#336743}
TBR=zmo@chromium.org,sievers@chromium.org,bbudge@chromium.org,kbr@chromium.org,bajones@chromium.org,michaeln@chromium.org,dyen@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=345227
Review URL: https://codereview.chromium.org/1222563003
Cr-Commit-Position: refs/heads/master@{#337108}
25 files changed, 87 insertions, 284 deletions
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h index b12dc74..bf69131 100644 --- a/gpu/GLES2/gl2chromium_autogen.h +++ b/gpu/GLES2/gl2chromium_autogen.h @@ -251,7 +251,6 @@ #define glEndTransformFeedback GLES2_GET_FUN(EndTransformFeedback) #define glGetQueryivEXT GLES2_GET_FUN(GetQueryivEXT) #define glGetQueryObjectuivEXT GLES2_GET_FUN(GetQueryObjectuivEXT) -#define glGetQueryObjectui64vEXT GLES2_GET_FUN(GetQueryObjectui64vEXT) #define glInsertEventMarkerEXT GLES2_GET_FUN(InsertEventMarkerEXT) #define glPushGroupMarkerEXT GLES2_GET_FUN(PushGroupMarkerEXT) #define glPopGroupMarkerEXT GLES2_GET_FUN(PopGroupMarkerEXT) diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 382399b..d815046 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -3742,12 +3742,6 @@ _FUNCTION_INFO = { 'pepper_interface': 'Query', 'extension': "occlusion_query_EXT", }, - 'GetQueryObjectui64vEXT': { - 'gen_cmd': False, - 'client_test': False, - 'gl_test_func': 'glGetQueryObjectui64v', - 'extension': "disjoint_timer_query_EXT", - }, 'BindUniformLocationCHROMIUM': { 'type': 'GLchar', 'extension': True, diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index 4f96672a..87c04d2 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h @@ -1070,9 +1070,6 @@ void GLES2GetQueryivEXT(GLenum target, GLenum pname, GLint* params) { void GLES2GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) { gles2::GetGLContext()->GetQueryObjectuivEXT(id, pname, params); } -void GLES2GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) { - gles2::GetGLContext()->GetQueryObjectui64vEXT(id, pname, params); -} void GLES2InsertEventMarkerEXT(GLsizei length, const GLchar* marker) { gles2::GetGLContext()->InsertEventMarkerEXT(length, marker); } @@ -2361,10 +2358,6 @@ extern const NameToFunc g_gles2_function_table[] = { reinterpret_cast<GLES2FunctionPointer>(glGetQueryObjectuivEXT), }, { - "glGetQueryObjectui64vEXT", - reinterpret_cast<GLES2FunctionPointer>(glGetQueryObjectui64vEXT), - }, - { "glInsertEventMarkerEXT", reinterpret_cast<GLES2FunctionPointer>(glInsertEventMarkerEXT), }, diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index a8207d4..004029b 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc @@ -707,12 +707,6 @@ bool GLES2Implementation::GetHelper(GLenum pname, GLint* params) { return true; } break; - case GL_TIMESTAMP_EXT: - // We convert all GPU timestamps to CPU time. - *params = base::saturated_cast<GLint>( - (base::TraceTicks::Now() - base::TraceTicks()).InMicroseconds() - * base::Time::kNanosecondsPerMicrosecond); - return true; // Non-cached parameters. case GL_ALIASED_LINE_WIDTH_RANGE: @@ -1003,11 +997,6 @@ bool GLES2Implementation::GetInteger64vHelper(GLenum pname, GLint64* params) { case GL_MAX_UNIFORM_BLOCK_SIZE: *params = capabilities_.max_uniform_block_size; return true; - case GL_TIMESTAMP_EXT: - // We convert all GPU timestamps to CPU time. - *params = (base::TraceTicks::Now() - base::TraceTicks()).InMicroseconds() - * base::Time::kNanosecondsPerMicrosecond; - return true; default: break; } @@ -1069,62 +1058,6 @@ bool GLES2Implementation::GetSyncivHelper( return true; } -bool GLES2Implementation::GetQueryObjectValueHelper( - const char* function_name, GLuint id, GLenum pname, GLuint64* params) { - GPU_CLIENT_SINGLE_THREAD_CHECK(); - GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryObjectValueHelper(" - << id << ", " - << GLES2Util::GetStringQueryObjectParameter(pname) << ", " - << static_cast<const void*>(params) << ")"); - - QueryTracker::Query* query = query_tracker_->GetQuery(id); - if (!query) { - SetGLError(GL_INVALID_OPERATION, - function_name, "unknown query id"); - return false; - } - - if (query->Active()) { - SetGLError( - GL_INVALID_OPERATION, - function_name, - "query active. Did you to call glEndQueryEXT?"); - return false; - } - - if (query->NeverUsed()) { - SetGLError( - GL_INVALID_OPERATION, - function_name, "Never used. Did you call glBeginQueryEXT?"); - return false; - } - - bool valid_value = false; - switch (pname) { - case GL_QUERY_RESULT_EXT: - if (!query->CheckResultsAvailable(helper_)) { - helper_->WaitForToken(query->token()); - if (!query->CheckResultsAvailable(helper_)) { - FinishHelper(); - CHECK(query->CheckResultsAvailable(helper_)); - } - } - *params = query->GetResult(); - valid_value = true; - break; - case GL_QUERY_RESULT_AVAILABLE_EXT: - *params = query->CheckResultsAvailable(helper_); - valid_value = true; - break; - default: - SetGLErrorInvalidEnum(function_name, pname, "pname"); - break; - } - GPU_CLIENT_LOG(" " << *params); - CheckGLError(); - return valid_value; -} - GLuint GLES2Implementation::GetMaxValueInBufferCHROMIUMHelper( GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) { typedef cmds::GetMaxValueInBufferCHROMIUM::Result Result; @@ -4894,11 +4827,8 @@ void GLES2Implementation::GetQueryivEXT( << GLES2Util::GetStringQueryTarget(target) << ", " << GLES2Util::GetStringQueryParameter(pname) << ", " << static_cast<const void*>(params) << ")"); - if (pname == GL_QUERY_COUNTER_BITS_EXT) { - // We convert all queries to CPU time so we support 64 bits. - *params = 64; - return; - } else if (pname != GL_CURRENT_QUERY_EXT) { + + if (pname != GL_CURRENT_QUERY_EXT) { SetGLErrorInvalidEnum("glGetQueryivEXT", pname, "pname"); return; } @@ -4910,16 +4840,51 @@ void GLES2Implementation::GetQueryivEXT( void GLES2Implementation::GetQueryObjectuivEXT( GLuint id, GLenum pname, GLuint* params) { - GLuint64 result = 0; - if (GetQueryObjectValueHelper("glQueryObjectuivEXT", id, pname, &result)) - *params = base::saturated_cast<GLuint>(result); -} + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryivEXT(" << id << ", " + << GLES2Util::GetStringQueryObjectParameter(pname) << ", " + << static_cast<const void*>(params) << ")"); + + QueryTracker::Query* query = query_tracker_->GetQuery(id); + if (!query) { + SetGLError(GL_INVALID_OPERATION, "glQueryObjectuivEXT", "unknown query id"); + return; + } -void GLES2Implementation::GetQueryObjectui64vEXT( - GLuint id, GLenum pname, GLuint64* params) { - GLuint64 result = 0; - if (GetQueryObjectValueHelper("glQueryObjectui64vEXT", id, pname, &result)) - *params = result; + if (query->Active()) { + SetGLError( + GL_INVALID_OPERATION, + "glQueryObjectuivEXT", "query active. Did you to call glEndQueryEXT?"); + return; + } + + if (query->NeverUsed()) { + SetGLError( + GL_INVALID_OPERATION, + "glQueryObjectuivEXT", "Never used. Did you call glBeginQueryEXT?"); + return; + } + + switch (pname) { + case GL_QUERY_RESULT_EXT: + if (!query->CheckResultsAvailable(helper_)) { + helper_->WaitForToken(query->token()); + if (!query->CheckResultsAvailable(helper_)) { + FinishHelper(); + CHECK(query->CheckResultsAvailable(helper_)); + } + } + *params = query->GetResult(); + break; + case GL_QUERY_RESULT_AVAILABLE_EXT: + *params = query->CheckResultsAvailable(helper_); + break; + default: + SetGLErrorInvalidEnum("glQueryObjectuivEXT", pname, "pname"); + break; + } + GPU_CLIENT_LOG(" " << *params); + CheckGLError(); } void GLES2Implementation::DrawArraysInstancedANGLE( diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h index 2ff215c..47963f9 100644 --- a/gpu/command_buffer/client/gles2_implementation.h +++ b/gpu/command_buffer/client/gles2_implementation.h @@ -245,8 +245,6 @@ class GLES2_IMPL_EXPORT GLES2Implementation bool GetSyncivHelper( GLsync sync, GLenum pname, GLsizei bufsize, GLsizei* length, GLint* values); - bool GetQueryObjectValueHelper( - const char* function_name, GLuint id, GLenum pname, GLuint64* params); void FreeUnusedSharedMemory(); void FreeEverything(); diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index 5cb7a65..36617ee 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h @@ -803,8 +803,6 @@ void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override; void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override; -void GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) override; - void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override; void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override; diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc index 94715dd..bbd1c53 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc @@ -3179,26 +3179,6 @@ TEST_F(GLES2ImplementationTest, BeginEndQueryEXT) { ClearCommands(); gl_->GetQueryObjectuivEXT(id1, GL_QUERY_RESULT_AVAILABLE_EXT, &available); EXPECT_EQ(0u, available); - - // Test GetQueryObjectui64vEXT fails if unused id - GLuint64 available2 = 0xBDu; - ClearCommands(); - gl_->GetQueryObjectui64vEXT(id2, GL_QUERY_RESULT_AVAILABLE_EXT, &available2); - EXPECT_TRUE(NoCommandsWritten()); - EXPECT_EQ(0xBDu, available2); - EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); - - // Test GetQueryObjectui64vEXT fails if bad id - ClearCommands(); - gl_->GetQueryObjectui64vEXT(4567, GL_QUERY_RESULT_AVAILABLE_EXT, &available2); - EXPECT_TRUE(NoCommandsWritten()); - EXPECT_EQ(0xBDu, available2); - EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); - - // Test GetQueryObjectui64vEXT CheckResultsAvailable - ClearCommands(); - gl_->GetQueryObjectui64vEXT(id1, GL_QUERY_RESULT_AVAILABLE_EXT, &available2); - EXPECT_EQ(0u, available2); } TEST_F(GLES2ImplementationTest, ErrorQuery) { diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h index 5e61f11..ea392f3 100644 --- a/gpu/command_buffer/client/gles2_interface_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_autogen.h @@ -597,9 +597,6 @@ virtual void EndQueryEXT(GLenum target) = 0; virtual void EndTransformFeedback() = 0; virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) = 0; virtual void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) = 0; -virtual void GetQueryObjectui64vEXT(GLuint id, - GLenum pname, - GLuint64* params) = 0; virtual void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) = 0; virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) = 0; virtual void PopGroupMarkerEXT() = 0; diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h index 1f70750..80d2e6e 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h @@ -580,7 +580,6 @@ void EndQueryEXT(GLenum target) override; void EndTransformFeedback() override; void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override; void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override; -void GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) override; void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override; void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override; void PopGroupMarkerEXT() override; diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h index cf1baa2..e23ce05 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h @@ -994,10 +994,6 @@ void GLES2InterfaceStub::GetQueryObjectuivEXT(GLuint /* id */, GLenum /* pname */, GLuint* /* params */) { } -void GLES2InterfaceStub::GetQueryObjectui64vEXT(GLuint /* id */, - GLenum /* pname */, - GLuint64* /* params */) { -} void GLES2InterfaceStub::InsertEventMarkerEXT(GLsizei /* length */, const GLchar* /* marker */) { } diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h index 30743ea..406d2d8 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h @@ -580,7 +580,6 @@ void EndQueryEXT(GLenum target) override; void EndTransformFeedback() override; void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override; void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override; -void GetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) override; void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override; void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override; void PopGroupMarkerEXT() override; diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h index 13c215f..c9d2d18 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h @@ -1681,13 +1681,6 @@ void GLES2TraceImplementation::GetQueryObjectuivEXT(GLuint id, gl_->GetQueryObjectuivEXT(id, pname, params); } -void GLES2TraceImplementation::GetQueryObjectui64vEXT(GLuint id, - GLenum pname, - GLuint64* params) { - TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetQueryObjectui64vEXT"); - gl_->GetQueryObjectui64vEXT(id, pname, params); -} - void GLES2TraceImplementation::InsertEventMarkerEXT(GLsizei length, const GLchar* marker) { TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::InsertEventMarkerEXT"); diff --git a/gpu/command_buffer/client/query_tracker.cc b/gpu/command_buffer/client/query_tracker.cc index 37a1478..2f379aa 100644 --- a/gpu/command_buffer/client/query_tracker.cc +++ b/gpu/command_buffer/client/query_tracker.cc @@ -174,17 +174,18 @@ bool QueryTracker::Query::CheckResultsAvailable( helper->IsContextLost()) { switch (target()) { case GL_COMMANDS_ISSUED_CHROMIUM: - result_ = info_.sync->result; + result_ = base::saturated_cast<uint32>(info_.sync->result); break; case GL_LATENCY_QUERY_CHROMIUM: // Disabled DCHECK because of http://crbug.com/419236. //DCHECK(info_.sync->result >= client_begin_time_us_); - result_ = info_.sync->result - client_begin_time_us_; + result_ = base::saturated_cast<uint32>( + info_.sync->result - client_begin_time_us_); break; case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM: case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM: default: - result_ = info_.sync->result; + result_ = static_cast<uint32>(info_.sync->result); break; } state_ = kComplete; @@ -200,7 +201,7 @@ bool QueryTracker::Query::CheckResultsAvailable( return state_ == kComplete; } -uint64 QueryTracker::Query::GetResult() const { +uint32 QueryTracker::Query::GetResult() const { DCHECK(state_ == kComplete || state_ == kUninitialized); return result_; } diff --git a/gpu/command_buffer/client/query_tracker.h b/gpu/command_buffer/client/query_tracker.h index abd2f5d..b66556b 100644 --- a/gpu/command_buffer/client/query_tracker.h +++ b/gpu/command_buffer/client/query_tracker.h @@ -135,7 +135,7 @@ class GLES2_IMPL_EXPORT QueryTracker { bool CheckResultsAvailable(CommandBufferHelper* helper); - uint64 GetResult() const; + uint32 GetResult() const; private: friend class QueryTracker; @@ -152,7 +152,7 @@ class GLES2_IMPL_EXPORT QueryTracker { int32 token_; uint32 flush_count_; uint64 client_begin_time_us_; // Only used for latency query target. - uint64 result_; + uint32 result_; }; QueryTracker(MappedMemoryManager* manager); diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt index bcd4204..590a4b3f 100644 --- a/gpu/command_buffer/cmd_buffer_functions.txt +++ b/gpu/command_buffer/cmd_buffer_functions.txt @@ -238,7 +238,6 @@ GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenumQueryTarget target); GL_APICALL void GL_APIENTRY glEndTransformFeedback (void); 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 glGetQueryObjectui64vEXT (GLidQuery id, GLenumQueryObjectParameter pname, GLuint64* 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); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 402c902..1c8f2cf 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -11563,9 +11563,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size, return error::kNoError; } break; - case GL_SAMPLES_PASSED: - case GL_ANY_SAMPLES_PASSED: - case GL_ANY_SAMPLES_PASSED_CONSERVATIVE: + default: if (!features().occlusion_query_boolean) { LOCAL_SET_GL_ERROR( GL_INVALID_OPERATION, "glBeginQueryEXT", @@ -11573,19 +11571,6 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size, return error::kNoError; } break; - case GL_TIME_ELAPSED: - if (!query_manager_->GPUTimingAvailable()) { - LOCAL_SET_GL_ERROR( - GL_INVALID_OPERATION, "glBeginQueryEXT", - "not enabled for timing queries"); - return error::kNoError; - } - break; - default: - LOCAL_SET_GL_ERROR( - GL_INVALID_OPERATION, "glBeginQueryEXT", - "unknown query target"); - return error::kNoError; } if (state_.current_queries.find(target) != state_.current_queries.end()) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc index 833a447..0201cf3 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc @@ -573,7 +573,6 @@ const QueryType kQueryTypes[] = { {GL_GET_ERROR_QUERY_CHROMIUM, false}, {GL_COMMANDS_COMPLETED_CHROMIUM, false}, {GL_ANY_SAMPLES_PASSED_EXT, true}, - {GL_TIME_ELAPSED, true}, }; static void CheckBeginEndQueryBadMemoryFails(GLES2DecoderTestBase* test, @@ -585,9 +584,7 @@ static void CheckBeginEndQueryBadMemoryFails(GLES2DecoderTestBase* test, // We need to reset the decoder on each iteration, because we lose the // context every time. GLES2DecoderTestBase::InitState init; - init.extensions = "GL_EXT_occlusion_query_boolean" - " GL_ARB_sync" - " GL_ARB_timer_query"; + init.extensions = "GL_EXT_occlusion_query_boolean GL_ARB_sync"; init.gl_version = "opengl es 2.0"; init.has_alpha = true; init.request_alpha = true; @@ -644,16 +641,9 @@ static void CheckBeginEndQueryBadMemoryFails(GLES2DecoderTestBase* test, *gl, GetQueryObjectuiv(service_id, GL_QUERY_RESULT_AVAILABLE_EXT, _)) .WillOnce(SetArgPointee<2>(1)) .RetiresOnSaturation(); - if (query_type.type == GL_TIME_ELAPSED) { - EXPECT_CALL(*gl, GetQueryObjectui64v(service_id, GL_QUERY_RESULT_EXT, _)) - .WillOnce(SetArgPointee<2>(1)) - .RetiresOnSaturation(); - } else { - EXPECT_CALL(*gl, GetQueryObjectuiv(service_id, GL_QUERY_RESULT_EXT, _)) - .WillOnce(SetArgPointee<2>(1)) - .RetiresOnSaturation(); - } - EXPECT_CALL(*gl, DeleteQueries(1, _)).Times(1).RetiresOnSaturation(); + EXPECT_CALL(*gl, GetQueryObjectuiv(service_id, GL_QUERY_RESULT_EXT, _)) + .WillOnce(SetArgPointee<2>(1)) + .RetiresOnSaturation(); } if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM) { #if DCHECK_IS_ON() @@ -664,12 +654,6 @@ static void CheckBeginEndQueryBadMemoryFails(GLES2DecoderTestBase* test, EXPECT_CALL(*gl, ClientWaitSync(kGlSync, _, _)) .WillOnce(Return(GL_ALREADY_SIGNALED)) .RetiresOnSaturation(); -#if DCHECK_IS_ON() - EXPECT_CALL(*gl, IsSync(kGlSync)) - .WillOnce(Return(GL_TRUE)) - .RetiresOnSaturation(); -#endif - EXPECT_CALL(*gl, DeleteSync(kGlSync)).Times(1).RetiresOnSaturation(); } QueryManager* query_manager = test->GetDecoder()->GetQueryManager(); @@ -678,6 +662,18 @@ static void CheckBeginEndQueryBadMemoryFails(GLES2DecoderTestBase* test, EXPECT_TRUE(error1 != error::kNoError || error2 != error::kNoError || !process_success); + + if (query_type.is_gl) { + EXPECT_CALL(*gl, DeleteQueries(1, _)).Times(1).RetiresOnSaturation(); + } + if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM) { +#if DCHECK_IS_ON() + EXPECT_CALL(*gl, IsSync(kGlSync)) + .WillOnce(Return(GL_TRUE)) + .RetiresOnSaturation(); +#endif + EXPECT_CALL(*gl, DeleteSync(kGlSync)).Times(1).RetiresOnSaturation(); + } test->ResetDecoder(); } diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc index 3de501a..c74a650 100644 --- a/gpu/command_buffer/service/query_manager.cc +++ b/gpu/command_buffer/service/query_manager.cc @@ -16,9 +16,7 @@ #include "gpu/command_buffer/service/error_state.h" #include "gpu/command_buffer/service/feature_info.h" #include "gpu/command_buffer/service/gles2_cmd_decoder.h" -#include "ui/gl/gl_context.h" #include "ui/gl/gl_fence.h" -#include "ui/gl/gpu_timing.h" namespace gpu { namespace gles2 { @@ -450,61 +448,6 @@ void CommandsCompletedQuery::Destroy(bool have_context) { CommandsCompletedQuery::~CommandsCompletedQuery() {} -class TimeElapsedQuery : public QueryManager::Query { - public: - TimeElapsedQuery(QueryManager* manager, - GLenum target, - int32 shm_id, - uint32 shm_offset); - - // Overridden from QueryManager::Query: - bool Begin() override; - bool End(base::subtle::Atomic32 submit_count) override; - bool Process(bool did_finish) override; - void Destroy(bool have_context) override; - - protected: - ~TimeElapsedQuery() override; - - private: - scoped_ptr<gfx::GPUTimer> gpu_timer_; -}; - -TimeElapsedQuery::TimeElapsedQuery(QueryManager* manager, - GLenum target, - int32 shm_id, - uint32 shm_offset) - : Query(manager, target, shm_id, shm_offset), - gpu_timer_(manager->CreateGPUTimer(true)) {} - -bool TimeElapsedQuery::Begin() { - gpu_timer_->Start(); - return true; -} - -bool TimeElapsedQuery::End(base::subtle::Atomic32 submit_count) { - gpu_timer_->End(); - return AddToPendingQueue(submit_count); -} - -bool TimeElapsedQuery::Process(bool did_finish) { - if (!gpu_timer_->IsAvailable()) - return true; - - const uint64_t nano_seconds = - gpu_timer_->GetDeltaElapsed() * base::Time::kNanosecondsPerMicrosecond; - return MarkAsCompleted(nano_seconds); -} - -void TimeElapsedQuery::Destroy(bool have_context) { - if (gpu_timer_.get()) { - gpu_timer_->Destroy(have_context); - gpu_timer_.reset(); - } -} - -TimeElapsedQuery::~TimeElapsedQuery() {} - QueryManager::QueryManager( GLES2Decoder* decoder, FeatureInfo* feature_info) @@ -518,13 +461,6 @@ QueryManager::QueryManager( query_count_(0) { DCHECK(!(use_arb_occlusion_query_for_occlusion_query_boolean_ && use_arb_occlusion_query2_for_occlusion_query_boolean_)); - DCHECK(decoder); - gfx::GLContext* context = decoder_->GetGLContext(); - if (context) { - gpu_timing_client_ = context->CreateGPUTimingClient(); - } else { - gpu_timing_client_ = new gfx::GPUTimingClient(); - } } QueryManager::~QueryManager() { @@ -570,9 +506,6 @@ QueryManager::Query* QueryManager::CreateQuery( case GL_COMMANDS_COMPLETED_CHROMIUM: query = new CommandsCompletedQuery(this, target, shm_id, shm_offset); break; - case GL_TIME_ELAPSED: - query = new TimeElapsedQuery(this, target, shm_id, shm_offset); - break; default: { GLuint service_id = 0; glGenQueries(1, &service_id); @@ -588,14 +521,6 @@ QueryManager::Query* QueryManager::CreateQuery( return query.get(); } -scoped_ptr<gfx::GPUTimer> QueryManager::CreateGPUTimer(bool elapsed_time) { - return gpu_timing_client_->CreateGPUTimer(elapsed_time); -} - -bool QueryManager::GPUTimingAvailable() { - return gpu_timing_client_->IsAvailable(); -} - void QueryManager::GenQueries(GLsizei n, const GLuint* queries) { DCHECK_GE(n, 0); for (GLsizei i = 0; i < n; ++i) { diff --git a/gpu/command_buffer/service/query_manager.h b/gpu/command_buffer/service/query_manager.h index e453d03..5f14929 100644 --- a/gpu/command_buffer/service/query_manager.h +++ b/gpu/command_buffer/service/query_manager.h @@ -16,11 +16,6 @@ #include "gpu/command_buffer/service/feature_info.h" #include "gpu/gpu_export.h" -namespace gfx { - class GPUTimer; - class GPUTimingClient; -} - namespace gpu { class GLES2Decoder; @@ -193,9 +188,6 @@ class GPU_EXPORT QueryManager { return decoder_; } - scoped_ptr<gfx::GPUTimer> CreateGPUTimer(bool elapsed_time); - bool GPUTimingAvailable(); - void GenQueries(GLsizei n, const GLuint* queries); bool IsValidQuery(GLuint id); @@ -249,9 +241,6 @@ class GPU_EXPORT QueryManager { // Async pixel transfer queries waiting for completion. QueryQueue pending_transfer_queries_; - // Used for timer queries. - scoped_refptr<gfx::GPUTimingClient> gpu_timing_client_; - DISALLOW_COPY_AND_ASSIGN(QueryManager); }; diff --git a/mojo/gpu/mojo_gles2_impl_autogen.cc b/mojo/gpu/mojo_gles2_impl_autogen.cc index 8b068c7..2b54de9 100644 --- a/mojo/gpu/mojo_gles2_impl_autogen.cc +++ b/mojo/gpu/mojo_gles2_impl_autogen.cc @@ -1283,11 +1283,6 @@ void MojoGLES2Impl::GetQueryObjectuivEXT(GLuint id, MojoGLES2MakeCurrent(context_); glGetQueryObjectuivEXT(id, pname, params); } -void MojoGLES2Impl::GetQueryObjectui64vEXT(GLuint id, - GLenum pname, - GLuint64* params) { - NOTREACHED() << "Unimplemented GetQueryObjectui64vEXT."; -} void MojoGLES2Impl::InsertEventMarkerEXT(GLsizei length, const GLchar* marker) { NOTREACHED() << "Unimplemented InsertEventMarkerEXT."; } diff --git a/mojo/gpu/mojo_gles2_impl_autogen.h b/mojo/gpu/mojo_gles2_impl_autogen.h index 32d9e2a..92eb9c0 100644 --- a/mojo/gpu/mojo_gles2_impl_autogen.h +++ b/mojo/gpu/mojo_gles2_impl_autogen.h @@ -602,9 +602,6 @@ class MojoGLES2Impl : public gpu::gles2::GLES2Interface { void EndTransformFeedback() override; void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) override; void GetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) override; - void GetQueryObjectui64vEXT(GLuint id, - GLenum pname, - GLuint64* params) override; void InsertEventMarkerEXT(GLsizei length, const GLchar* marker) override; void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) override; void PopGroupMarkerEXT() override; diff --git a/ui/gl/gpu_timing.cc b/ui/gl/gpu_timing.cc index c902254..65110b6 100644 --- a/ui/gl/gpu_timing.cc +++ b/ui/gl/gpu_timing.cc @@ -203,13 +203,15 @@ class TimeElapsedTimerQuery : public TimerQuery { return false; } - GLuint done = 0; - glGetQueryObjectuiv(gl_query_id_, GL_QUERY_RESULT_AVAILABLE, &done); + GLint done = 0; + glGetQueryObjectiv(gl_query_id_, GL_QUERY_RESULT_AVAILABLE, &done); return !!done; } // Fills out query result start and end, called after IsAvailable() is true. void UpdateQueryResults(GPUTimingImpl* gpu_timing) override { + DCHECK(IsAvailable(gpu_timing)); + GLuint64 result_value = 0; glGetQueryObjectui64v(gl_query_id_, GL_QUERY_RESULT, &result_value); const int64_t micro_results = NanoToMicro(result_value); @@ -275,8 +277,8 @@ class TimeStampTimerQuery : public TimerQuery { // Returns true when UpdateQueryResults() is ready to be called. bool IsAvailable(GPUTimingImpl* gpu_timing) override { - GLuint done = 0; - glGetQueryObjectuiv(gl_query_id_, GL_QUERY_RESULT_AVAILABLE, &done); + GLint done = 0; + glGetQueryObjectiv(gl_query_id_, GL_QUERY_RESULT_AVAILABLE, &done); return !!done; } diff --git a/ui/gl/gpu_timing.h b/ui/gl/gpu_timing.h index 08f9c03..d8e3dc2 100644 --- a/ui/gl/gpu_timing.h +++ b/ui/gl/gpu_timing.h @@ -86,6 +86,9 @@ class GL_EXPORT GPUTimer { // this object. void Destroy(bool have_context); + // Start an instant timer, start and end will be equal. + void Instant(); + // Start a timer range. void Start(); void End(); diff --git a/ui/gl/gpu_timing_fake.cc b/ui/gl/gpu_timing_fake.cc index e7c1df9..6a1e540 100644 --- a/ui/gl/gpu_timing_fake.cc +++ b/ui/gl/gpu_timing_fake.cc @@ -77,10 +77,10 @@ void GPUTimingFake::ExpectGPUTimerQuery( EXPECT_CALL(gl, EndQuery(GL_TIME_ELAPSED)) .WillRepeatedly(Invoke(this, &GPUTimingFake::FakeGLEndQuery)); - EXPECT_CALL(gl, GetQueryObjectuiv(_, GL_QUERY_RESULT_AVAILABLE, - NotNull())) + EXPECT_CALL(gl, GetQueryObjectiv(_, GL_QUERY_RESULT_AVAILABLE, + NotNull())) .WillRepeatedly( - Invoke(this, &GPUTimingFake::FakeGLGetQueryObjectuiv)); + Invoke(this, &GPUTimingFake::FakeGLGetQueryObjectiv)); EXPECT_CALL(gl, GetQueryObjectui64v(_, GL_QUERY_RESULT, NotNull())) .WillRepeatedly( @@ -149,8 +149,8 @@ void GPUTimingFake::FakeGLEndQuery(GLenum target) { } } -void GPUTimingFake::FakeGLGetQueryObjectuiv(GLuint id, GLenum pname, - GLuint* params) { +void GPUTimingFake::FakeGLGetQueryObjectiv(GLuint id, GLenum pname, + GLint* params) { switch (pname) { case GL_QUERY_RESULT_AVAILABLE: { std::map<GLuint, QueryResult>::iterator it = query_results_.find(id); @@ -160,7 +160,7 @@ void GPUTimingFake::FakeGLGetQueryObjectuiv(GLuint id, GLenum pname, *params = 0; } break; default: - FAIL() << "Invalid variable passed to GetQueryObjectuiv: " << pname; + FAIL() << "Invalid variable passed to GetQueryObjectiv: " << pname; } } @@ -189,7 +189,7 @@ void GPUTimingFake::FakeGLGetInteger64v(GLenum pname, GLint64 * data) { } void GPUTimingFake::FakeGLGetQueryObjectui64v(GLuint id, GLenum pname, - GLuint64* params) { + GLuint64* params) { switch (pname) { case GL_QUERY_RESULT: { std::map<GLuint, QueryResult>::iterator it = query_results_.find(id); diff --git a/ui/gl/gpu_timing_fake.h b/ui/gl/gpu_timing_fake.h index 40c93f4..625a394 100644 --- a/ui/gl/gpu_timing_fake.h +++ b/ui/gl/gpu_timing_fake.h @@ -41,7 +41,7 @@ class GPUTimingFake { void FakeGLDeleteQueries(GLsizei n, const GLuint* ids); void FakeGLBeginQuery(GLenum target, GLuint id); void FakeGLEndQuery(GLenum target); - void FakeGLGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params); + void FakeGLGetQueryObjectiv(GLuint id, GLenum pname, GLint* params); void FakeGLQueryCounter(GLuint id, GLenum target); void FakeGLGetInteger64v(GLenum pname, GLint64 * data); void FakeGLGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params); |