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 a269f35323d58a9b2cfc8bed147941d9378135b4..a228ae06bac3f944d70bb7e5df0b82af96ed9b44 100644 |
--- a/gpu/command_buffer/service/query_manager.cc |
+++ b/gpu/command_buffer/service/query_manager.cc |
@@ -12,10 +12,10 @@ |
#include "base/synchronization/lock.h" |
#include "base/time/time.h" |
#include "gpu/command_buffer/common/gles2_cmd_format.h" |
-#include "gpu/command_buffer/service/async_pixel_transfer_manager.h" |
#include "gpu/command_buffer/service/error_state.h" |
#include "gpu/command_buffer/service/feature_info.h" |
#include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
+#include "ui/gl/gl_bindings.h" |
#include "ui/gl/gl_context.h" |
#include "ui/gl/gl_fence.h" |
#include "ui/gl/gpu_timing.h" |
@@ -23,137 +23,6 @@ |
namespace gpu { |
namespace gles2 { |
-namespace { |
- |
-class AsyncPixelTransferCompletionObserverImpl |
- : public AsyncPixelTransferCompletionObserver { |
- public: |
- AsyncPixelTransferCompletionObserverImpl(base::subtle::Atomic32 submit_count) |
- : submit_count_(submit_count), cancelled_(false) {} |
- |
- void Cancel() { |
- base::AutoLock locked(lock_); |
- cancelled_ = true; |
- } |
- |
- void DidComplete(const AsyncMemoryParams& mem_params) override { |
- base::AutoLock locked(lock_); |
- if (!cancelled_) { |
- DCHECK(mem_params.buffer().get()); |
- void* data = mem_params.GetDataAddress(); |
- QuerySync* sync = static_cast<QuerySync*>(data); |
- base::subtle::Release_Store(&sync->process_count, submit_count_); |
- } |
- } |
- |
- private: |
- ~AsyncPixelTransferCompletionObserverImpl() override {} |
- |
- base::subtle::Atomic32 submit_count_; |
- |
- base::Lock lock_; |
- bool cancelled_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferCompletionObserverImpl); |
-}; |
- |
-class AsyncPixelTransfersCompletedQuery |
- : public QueryManager::Query, |
- public base::SupportsWeakPtr<AsyncPixelTransfersCompletedQuery> { |
- public: |
- AsyncPixelTransfersCompletedQuery( |
- QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); |
- |
- bool Begin() override; |
- bool End(base::subtle::Atomic32 submit_count) override; |
- bool QueryCounter(base::subtle::Atomic32 submit_count) override; |
- void Pause() override; |
- void Resume() override; |
- bool Process(bool did_finish) override; |
- void Destroy(bool have_context) override; |
- |
- protected: |
- ~AsyncPixelTransfersCompletedQuery() override; |
- |
- scoped_refptr<AsyncPixelTransferCompletionObserverImpl> observer_; |
-}; |
- |
-AsyncPixelTransfersCompletedQuery::AsyncPixelTransfersCompletedQuery( |
- QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset) |
- : Query(manager, target, shm_id, shm_offset) { |
-} |
- |
-bool AsyncPixelTransfersCompletedQuery::Begin() { |
- MarkAsActive(); |
- return true; |
-} |
- |
-void AsyncPixelTransfersCompletedQuery::Pause() { |
- MarkAsPaused(); |
-} |
- |
-void AsyncPixelTransfersCompletedQuery::Resume() { |
- MarkAsActive(); |
-} |
- |
-bool AsyncPixelTransfersCompletedQuery::End( |
- base::subtle::Atomic32 submit_count) { |
- // Get the real shared memory since it might need to be duped to prevent |
- // use-after-free of the memory. |
- scoped_refptr<Buffer> buffer = |
- manager()->decoder()->GetSharedMemoryBuffer(shm_id()); |
- if (!buffer.get()) |
- return false; |
- AsyncMemoryParams mem_params(buffer, shm_offset(), sizeof(QuerySync)); |
- if (!mem_params.GetDataAddress()) |
- return false; |
- |
- observer_ = new AsyncPixelTransferCompletionObserverImpl(submit_count); |
- |
- // Ask AsyncPixelTransferDelegate to run completion callback after all |
- // previous async transfers are done. No guarantee that callback is run |
- // on the current thread. |
- manager()->decoder()->GetAsyncPixelTransferManager()->AsyncNotifyCompletion( |
- mem_params, observer_.get()); |
- |
- return AddToPendingTransferQueue(submit_count); |
-} |
- |
-bool AsyncPixelTransfersCompletedQuery::QueryCounter( |
- base::subtle::Atomic32 submit_count) { |
- NOTREACHED(); |
- return false; |
-} |
- |
-bool AsyncPixelTransfersCompletedQuery::Process(bool did_finish) { |
- QuerySync* sync = manager()->decoder()->GetSharedMemoryAs<QuerySync*>( |
- shm_id(), shm_offset(), sizeof(*sync)); |
- if (!sync) |
- return false; |
- |
- // Check if completion callback has been run. sync->process_count atomicity |
- // is guaranteed as this is already used to notify client of a completed |
- // query. |
- if (base::subtle::Acquire_Load(&sync->process_count) != submit_count()) |
- return true; |
- |
- UnmarkAsPending(); |
- return true; |
-} |
- |
-void AsyncPixelTransfersCompletedQuery::Destroy(bool /* have_context */) { |
- if (!IsDeleted()) { |
- MarkAsDeleted(); |
- } |
-} |
- |
-AsyncPixelTransfersCompletedQuery::~AsyncPixelTransfersCompletedQuery() { |
- if (observer_.get()) |
- observer_->Cancel(); |
-} |
- |
-} // namespace |
- |
class AllSamplesPassedQuery : public QueryManager::Query { |
public: |
AllSamplesPassedQuery( |
@@ -820,11 +689,6 @@ QueryManager::Query* QueryManager::CreateQuery( |
case GL_LATENCY_QUERY_CHROMIUM: |
query = new CommandLatencyQuery(this, target, shm_id, shm_offset); |
break; |
- case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM: |
- // Currently async pixel transfer delegates only support uploads. |
- query = new AsyncPixelTransfersCompletedQuery( |
- this, target, shm_id, shm_offset); |
- break; |
case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM: |
query = new AsyncReadPixelsCompletedQuery( |
this, target, shm_id, shm_offset); |