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 AsyncPixelTransferCompletionObserver()11AsyncPixelTransferCompletionObserver::AsyncPixelTransferCompletionObserver() {} 12 ~AsyncPixelTransferCompletionObserver()13AsyncPixelTransferCompletionObserver::~AsyncPixelTransferCompletionObserver() {} 14 AsyncPixelTransferManager()15AsyncPixelTransferManager::AsyncPixelTransferManager() {} 16 ~AsyncPixelTransferManager()17AsyncPixelTransferManager::~AsyncPixelTransferManager() { 18 if (manager_) 19 manager_->RemoveObserver(this); 20 21 for (TextureToDelegateMap::iterator ref = delegate_map_.begin(); 22 ref != delegate_map_.end(); 23 ref++) { 24 ref->first->RemoveObserver(); 25 } 26 } 27 Initialize(gles2::TextureManager * manager)28void AsyncPixelTransferManager::Initialize(gles2::TextureManager* manager) { 29 manager_ = manager; 30 manager_->AddObserver(this); 31 } 32 33 AsyncPixelTransferDelegate* CreatePixelTransferDelegate(gles2::TextureRef * ref,const AsyncTexImage2DParams & define_params)34AsyncPixelTransferManager::CreatePixelTransferDelegate( 35 gles2::TextureRef* ref, 36 const AsyncTexImage2DParams& define_params) { 37 DCHECK(!GetPixelTransferDelegate(ref)); 38 AsyncPixelTransferDelegate* delegate = 39 CreatePixelTransferDelegateImpl(ref, define_params); 40 delegate_map_[ref] = make_linked_ptr(delegate); 41 ref->AddObserver(); 42 return delegate; 43 } 44 45 AsyncPixelTransferDelegate* GetPixelTransferDelegate(gles2::TextureRef * ref)46AsyncPixelTransferManager::GetPixelTransferDelegate( 47 gles2::TextureRef* ref) { 48 TextureToDelegateMap::iterator it = delegate_map_.find(ref); 49 if (it == delegate_map_.end()) { 50 return NULL; 51 } else { 52 return it->second.get(); 53 } 54 } 55 ClearPixelTransferDelegateForTest(gles2::TextureRef * ref)56void AsyncPixelTransferManager::ClearPixelTransferDelegateForTest( 57 gles2::TextureRef* ref) { 58 TextureToDelegateMap::iterator it = delegate_map_.find(ref); 59 if (it != delegate_map_.end()) { 60 delegate_map_.erase(it); 61 ref->RemoveObserver(); 62 } 63 } 64 AsyncTransferIsInProgress(gles2::TextureRef * ref)65bool AsyncPixelTransferManager::AsyncTransferIsInProgress( 66 gles2::TextureRef* ref) { 67 AsyncPixelTransferDelegate* delegate = GetPixelTransferDelegate(ref); 68 return delegate && delegate->TransferIsInProgress(); 69 } 70 OnTextureManagerDestroying(gles2::TextureManager * manager)71void AsyncPixelTransferManager::OnTextureManagerDestroying( 72 gles2::TextureManager* manager) { 73 // TextureManager should outlive AsyncPixelTransferManager. 74 NOTREACHED(); 75 manager_ = NULL; 76 } 77 OnTextureRefDestroying(gles2::TextureRef * texture)78void AsyncPixelTransferManager::OnTextureRefDestroying( 79 gles2::TextureRef* texture) { 80 TextureToDelegateMap::iterator it = delegate_map_.find(texture); 81 if (it != delegate_map_.end()) { 82 delegate_map_.erase(it); 83 texture->RemoveObserver(); 84 } 85 } 86 87 } // namespace gpu 88