summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoramineer <amineer@chromium.org>2015-07-01 13:29:46 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-01 20:31:09 +0000
commit6c3e20e4fccf530aea0f519532cc6a3a067051c5 (patch)
treedc5569623282e4b2e7f83137ac01bd2d07b707c6
parent324ef9d027121777efc9ec91a8654436581bf628 (diff)
downloadchromium_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}
-rw-r--r--gpu/GLES2/gl2chromium_autogen.h1
-rwxr-xr-xgpu/command_buffer/build_gles2_cmd_buffer.py6
-rw-r--r--gpu/command_buffer/client/gles2_c_lib_autogen.h7
-rw-r--r--gpu/command_buffer/client/gles2_implementation.cc127
-rw-r--r--gpu/command_buffer/client/gles2_implementation.h2
-rw-r--r--gpu/command_buffer/client/gles2_implementation_autogen.h2
-rw-r--r--gpu/command_buffer/client/gles2_implementation_unittest.cc20
-rw-r--r--gpu/command_buffer/client/gles2_interface_autogen.h3
-rw-r--r--gpu/command_buffer/client/gles2_interface_stub_autogen.h1
-rw-r--r--gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h4
-rw-r--r--gpu/command_buffer/client/gles2_trace_implementation_autogen.h1
-rw-r--r--gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h7
-rw-r--r--gpu/command_buffer/client/query_tracker.cc9
-rw-r--r--gpu/command_buffer/client/query_tracker.h4
-rw-r--r--gpu/command_buffer/cmd_buffer_functions.txt1
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc17
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc36
-rw-r--r--gpu/command_buffer/service/query_manager.cc75
-rw-r--r--gpu/command_buffer/service/query_manager.h11
-rw-r--r--mojo/gpu/mojo_gles2_impl_autogen.cc5
-rw-r--r--mojo/gpu/mojo_gles2_impl_autogen.h3
-rw-r--r--ui/gl/gpu_timing.cc10
-rw-r--r--ui/gl/gpu_timing.h3
-rw-r--r--ui/gl/gpu_timing_fake.cc14
-rw-r--r--ui/gl/gpu_timing_fake.h2
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);