1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h" 6 7 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h" 8 9 namespace gpu { 10 11 AsyncPixelTransferCompletionObserver::AsyncPixelTransferCompletionObserver() {} 12 13 AsyncPixelTransferCompletionObserver::~AsyncPixelTransferCompletionObserver() {} 14 15 AsyncPixelTransferManager::AsyncPixelTransferManager() {} 16 17 AsyncPixelTransferManager::~AsyncPixelTransferManager() { 18 if (manager_) 19 manager_->RemoveObserver(this); 20 } 21 22 void AsyncPixelTransferManager::Initialize(gles2::TextureManager* manager) { 23 manager_ = manager; 24 manager_->AddObserver(this); 25 } 26 27 AsyncPixelTransferDelegate* 28 AsyncPixelTransferManager::CreatePixelTransferDelegate( 29 gles2::TextureRef* ref, 30 const AsyncTexImage2DParams& define_params) { 31 DCHECK(!GetPixelTransferDelegate(ref)); 32 AsyncPixelTransferDelegate* delegate = 33 CreatePixelTransferDelegateImpl(ref, define_params); 34 delegate_map_[ref] = make_linked_ptr(delegate); 35 return delegate; 36 } 37 38 AsyncPixelTransferDelegate* 39 AsyncPixelTransferManager::GetPixelTransferDelegate( 40 gles2::TextureRef* ref) { 41 TextureToDelegateMap::iterator it = delegate_map_.find(ref); 42 if (it == delegate_map_.end()) { 43 return NULL; 44 } else { 45 return it->second.get(); 46 } 47 } 48 49 void AsyncPixelTransferManager::ClearPixelTransferDelegateForTest( 50 gles2::TextureRef* ref) { 51 TextureToDelegateMap::iterator it = delegate_map_.find(ref); 52 if (it != delegate_map_.end()) 53 delegate_map_.erase(it); 54 } 55 56 bool AsyncPixelTransferManager::AsyncTransferIsInProgress( 57 gles2::TextureRef* ref) { 58 AsyncPixelTransferDelegate* delegate = GetPixelTransferDelegate(ref); 59 return delegate && delegate->TransferIsInProgress(); 60 } 61 62 void AsyncPixelTransferManager::OnTextureManagerDestroying( 63 gles2::TextureManager* manager) { 64 // TextureManager should outlive AsyncPixelTransferManager. 65 NOTREACHED(); 66 manager_ = NULL; 67 } 68 69 void AsyncPixelTransferManager::OnTextureRefDestroying( 70 gles2::TextureRef* texture) { 71 TextureToDelegateMap::iterator it = delegate_map_.find(texture); 72 if (it != delegate_map_.end()) 73 delegate_map_.erase(it); 74 } 75 76 } // namespace gpu 77