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
9namespace gpu {
10
11AsyncPixelTransferCompletionObserver::AsyncPixelTransferCompletionObserver() {}
12
13AsyncPixelTransferCompletionObserver::~AsyncPixelTransferCompletionObserver() {}
14
15AsyncPixelTransferManager::AsyncPixelTransferManager() {}
16
17AsyncPixelTransferManager::~AsyncPixelTransferManager() {
18  if (manager_)
19    manager_->RemoveObserver(this);
20}
21
22void AsyncPixelTransferManager::Initialize(gles2::TextureManager* manager) {
23  manager_ = manager;
24  manager_->AddObserver(this);
25}
26
27AsyncPixelTransferDelegate*
28AsyncPixelTransferManager::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
38AsyncPixelTransferDelegate*
39AsyncPixelTransferManager::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
49void 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
56bool AsyncPixelTransferManager::AsyncTransferIsInProgress(
57    gles2::TextureRef* ref) {
58  AsyncPixelTransferDelegate* delegate = GetPixelTransferDelegate(ref);
59  return delegate && delegate->TransferIsInProgress();
60}
61
62void AsyncPixelTransferManager::OnTextureManagerDestroying(
63    gles2::TextureManager* manager) {
64  // TextureManager should outlive AsyncPixelTransferManager.
65  NOTREACHED();
66  manager_ = NULL;
67}
68
69void 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