Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index 25509d8d7ee346ae696b01c6302758a7ad86447d..12909356d94a48cf7137a5edbe338c0a3a836978 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -9349,8 +9349,9 @@ void GLES2DecoderImpl::DeleteQueriesEXTHelper( |
for (GLsizei ii = 0; ii < n; ++ii) { |
QueryManager::Query* query = query_manager_->GetQuery(client_ids[ii]); |
if (query && !query->IsDeleted()) { |
- ContextState::QueryMap::iterator it = |
- state_.current_queries.find(query->target()); |
+ bool internal = query->serial() != 0; |
+ ContextState::QueryMap::iterator it = state_.current_queries.find( |
+ std::make_pair(query->target(), internal)); |
if (it != state_.current_queries.end()) |
state_.current_queries.erase(it); |
@@ -9411,6 +9412,9 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT( |
GLuint client_id = static_cast<GLuint>(c.id); |
int32 sync_shm_id = static_cast<int32>(c.sync_data_shm_id); |
uint32 sync_shm_offset = static_cast<uint32>(c.sync_data_shm_offset); |
+ uint32 serial = static_cast<uint32>(c.serial); |
+ bool internal = serial != 0; |
+ ContextState::QueryKey key = std::make_pair(target, internal); |
switch (target) { |
case GL_COMMANDS_ISSUED_CHROMIUM: |
@@ -9429,7 +9433,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT( |
break; |
} |
- if (state_.current_queries.find(target) != state_.current_queries.end()) { |
+ if (state_.current_queries.find(key) != state_.current_queries.end()) { |
LOCAL_SET_GL_ERROR( |
GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress"); |
return error::kNoError; |
@@ -9462,6 +9466,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT( |
// } |
query = query_manager_->CreateQuery( |
target, client_id, sync_shm_id, sync_shm_offset); |
+ query->set_serial(serial); |
} |
if (query->target() != target) { |
@@ -9478,7 +9483,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT( |
return error::kOutOfBounds; |
} |
- state_.current_queries[target] = query; |
+ state_.current_queries[key] = query; |
return error::kNoError; |
} |
@@ -9486,7 +9491,10 @@ error::Error GLES2DecoderImpl::HandleEndQueryEXT( |
uint32 immediate_data_size, const cmds::EndQueryEXT& c) { |
GLenum target = static_cast<GLenum>(c.target); |
uint32 submit_count = static_cast<GLuint>(c.submit_count); |
- ContextState::QueryMap::iterator it = state_.current_queries.find(target); |
+ uint32 serial = static_cast<uint32>(c.serial); |
+ bool internal = serial != 0; |
+ ContextState::QueryKey key = std::make_pair(target, internal); |
+ ContextState::QueryMap::iterator it = state_.current_queries.find(key); |
if (it == state_.current_queries.end()) { |
LOCAL_SET_GL_ERROR( |