Chromium Code Reviews| Index: gpu/command_buffer/service/query_manager.cc |
| diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc |
| index e66478ae3c06b480dcc6203797ab54e27c2b3a85..e6468d5ba9aa576f52277f44edfec8b76f4e8979 100644 |
| --- a/gpu/command_buffer/service/query_manager.cc |
| +++ b/gpu/command_buffer/service/query_manager.cc |
| @@ -179,9 +179,6 @@ class AsyncPixelTransfersCompletedQuery |
| virtual bool Process() OVERRIDE; |
| virtual void Destroy(bool have_context) OVERRIDE; |
| - protected: |
| - virtual ~AsyncPixelTransfersCompletedQuery(); |
| - |
| static void MarkAsCompletedThreadSafe( |
| uint32 submit_count, const AsyncMemoryParams& mem_params) { |
| DCHECK(mem_params.shared_memory); |
| @@ -195,6 +192,10 @@ class AsyncPixelTransfersCompletedQuery |
| base::subtle::MemoryBarrier(); |
| sync->process_count = submit_count; |
| } |
| + |
| + protected: |
| + virtual ~AsyncPixelTransfersCompletedQuery(); |
|
piman
2013/07/01 22:24:08
nit: it looks like you didn't end up needing chang
hubbe
2013/07/01 22:34:41
Done.
|
| + |
| }; |
| AsyncPixelTransfersCompletedQuery::AsyncPixelTransfersCompletedQuery( |
| @@ -223,9 +224,8 @@ bool AsyncPixelTransfersCompletedQuery::End(uint32 submit_count) { |
| // on the current thread. |
| manager()->decoder()->GetAsyncPixelTransferManager()->AsyncNotifyCompletion( |
| mem_params, |
| - base::Bind(AsyncPixelTransfersCompletedQuery::MarkAsCompletedThreadSafe, |
| + base::Bind(&AsyncPixelTransfersCompletedQuery::MarkAsCompletedThreadSafe, |
| submit_count)); |
| - |
| return AddToPendingTransferQueue(submit_count); |
| } |
| @@ -254,6 +254,59 @@ void AsyncPixelTransfersCompletedQuery::Destroy(bool /* have_context */) { |
| AsyncPixelTransfersCompletedQuery::~AsyncPixelTransfersCompletedQuery() { |
| } |
| +/////////////////// |
| +class AsyncReadPixelsCompletedQuery |
| + : public QueryManager::Query |
| + , public base::SupportsWeakPtr<AsyncReadPixelsCompletedQuery> { |
|
piman
2013/07/01 22:24:08
nit: , on previous line.
hubbe
2013/07/01 22:34:41
Done.
|
| + public: |
| + AsyncReadPixelsCompletedQuery( |
| + QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); |
| + |
| + virtual bool Begin() OVERRIDE; |
| + virtual bool End(uint32 submit_count) OVERRIDE; |
| + virtual bool Process() OVERRIDE; |
| + virtual void Destroy(bool have_context) OVERRIDE; |
| + |
| + protected: |
| + void Complete(); |
| + virtual ~AsyncReadPixelsCompletedQuery(); |
| +}; |
| + |
| +AsyncReadPixelsCompletedQuery::AsyncReadPixelsCompletedQuery( |
| + QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) |
| + : Query(manager, target, shm_id, shm_offset) { |
| +} |
| + |
| +bool AsyncReadPixelsCompletedQuery::Begin() { |
| + return true; |
| +} |
| + |
| +bool AsyncReadPixelsCompletedQuery::End(uint32 submit_count) { |
| + manager()->decoder()->WaitForReadPixels( |
| + base::Bind(&AsyncReadPixelsCompletedQuery::Complete, |
| + AsWeakPtr())); |
| + |
| + return AddToPendingTransferQueue(submit_count); |
| +} |
| + |
| +void AsyncReadPixelsCompletedQuery::Complete() { |
| + MarkAsCompleted(1); |
| +} |
| + |
| +bool AsyncReadPixelsCompletedQuery::Process() { |
| + return !pending(); |
| +} |
| + |
| +void AsyncReadPixelsCompletedQuery::Destroy(bool /* have_context */) { |
| + if (!IsDeleted()) { |
| + MarkAsDeleted(); |
| + } |
| +} |
| + |
| +AsyncReadPixelsCompletedQuery::~AsyncReadPixelsCompletedQuery() { |
| +} |
| + |
| + |
| class GetErrorQuery : public QueryManager::Query { |
| public: |
| GetErrorQuery( |
| @@ -345,6 +398,10 @@ QueryManager::Query* QueryManager::CreateQuery( |
| query = new AsyncPixelTransfersCompletedQuery( |
| this, target, shm_id, shm_offset); |
| break; |
| + case GL_ASYNC_READ_PIXELS_COMPLETED_CHROMIUM: |
| + query = new AsyncReadPixelsCompletedQuery( |
| + this, target, shm_id, shm_offset); |
| + break; |
| case GL_GET_ERROR_QUERY_CHROMIUM: |
| query = new GetErrorQuery(this, target, shm_id, shm_offset); |
| break; |