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::kUnmanaged)), |
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 bool cleared) { | 100 bool cleared) { |
105 DCHECK(renderbuffer); | 101 DCHECK(renderbuffer); |
106 if (!renderbuffer->cleared()) { | 102 if (!renderbuffer->cleared()) { |
107 --num_uncleared_renderbuffers_; | 103 --num_uncleared_renderbuffers_; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 return true; | 144 return true; |
149 } | 145 } |
150 } | 146 } |
151 return false; | 147 return false; |
152 } | 148 } |
153 | 149 |
154 } // namespace gles2 | 150 } // namespace gles2 |
155 } // namespace gpu | 151 } // namespace gpu |
156 | 152 |
157 | 153 |
OLD | NEW |