| 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;
|
|
|