Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: gpu/command_buffer/service/image_manager.cc

Issue 301793003: During image destroy, delete textures only if we have a GL context. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: change destroy flow for all GLImage types. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/image_manager.h" 5 #include "gpu/command_buffer/service/image_manager.h"
6 6
7 #include "ui/gl/gl_image.h" 7 #include "ui/gl/gl_image.h"
8 8
9 namespace gpu { 9 namespace gpu {
10 namespace gles2 { 10 namespace gles2 {
11 11
12 ImageManager::ImageManager() : release_after_use_(false) { 12 ImageManager::ImageManager() : release_after_use_(false) {
13 } 13 }
14 14
15 ImageManager::~ImageManager() { 15 ImageManager::~ImageManager() {
16 } 16 }
17 17
18 void ImageManager::Destroy(bool have_context) {
19 for (GLImageMap::const_iterator iter = gl_images_.begin();
20 iter != gl_images_.end();
21 ++iter)
22 iter->second.get()->Destroy(have_context);
23 }
sohanjg 2014/06/02 13:59:42 If we clear the hash map here, we would need to en
reveman 2014/06/02 14:34:47 I'm not following. How can this cause a leak?
24
18 void ImageManager::RegisterGpuMemoryBuffer(int32 id, 25 void ImageManager::RegisterGpuMemoryBuffer(int32 id,
19 gfx::GpuMemoryBufferHandle buffer, 26 gfx::GpuMemoryBufferHandle buffer,
20 size_t width, 27 size_t width,
21 size_t height, 28 size_t height,
22 unsigned internalformat) { 29 unsigned internalformat) {
23 if (id <= 0) { 30 if (id <= 0) {
24 DVLOG(0) << "Cannot register GPU memory buffer with non-positive ID."; 31 DVLOG(0) << "Cannot register GPU memory buffer with non-positive ID.";
25 return; 32 return;
26 } 33 }
27 34
(...skipping 16 matching lines...) Expand all
44 } 51 }
45 52
46 void ImageManager::UnregisterGpuMemoryBuffer(int32 id) { 53 void ImageManager::UnregisterGpuMemoryBuffer(int32 id) {
47 RemoveImage(id); 54 RemoveImage(id);
48 } 55 }
49 56
50 void ImageManager::AddImage(gfx::GLImage* image, int32 service_id) { 57 void ImageManager::AddImage(gfx::GLImage* image, int32 service_id) {
51 gl_images_[service_id] = image; 58 gl_images_[service_id] = image;
52 } 59 }
53 60
54 void ImageManager::RemoveImage(int32 service_id) { 61 void ImageManager::RemoveImage(int32 service_id) {
reveman 2014/06/02 14:34:47 Don't you need to call Destroy here too?
55 gl_images_.erase(service_id); 62 gl_images_.erase(service_id);
56 } 63 }
57 64
58 gfx::GLImage* ImageManager::LookupImage(int32 service_id) { 65 gfx::GLImage* ImageManager::LookupImage(int32 service_id) {
59 GLImageMap::const_iterator iter = gl_images_.find(service_id); 66 GLImageMap::const_iterator iter = gl_images_.find(service_id);
60 if (iter != gl_images_.end()) 67 if (iter != gl_images_.end())
61 return iter->second.get(); 68 return iter->second.get();
62 69
63 return NULL; 70 return NULL;
64 } 71 }
65 72
66 void ImageManager::SetReleaseAfterUse() { 73 void ImageManager::SetReleaseAfterUse() {
67 release_after_use_ = true; 74 release_after_use_ = true;
68 } 75 }
69 76
70 } // namespace gles2 77 } // namespace gles2
71 } // namespace gpu 78 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698