• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()11 AsyncPixelTransferCompletionObserver::AsyncPixelTransferCompletionObserver() {}
12 
~AsyncPixelTransferCompletionObserver()13 AsyncPixelTransferCompletionObserver::~AsyncPixelTransferCompletionObserver() {}
14 
AsyncPixelTransferManager()15 AsyncPixelTransferManager::AsyncPixelTransferManager() {}
16 
~AsyncPixelTransferManager()17 AsyncPixelTransferManager::~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)28 void AsyncPixelTransferManager::Initialize(gles2::TextureManager* manager) {
29   manager_ = manager;
30   manager_->AddObserver(this);
31 }
32 
33 AsyncPixelTransferDelegate*
CreatePixelTransferDelegate(gles2::TextureRef * ref,const AsyncTexImage2DParams & define_params)34 AsyncPixelTransferManager::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)46 AsyncPixelTransferManager::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)56 void 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)65 bool AsyncPixelTransferManager::AsyncTransferIsInProgress(
66     gles2::TextureRef* ref) {
67   AsyncPixelTransferDelegate* delegate = GetPixelTransferDelegate(ref);
68   return delegate && delegate->TransferIsInProgress();
69 }
70 
OnTextureManagerDestroying(gles2::TextureManager * manager)71 void AsyncPixelTransferManager::OnTextureManagerDestroying(
72     gles2::TextureManager* manager) {
73   // TextureManager should outlive AsyncPixelTransferManager.
74   NOTREACHED();
75   manager_ = NULL;
76 }
77 
OnTextureRefDestroying(gles2::TextureRef * texture)78 void 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