summaryrefslogtreecommitdiffstats
path: root/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc')
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc
index 3084dd61964..efc893a40ca 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc
@@ -17,6 +17,12 @@ 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) {
@@ -32,6 +38,7 @@ AsyncPixelTransferManager::CreatePixelTransferDelegate(
AsyncPixelTransferDelegate* delegate =
CreatePixelTransferDelegateImpl(ref, define_params);
delegate_map_[ref] = make_linked_ptr(delegate);
+ ref->AddObserver();
return delegate;
}
@@ -49,8 +56,10 @@ AsyncPixelTransferManager::GetPixelTransferDelegate(
void AsyncPixelTransferManager::ClearPixelTransferDelegateForTest(
gles2::TextureRef* ref) {
TextureToDelegateMap::iterator it = delegate_map_.find(ref);
- if (it != delegate_map_.end())
+ if (it != delegate_map_.end()) {
delegate_map_.erase(it);
+ ref->RemoveObserver();
+ }
}
bool AsyncPixelTransferManager::AsyncTransferIsInProgress(
@@ -69,8 +78,10 @@ void AsyncPixelTransferManager::OnTextureManagerDestroying(
void AsyncPixelTransferManager::OnTextureRefDestroying(
gles2::TextureRef* texture) {
TextureToDelegateMap::iterator it = delegate_map_.find(texture);
- if (it != delegate_map_.end())
+ if (it != delegate_map_.end()) {
delegate_map_.erase(it);
+ texture->RemoveObserver();
+ }
}
} // namespace gpu