| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" |
| |
| #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h" |
| |
| namespace gpu { |
| |
| AsyncPixelTransferCompletionObserver::AsyncPixelTransferCompletionObserver() {} |
| |
| AsyncPixelTransferCompletionObserver::~AsyncPixelTransferCompletionObserver() {} |
| |
| AsyncPixelTransferManager::AsyncPixelTransferManager() {} |
| |
| AsyncPixelTransferManager::~AsyncPixelTransferManager() { |
| if (manager_) |
| manager_->RemoveObserver(this); |
| |
| for (TextureToDelegateMap::iterator ref = delegate_map_.begin(); |
| ref != delegate_map_.end(); |
| ref++) { |
| ref->first->RemoveObserver(); |
| } |
| } |
| |
| void AsyncPixelTransferManager::Initialize(gles2::TextureManager* manager) { |
| manager_ = manager; |
| manager_->AddObserver(this); |
| } |
| |
| AsyncPixelTransferDelegate* |
| AsyncPixelTransferManager::CreatePixelTransferDelegate( |
| gles2::TextureRef* ref, |
| const AsyncTexImage2DParams& define_params) { |
| DCHECK(!GetPixelTransferDelegate(ref)); |
| AsyncPixelTransferDelegate* delegate = |
| CreatePixelTransferDelegateImpl(ref, define_params); |
| delegate_map_[ref] = make_linked_ptr(delegate); |
| ref->AddObserver(); |
| return delegate; |
| } |
| |
| AsyncPixelTransferDelegate* |
| AsyncPixelTransferManager::GetPixelTransferDelegate( |
| gles2::TextureRef* ref) { |
| TextureToDelegateMap::iterator it = delegate_map_.find(ref); |
| if (it == delegate_map_.end()) { |
| return NULL; |
| } else { |
| return it->second.get(); |
| } |
| } |
| |
| void AsyncPixelTransferManager::ClearPixelTransferDelegateForTest( |
| gles2::TextureRef* ref) { |
| TextureToDelegateMap::iterator it = delegate_map_.find(ref); |
| if (it != delegate_map_.end()) { |
| delegate_map_.erase(it); |
| ref->RemoveObserver(); |
| } |
| } |
| |
| bool AsyncPixelTransferManager::AsyncTransferIsInProgress( |
| gles2::TextureRef* ref) { |
| AsyncPixelTransferDelegate* delegate = GetPixelTransferDelegate(ref); |
| return delegate && delegate->TransferIsInProgress(); |
| } |
| |
| void AsyncPixelTransferManager::OnTextureManagerDestroying( |
| gles2::TextureManager* manager) { |
| // TextureManager should outlive AsyncPixelTransferManager. |
| NOTREACHED(); |
| manager_ = NULL; |
| } |
| |
| void AsyncPixelTransferManager::OnTextureRefDestroying( |
| gles2::TextureRef* texture) { |
| TextureToDelegateMap::iterator it = delegate_map_.find(texture); |
| if (it != delegate_map_.end()) { |
| delegate_map_.erase(it); |
| texture->RemoveObserver(); |
| } |
| } |
| |
| } // namespace gpu |