| OLD | NEW |
| 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/renderbuffer_manager.h" | 5 #include "gpu/command_buffer/service/renderbuffer_manager.h" |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
| 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 11 #include "gpu/command_buffer/service/memory_tracking.h" | 11 #include "gpu/command_buffer/service/memory_tracking.h" |
| 12 | 12 |
| 13 namespace gpu { | 13 namespace gpu { |
| 14 namespace gles2 { | 14 namespace gles2 { |
| 15 | 15 |
| 16 RenderbufferManager::RenderbufferManager( | 16 RenderbufferManager::RenderbufferManager( |
| 17 MemoryTracker* memory_tracker, | 17 MemoryTracker* memory_tracker, |
| 18 GLint max_renderbuffer_size, | 18 GLint max_renderbuffer_size, |
| 19 GLint max_samples) | 19 GLint max_samples) |
| 20 : renderbuffer_memory_tracker_(new MemoryTypeTracker(memory_tracker)), | 20 : memory_tracker_( |
| 21 new MemoryTypeTracker(memory_tracker, MemoryTracker::Unmanaged)), |
| 21 max_renderbuffer_size_(max_renderbuffer_size), | 22 max_renderbuffer_size_(max_renderbuffer_size), |
| 22 max_samples_(max_samples), | 23 max_samples_(max_samples), |
| 23 num_uncleared_renderbuffers_(0), | 24 num_uncleared_renderbuffers_(0), |
| 24 mem_represented_(0), | |
| 25 renderbuffer_info_count_(0), | 25 renderbuffer_info_count_(0), |
| 26 have_context_(true) { | 26 have_context_(true) { |
| 27 UpdateMemRepresented(); | 27 memory_tracker_->UpdateMemRepresented(); |
| 28 } | 28 } |
| 29 | 29 |
| 30 RenderbufferManager::~RenderbufferManager() { | 30 RenderbufferManager::~RenderbufferManager() { |
| 31 DCHECK(renderbuffer_infos_.empty()); | 31 DCHECK(renderbuffer_infos_.empty()); |
| 32 // If this triggers, that means something is keeping a reference to | 32 // If this triggers, that means something is keeping a reference to |
| 33 // a RenderbufferInfo belonging to this. | 33 // a RenderbufferInfo belonging to this. |
| 34 CHECK_EQ(renderbuffer_info_count_, 0u); | 34 CHECK_EQ(renderbuffer_info_count_, 0u); |
| 35 | 35 |
| 36 DCHECK_EQ(0, num_uncleared_renderbuffers_); | 36 DCHECK_EQ(0, num_uncleared_renderbuffers_); |
| 37 } | 37 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 53 if (manager_) { | 53 if (manager_) { |
| 54 if (manager_->have_context_) { | 54 if (manager_->have_context_) { |
| 55 GLuint id = service_id(); | 55 GLuint id = service_id(); |
| 56 glDeleteRenderbuffersEXT(1, &id); | 56 glDeleteRenderbuffersEXT(1, &id); |
| 57 } | 57 } |
| 58 manager_->StopTracking(this); | 58 manager_->StopTracking(this); |
| 59 manager_ = NULL; | 59 manager_ = NULL; |
| 60 } | 60 } |
| 61 } | 61 } |
| 62 | 62 |
| 63 | |
| 64 void RenderbufferManager::UpdateMemRepresented() { | |
| 65 renderbuffer_memory_tracker_->UpdateMemRepresented(mem_represented_); | |
| 66 } | |
| 67 | |
| 68 void RenderbufferManager::Destroy(bool have_context) { | 63 void RenderbufferManager::Destroy(bool have_context) { |
| 69 have_context_ = have_context; | 64 have_context_ = have_context; |
| 70 renderbuffer_infos_.clear(); | 65 renderbuffer_infos_.clear(); |
| 71 DCHECK_EQ(0u, mem_represented_); | 66 DCHECK_EQ(0u, memory_tracker_->GetMemRepresented()); |
| 72 UpdateMemRepresented(); | 67 memory_tracker_->UpdateMemRepresented(); |
| 73 } | 68 } |
| 74 | 69 |
| 75 void RenderbufferManager::StartTracking(RenderbufferInfo* /* renderbuffer */) { | 70 void RenderbufferManager::StartTracking(RenderbufferInfo* /* renderbuffer */) { |
| 76 ++renderbuffer_info_count_; | 71 ++renderbuffer_info_count_; |
| 77 } | 72 } |
| 78 | 73 |
| 79 void RenderbufferManager::StopTracking(RenderbufferInfo* renderbuffer) { | 74 void RenderbufferManager::StopTracking(RenderbufferInfo* renderbuffer) { |
| 80 --renderbuffer_info_count_; | 75 --renderbuffer_info_count_; |
| 81 if (!renderbuffer->cleared()) { | 76 if (!renderbuffer->cleared()) { |
| 82 --num_uncleared_renderbuffers_; | 77 --num_uncleared_renderbuffers_; |
| 83 } | 78 } |
| 84 mem_represented_ -= renderbuffer->EstimatedSize(); | 79 memory_tracker_->TrackMemFree(renderbuffer->EstimatedSize()); |
| 80 memory_tracker_->UpdateMemRepresented(); |
| 85 } | 81 } |
| 86 | 82 |
| 87 void RenderbufferManager::SetInfo( | 83 void RenderbufferManager::SetInfo( |
| 88 RenderbufferInfo* renderbuffer, | 84 RenderbufferInfo* renderbuffer, |
| 89 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { | 85 GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { |
| 90 DCHECK(renderbuffer); | 86 DCHECK(renderbuffer); |
| 91 if (!renderbuffer->cleared()) { | 87 if (!renderbuffer->cleared()) { |
| 92 --num_uncleared_renderbuffers_; | 88 --num_uncleared_renderbuffers_; |
| 93 } | 89 } |
| 94 mem_represented_ -= renderbuffer->EstimatedSize(); | 90 memory_tracker_->TrackMemFree(renderbuffer->EstimatedSize()); |
| 95 renderbuffer->SetInfo(samples, internalformat, width, height); | 91 renderbuffer->SetInfo(samples, internalformat, width, height); |
| 96 mem_represented_ += renderbuffer->EstimatedSize(); | 92 memory_tracker_->TrackMemAlloc(renderbuffer->EstimatedSize()); |
| 97 UpdateMemRepresented(); | 93 memory_tracker_->UpdateMemRepresented(); |
| 98 if (!renderbuffer->cleared()) { | 94 if (!renderbuffer->cleared()) { |
| 99 ++num_uncleared_renderbuffers_; | 95 ++num_uncleared_renderbuffers_; |
| 100 } | 96 } |
| 101 } | 97 } |
| 102 | 98 |
| 103 void RenderbufferManager::SetCleared(RenderbufferInfo* renderbuffer) { | 99 void RenderbufferManager::SetCleared(RenderbufferInfo* renderbuffer) { |
| 104 DCHECK(renderbuffer); | 100 DCHECK(renderbuffer); |
| 105 if (!renderbuffer->cleared()) { | 101 if (!renderbuffer->cleared()) { |
| 106 --num_uncleared_renderbuffers_; | 102 --num_uncleared_renderbuffers_; |
| 107 } | 103 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 return true; | 143 return true; |
| 148 } | 144 } |
| 149 } | 145 } |
| 150 return false; | 146 return false; |
| 151 } | 147 } |
| 152 | 148 |
| 153 } // namespace gles2 | 149 } // namespace gles2 |
| 154 } // namespace gpu | 150 } // namespace gpu |
| 155 | 151 |
| 156 | 152 |
| OLD | NEW |