diff options
author | backer@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-13 06:46:48 +0000 |
---|---|---|
committer | backer@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-13 06:46:48 +0000 |
commit | 9dcdbbef52460de45070d815eb1ad735d120ae07 (patch) | |
tree | 526c2e9310515f4430ee513bbb6ae8f477969eba /gpu | |
parent | e9f195ef08c50293b7388b8ed05c12174d2dc139 (diff) | |
download | chromium_src-9dcdbbef52460de45070d815eb1ad735d120ae07.zip chromium_src-9dcdbbef52460de45070d815eb1ad735d120ae07.tar.gz chromium_src-9dcdbbef52460de45070d815eb1ad735d120ae07.tar.bz2 |
GPU: Eliminate unnecessary State on async idle upload path.
With the recent refactoring, this State is no longer necessary and
unnecessarily complicates the code. There should be no change in
behaviour.
BUG=240504
Review URL: https://chromiumcodereview.appspot.com/16174012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206012 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r-- | gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc | 126 |
1 files changed, 43 insertions, 83 deletions
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc index acf33ef..aa6cd67 100644 --- a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc +++ b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc @@ -34,51 +34,13 @@ void PerformNotifyCompletion( callback.Run(safe_mem_params); } -// TODO(backer): Merge this with Delegate in follow-up CL. It serves no purpose. -class AsyncPixelTransferState - : public base::SupportsWeakPtr<AsyncPixelTransferState> { - public: - typedef base::Callback<void(GLuint)> TransferCallback; - - explicit AsyncPixelTransferState(GLuint texture_id) - : id_(g_next_pixel_transfer_state_id++), - texture_id_(texture_id), - transfer_in_progress_(false) { - } - - virtual ~AsyncPixelTransferState() {} - - bool TransferIsInProgress() { - return transfer_in_progress_; - } - - uint64 id() const { return id_; } - - void set_transfer_in_progress(bool transfer_in_progress) { - transfer_in_progress_ = transfer_in_progress; - } - - void PerformTransfer(const TransferCallback& callback) { - DCHECK(texture_id_); - DCHECK(transfer_in_progress_); - callback.Run(texture_id_); - transfer_in_progress_ = false; - } - - private: - uint64 id_; - GLuint texture_id_; - bool transfer_in_progress_; - - DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferState); -}; - } // namespace // Class which handles async pixel transfers in a platform // independent way. -class AsyncPixelTransferDelegateIdle : public AsyncPixelTransferDelegate, - public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> { +class AsyncPixelTransferDelegateIdle + : public AsyncPixelTransferDelegate, + public base::SupportsWeakPtr<AsyncPixelTransferDelegateIdle> { public: AsyncPixelTransferDelegateIdle( AsyncPixelTransferManagerIdle::SharedState* state, @@ -101,18 +63,19 @@ class AsyncPixelTransferDelegateIdle : public AsyncPixelTransferDelegate, AsyncTexImage2DParams tex_params, AsyncMemoryParams mem_params, const base::Closure& bind_callback, - ScopedSafeSharedMemory* safe_shared_memory, - GLuint texture_id); + ScopedSafeSharedMemory* safe_shared_memory); void PerformAsyncTexSubImage2D( AsyncTexSubImage2DParams tex_params, AsyncMemoryParams mem_params, - ScopedSafeSharedMemory* safe_shared_memory, - GLuint texture_id); + ScopedSafeSharedMemory* safe_shared_memory); + + uint64 id_; + GLuint texture_id_; + bool transfer_in_progress_; // Safe to hold a raw pointer because SharedState is owned by the Manager // which owns the Delegate. AsyncPixelTransferManagerIdle::SharedState* shared_state_; - scoped_ptr<AsyncPixelTransferState> state_; DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateIdle); }; @@ -120,8 +83,10 @@ class AsyncPixelTransferDelegateIdle : public AsyncPixelTransferDelegate, AsyncPixelTransferDelegateIdle::AsyncPixelTransferDelegateIdle( AsyncPixelTransferManagerIdle::SharedState* shared_state, GLuint texture_id) - : shared_state_(shared_state), - state_(new AsyncPixelTransferState(texture_id)) {} + : id_(g_next_pixel_transfer_state_id++), + texture_id_(texture_id), + transfer_in_progress_(false), + shared_state_(shared_state) {} AsyncPixelTransferDelegateIdle::~AsyncPixelTransferDelegateIdle() {} @@ -135,21 +100,18 @@ void AsyncPixelTransferDelegateIdle::AsyncTexImage2D( mem_params.shm_size); shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task( - state_->id(), + id_, base::Bind( - &AsyncPixelTransferState::PerformTransfer, - state_->AsWeakPtr(), - base::Bind( - &AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D, - AsWeakPtr(), - tex_params, - mem_params, - bind_callback, - base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(), - mem_params.shared_memory, - mem_params.shm_size)))))); - - state_->set_transfer_in_progress(true); + &AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D, + AsWeakPtr(), + tex_params, + mem_params, + bind_callback, + base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(), + mem_params.shared_memory, + mem_params.shm_size))))); + + transfer_in_progress_ = true; } void AsyncPixelTransferDelegateIdle::AsyncTexSubImage2D( @@ -161,24 +123,21 @@ void AsyncPixelTransferDelegateIdle::AsyncTexSubImage2D( mem_params.shm_size); shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task( - state_->id(), + id_, base::Bind( - &AsyncPixelTransferState::PerformTransfer, - state_->AsWeakPtr(), - base::Bind( - &AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D, - AsWeakPtr(), - tex_params, - mem_params, - base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(), - mem_params.shared_memory, - mem_params.shm_size)))))); - - state_->set_transfer_in_progress(true); + &AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D, + AsWeakPtr(), + tex_params, + mem_params, + base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(), + mem_params.shared_memory, + mem_params.shm_size))))); + + transfer_in_progress_ = true; } bool AsyncPixelTransferDelegateIdle::TransferIsInProgress() { - return state_->TransferIsInProgress(); + return transfer_in_progress_; } void AsyncPixelTransferDelegateIdle::WaitForTransferCompletion() { @@ -186,7 +145,7 @@ void AsyncPixelTransferDelegateIdle::WaitForTransferCompletion() { shared_state_->tasks.begin(); iter != shared_state_->tasks.end(); ++iter) { - if (iter->transfer_id != state_->id()) + if (iter->transfer_id != id_) continue; (*iter).task.Run(); @@ -201,15 +160,14 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D( AsyncTexImage2DParams tex_params, AsyncMemoryParams mem_params, const base::Closure& bind_callback, - ScopedSafeSharedMemory* safe_shared_memory, - GLuint texture_id) { + ScopedSafeSharedMemory* safe_shared_memory) { TRACE_EVENT2("gpu", "PerformAsyncTexImage2D", "width", tex_params.width, "height", tex_params.height); void* data = GetAddress(safe_shared_memory, mem_params); - gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id); + gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); { TRACE_EVENT0("gpu", "glTexImage2D"); @@ -225,6 +183,8 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D( data); } + transfer_in_progress_ = false; + // The texture is already fully bound so just call it now. bind_callback.Run(); } @@ -232,8 +192,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D( void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D( AsyncTexSubImage2DParams tex_params, AsyncMemoryParams mem_params, - ScopedSafeSharedMemory* safe_shared_memory, - GLuint texture_id) { + ScopedSafeSharedMemory* safe_shared_memory) { TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D", "width", tex_params.width, "height", tex_params.height); @@ -241,7 +200,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D( void* data = GetAddress(safe_shared_memory, mem_params); base::TimeTicks begin_time(base::TimeTicks::HighResNow()); - gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id); + gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); { TRACE_EVENT0("gpu", "glTexSubImage2D"); @@ -257,6 +216,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D( data); } + transfer_in_progress_ = false; shared_state_->texture_upload_count++; shared_state_->total_texture_upload_time += base::TimeTicks::HighResNow() - begin_time; |