Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 116863003: gpu: Reuse transfer buffers more aggresively (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: [WIP] gpu: Reuse transfer buffers more aggresively Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(

Powered by Google App Engine
This is Rietveld 408576698