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..6d2f84a68e26fa5642dbf8ab24f6552088532895 100644 |
--- a/gpu/command_buffer/service/query_manager.cc |
+++ b/gpu/command_buffer/service/query_manager.cc |
@@ -223,9 +223,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 +253,58 @@ void AsyncPixelTransfersCompletedQuery::Destroy(bool /* have_context */) { |
AsyncPixelTransfersCompletedQuery::~AsyncPixelTransfersCompletedQuery() { |
} |
+class AsyncReadPixelsCompletedQuery |
+ : public QueryManager::Query, |
+ public base::SupportsWeakPtr<AsyncReadPixelsCompletedQuery> { |
+ 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 +396,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; |