| Index: gpu/command_buffer/client/query_tracker.cc
|
| diff --git a/gpu/command_buffer/client/query_tracker.cc b/gpu/command_buffer/client/query_tracker.cc
|
| index 285560590b34a403ba5e2abb763d8c9d340ffc8d..baf9e3d1ba6d1c3f18d50c9379f4ba3fe1cf1c08 100644
|
| --- a/gpu/command_buffer/client/query_tracker.cc
|
| +++ b/gpu/command_buffer/client/query_tracker.cc
|
| @@ -93,6 +93,7 @@ QueryTracker::Query::Query(GLuint id, GLenum target,
|
| submit_count_(0),
|
| token_(0),
|
| flushed_(false),
|
| + serial_(0),
|
| client_begin_time_us_(0),
|
| result_(0) {
|
| }
|
| @@ -109,13 +110,15 @@ void QueryTracker::Query::Begin(GLES2Implementation* gl) {
|
| case GL_LATENCY_QUERY_CHROMIUM:
|
| client_begin_time_us_ = MicrosecondsSinceOriginOfTime();
|
| // tell service about id, shared memory and count
|
| - gl->helper()->BeginQueryEXT(target(), id(), shm_id(), shm_offset());
|
| + gl->helper()->BeginQueryEXT(
|
| + target(), id(), serial(), shm_id(), shm_offset());
|
| break;
|
| case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM:
|
| case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
|
| default:
|
| // tell service about id, shared memory and count
|
| - gl->helper()->BeginQueryEXT(target(), id(), shm_id(), shm_offset());
|
| + gl->helper()->BeginQueryEXT(
|
| + target(), id(), serial(), shm_id(), shm_offset());
|
| break;
|
| }
|
| }
|
| @@ -127,7 +130,8 @@ void QueryTracker::Query::End(GLES2Implementation* gl) {
|
| if (error == GL_NO_ERROR) {
|
| // There was no error so start the query on the serivce.
|
| // it will end immediately.
|
| - gl->helper()->BeginQueryEXT(target(), id(), shm_id(), shm_offset());
|
| + gl->helper()->BeginQueryEXT(
|
| + target(), id(), serial(), shm_id(), shm_offset());
|
| } else {
|
| // There's an error on the client, no need to bother the service. just
|
| // set the query as completed and return the error.
|
| @@ -139,7 +143,7 @@ void QueryTracker::Query::End(GLES2Implementation* gl) {
|
| }
|
| }
|
| }
|
| - gl->helper()->EndQueryEXT(target(), submit_count());
|
| + gl->helper()->EndQueryEXT(target(), serial(), submit_count());
|
| MarkAsPending(gl->helper()->InsertToken());
|
| }
|
|
|
| @@ -191,7 +195,8 @@ uint32 QueryTracker::Query::GetResult() const {
|
| }
|
|
|
| QueryTracker::QueryTracker(MappedMemoryManager* manager)
|
| - : query_sync_manager_(manager) {
|
| + : query_sync_manager_(manager),
|
| + next_serial_(1) {
|
| }
|
|
|
| QueryTracker::~QueryTracker() {
|
| @@ -205,7 +210,8 @@ QueryTracker::~QueryTracker() {
|
| }
|
| }
|
|
|
| -QueryTracker::Query* QueryTracker::CreateQuery(GLuint id, GLenum target) {
|
| +QueryTracker::Query* QueryTracker::CreateQuery(
|
| + GLuint id, GLenum target) {
|
| DCHECK_NE(0u, id);
|
| FreeCompletedQueries();
|
| QuerySyncManager::QueryInfo info;
|
| @@ -219,6 +225,13 @@ QueryTracker::Query* QueryTracker::CreateQuery(GLuint id, GLenum target) {
|
| return query;
|
| }
|
|
|
| +QueryTracker::Query* QueryTracker::CreateInternalQuery(
|
| + GLuint id, GLenum target) {
|
| + Query* query = CreateQuery(id, target);
|
| + query->set_serial(NextSerial());
|
| + return query;
|
| +}
|
| +
|
| QueryTracker::Query* QueryTracker::GetQuery(
|
| GLuint client_id) {
|
| QueryMap::iterator it = queries_.find(client_id);
|
| @@ -260,5 +273,12 @@ void QueryTracker::FreeCompletedQueries() {
|
| }
|
| }
|
|
|
| +uint32 QueryTracker::NextSerial() {
|
| + uint32 serial = next_serial_++;
|
| + if (serial == 0)
|
| + return NextSerial();
|
| + return serial;
|
| +}
|
| +
|
| } // namespace gles2
|
| } // namespace gpu
|
|
|