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 | 6 |
7 #include <set> | 7 #include <set> |
8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
9 #include "gpu/command_buffer/service/mocks.h" | 9 #include "gpu/command_buffer/service/mocks.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 #endif | 71 #endif |
72 | 72 |
73 TEST_F(RenderbufferManagerTest, Basic) { | 73 TEST_F(RenderbufferManagerTest, Basic) { |
74 const GLuint kClient1Id = 1; | 74 const GLuint kClient1Id = 1; |
75 const GLuint kService1Id = 11; | 75 const GLuint kService1Id = 11; |
76 const GLuint kClient2Id = 2; | 76 const GLuint kClient2Id = 2; |
77 EXPECT_EQ(kMaxSize, manager_->max_renderbuffer_size()); | 77 EXPECT_EQ(kMaxSize, manager_->max_renderbuffer_size()); |
78 EXPECT_EQ(kMaxSamples, manager_->max_samples()); | 78 EXPECT_EQ(kMaxSamples, manager_->max_samples()); |
79 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 79 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
80 // Check we can create renderbuffer. | 80 // Check we can create renderbuffer. |
81 manager_->CreateRenderbufferInfo(kClient1Id, kService1Id); | 81 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
82 // Check renderbuffer got created. | 82 // Check renderbuffer got created. |
83 RenderbufferManager::RenderbufferInfo* info1 = | 83 Renderbuffer* info1 = |
84 manager_->GetRenderbufferInfo(kClient1Id); | 84 manager_->GetRenderbuffer(kClient1Id); |
85 ASSERT_TRUE(info1 != NULL); | 85 ASSERT_TRUE(info1 != NULL); |
86 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 86 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
87 GLuint client_id = 0; | 87 GLuint client_id = 0; |
88 EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id)); | 88 EXPECT_TRUE(manager_->GetClientId(info1->service_id(), &client_id)); |
89 EXPECT_EQ(kClient1Id, client_id); | 89 EXPECT_EQ(kClient1Id, client_id); |
90 // Check we get nothing for a non-existent renderbuffer. | 90 // Check we get nothing for a non-existent renderbuffer. |
91 EXPECT_TRUE(manager_->GetRenderbufferInfo(kClient2Id) == NULL); | 91 EXPECT_TRUE(manager_->GetRenderbuffer(kClient2Id) == NULL); |
92 // Check trying to a remove non-existent renderbuffers does not crash. | 92 // Check trying to a remove non-existent renderbuffers does not crash. |
93 manager_->RemoveRenderbufferInfo(kClient2Id); | 93 manager_->RemoveRenderbuffer(kClient2Id); |
94 // Check that the renderbuffer is deleted when the last ref is released. | 94 // Check that the renderbuffer is deleted when the last ref is released. |
95 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 95 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
96 .Times(1) | 96 .Times(1) |
97 .RetiresOnSaturation(); | 97 .RetiresOnSaturation(); |
98 // Check we can't get the renderbuffer after we remove it. | 98 // Check we can't get the renderbuffer after we remove it. |
99 manager_->RemoveRenderbufferInfo(kClient1Id); | 99 manager_->RemoveRenderbuffer(kClient1Id); |
100 EXPECT_TRUE(manager_->GetRenderbufferInfo(kClient1Id) == NULL); | 100 EXPECT_TRUE(manager_->GetRenderbuffer(kClient1Id) == NULL); |
101 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 101 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
102 } | 102 } |
103 | 103 |
104 TEST_F(RenderbufferManagerTest, Destroy) { | 104 TEST_F(RenderbufferManagerTest, Destroy) { |
105 const GLuint kClient1Id = 1; | 105 const GLuint kClient1Id = 1; |
106 const GLuint kService1Id = 11; | 106 const GLuint kService1Id = 11; |
107 // Check we can create renderbuffer. | 107 // Check we can create renderbuffer. |
108 manager_->CreateRenderbufferInfo(kClient1Id, kService1Id); | 108 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
109 // Check renderbuffer got created. | 109 // Check renderbuffer got created. |
110 RenderbufferManager::RenderbufferInfo* info1 = | 110 Renderbuffer* info1 = |
111 manager_->GetRenderbufferInfo(kClient1Id); | 111 manager_->GetRenderbuffer(kClient1Id); |
112 ASSERT_TRUE(info1 != NULL); | 112 ASSERT_TRUE(info1 != NULL); |
113 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 113 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
114 .Times(1) | 114 .Times(1) |
115 .RetiresOnSaturation(); | 115 .RetiresOnSaturation(); |
116 manager_->Destroy(true); | 116 manager_->Destroy(true); |
117 info1 = manager_->GetRenderbufferInfo(kClient1Id); | 117 info1 = manager_->GetRenderbuffer(kClient1Id); |
118 ASSERT_TRUE(info1 == NULL); | 118 ASSERT_TRUE(info1 == NULL); |
119 } | 119 } |
120 | 120 |
121 TEST_F(RenderbufferManagerTest, RenderbufferInfo) { | 121 TEST_F(RenderbufferManagerTest, Renderbuffer) { |
122 const GLuint kClient1Id = 1; | 122 const GLuint kClient1Id = 1; |
123 const GLuint kService1Id = 11; | 123 const GLuint kService1Id = 11; |
124 // Check we can create renderbuffer. | 124 // Check we can create renderbuffer. |
125 manager_->CreateRenderbufferInfo(kClient1Id, kService1Id); | 125 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
126 // Check renderbuffer got created. | 126 // Check renderbuffer got created. |
127 RenderbufferManager::RenderbufferInfo* info1 = | 127 Renderbuffer* info1 = |
128 manager_->GetRenderbufferInfo(kClient1Id); | 128 manager_->GetRenderbuffer(kClient1Id); |
129 ASSERT_TRUE(info1 != NULL); | 129 ASSERT_TRUE(info1 != NULL); |
130 EXPECT_EQ(kService1Id, info1->service_id()); | 130 EXPECT_EQ(kService1Id, info1->service_id()); |
131 EXPECT_EQ(0, info1->samples()); | 131 EXPECT_EQ(0, info1->samples()); |
132 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4), info1->internal_format()); | 132 EXPECT_EQ(static_cast<GLenum>(GL_RGBA4), info1->internal_format()); |
133 EXPECT_EQ(0, info1->width()); | 133 EXPECT_EQ(0, info1->width()); |
134 EXPECT_EQ(0, info1->height()); | 134 EXPECT_EQ(0, info1->height()); |
135 EXPECT_TRUE(info1->cleared()); | 135 EXPECT_TRUE(info1->cleared()); |
136 EXPECT_EQ(0u, info1->EstimatedSize()); | 136 EXPECT_EQ(0u, info1->EstimatedSize()); |
137 | 137 |
138 // Check if we set the info it gets marked as not cleared. | 138 // Check if we set the info it gets marked as not cleared. |
(...skipping 15 matching lines...) Expand all Loading... |
154 EXPECT_TRUE(info1->cleared()); | 154 EXPECT_TRUE(info1->cleared()); |
155 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 155 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
156 | 156 |
157 manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight); | 157 manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight); |
158 EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers()); | 158 EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers()); |
159 | 159 |
160 // Check that the renderbuffer is deleted when the last ref is released. | 160 // Check that the renderbuffer is deleted when the last ref is released. |
161 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 161 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
162 .Times(1) | 162 .Times(1) |
163 .RetiresOnSaturation(); | 163 .RetiresOnSaturation(); |
164 manager_->RemoveRenderbufferInfo(kClient1Id); | 164 manager_->RemoveRenderbuffer(kClient1Id); |
165 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 165 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
166 } | 166 } |
167 | 167 |
168 TEST_F(RenderbufferManagerMemoryTrackerTest, Basic) { | 168 TEST_F(RenderbufferManagerMemoryTrackerTest, Basic) { |
169 const GLuint kClient1Id = 1; | 169 const GLuint kClient1Id = 1; |
170 const GLuint kService1Id = 11; | 170 const GLuint kService1Id = 11; |
171 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); | 171 EXPECT_MEMORY_ALLOCATION_CHANGE(0, 0, MemoryTracker::kUnmanaged); |
172 manager_->CreateRenderbufferInfo(kClient1Id, kService1Id); | 172 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
173 RenderbufferManager::RenderbufferInfo* info1 = | 173 Renderbuffer* info1 = |
174 manager_->GetRenderbufferInfo(kClient1Id); | 174 manager_->GetRenderbuffer(kClient1Id); |
175 ASSERT_TRUE(info1 != NULL); | 175 ASSERT_TRUE(info1 != NULL); |
176 | 176 |
177 const GLsizei kSamples = 4; | 177 const GLsizei kSamples = 4; |
178 const GLenum kFormat = GL_RGBA4; | 178 const GLenum kFormat = GL_RGBA4; |
179 const GLsizei kWidth = 128; | 179 const GLsizei kWidth = 128; |
180 const GLsizei kHeight1 = 64; | 180 const GLsizei kHeight1 = 64; |
181 const GLsizei kHeight2 = 32; | 181 const GLsizei kHeight2 = 32; |
182 uint32 expected_size_1 = 0; | 182 uint32 expected_size_1 = 0; |
183 uint32 expected_size_2 = 0; | 183 uint32 expected_size_2 = 0; |
184 RenderbufferManager::ComputeEstimatedRenderbufferSize( | 184 RenderbufferManager::ComputeEstimatedRenderbufferSize( |
(...skipping 11 matching lines...) Expand all Loading... |
196 EXPECT_MEMORY_ALLOCATION_CHANGE( | 196 EXPECT_MEMORY_ALLOCATION_CHANGE( |
197 expected_size_2, 0, MemoryTracker::kUnmanaged); | 197 expected_size_2, 0, MemoryTracker::kUnmanaged); |
198 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 198 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
199 .Times(1) | 199 .Times(1) |
200 .RetiresOnSaturation(); | 200 .RetiresOnSaturation(); |
201 } | 201 } |
202 | 202 |
203 TEST_F(RenderbufferManagerTest, UseDeletedRenderbufferInfo) { | 203 TEST_F(RenderbufferManagerTest, UseDeletedRenderbufferInfo) { |
204 const GLuint kClient1Id = 1; | 204 const GLuint kClient1Id = 1; |
205 const GLuint kService1Id = 11; | 205 const GLuint kService1Id = 11; |
206 manager_->CreateRenderbufferInfo(kClient1Id, kService1Id); | 206 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
207 RenderbufferManager::RenderbufferInfo::Ref info1( | 207 scoped_refptr<Renderbuffer> info1( |
208 manager_->GetRenderbufferInfo(kClient1Id)); | 208 manager_->GetRenderbuffer(kClient1Id)); |
209 ASSERT_TRUE(info1 != NULL); | 209 ASSERT_TRUE(info1 != NULL); |
210 // Remove it. | 210 // Remove it. |
211 manager_->RemoveRenderbufferInfo(kClient1Id); | 211 manager_->RemoveRenderbuffer(kClient1Id); |
212 // Use after removing. | 212 // Use after removing. |
213 const GLsizei kSamples = 4; | 213 const GLsizei kSamples = 4; |
214 const GLenum kFormat = GL_RGBA4; | 214 const GLenum kFormat = GL_RGBA4; |
215 const GLsizei kWidth = 128; | 215 const GLsizei kWidth = 128; |
216 const GLsizei kHeight = 64; | 216 const GLsizei kHeight = 64; |
217 manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight); | 217 manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight); |
218 // See that it still affects manager. | 218 // See that it still affects manager. |
219 EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers()); | 219 EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers()); |
220 manager_->SetCleared(info1, true); | 220 manager_->SetCleared(info1, true); |
221 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 221 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
(...skipping 10 matching lines...) Expand all Loading... |
232 std::pair<std::set<std::string>::iterator, bool> result = | 232 std::pair<std::set<std::string>::iterator, bool> result = |
233 string_set->insert(str); | 233 string_set->insert(str); |
234 return !result.second; | 234 return !result.second; |
235 } | 235 } |
236 | 236 |
237 } // anonymous namespace | 237 } // anonymous namespace |
238 | 238 |
239 TEST_F(RenderbufferManagerTest, AddToSignature) { | 239 TEST_F(RenderbufferManagerTest, AddToSignature) { |
240 const GLuint kClient1Id = 1; | 240 const GLuint kClient1Id = 1; |
241 const GLuint kService1Id = 11; | 241 const GLuint kService1Id = 11; |
242 manager_->CreateRenderbufferInfo(kClient1Id, kService1Id); | 242 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
243 RenderbufferManager::RenderbufferInfo::Ref info1( | 243 scoped_refptr<Renderbuffer> info1( |
244 manager_->GetRenderbufferInfo(kClient1Id)); | 244 manager_->GetRenderbuffer(kClient1Id)); |
245 ASSERT_TRUE(info1 != NULL); | 245 ASSERT_TRUE(info1 != NULL); |
246 const GLsizei kSamples = 4; | 246 const GLsizei kSamples = 4; |
247 const GLenum kFormat = GL_RGBA4; | 247 const GLenum kFormat = GL_RGBA4; |
248 const GLsizei kWidth = 128; | 248 const GLsizei kWidth = 128; |
249 const GLsizei kHeight = 64; | 249 const GLsizei kHeight = 64; |
250 manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight); | 250 manager_->SetInfo(info1, kSamples, kFormat, kWidth, kHeight); |
251 std::string signature1; | 251 std::string signature1; |
252 std::string signature2; | 252 std::string signature2; |
253 info1->AddToSignature(&signature1); | 253 info1->AddToSignature(&signature1); |
254 | 254 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 | 286 |
287 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 287 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
288 .Times(1) | 288 .Times(1) |
289 .RetiresOnSaturation(); | 289 .RetiresOnSaturation(); |
290 } | 290 } |
291 | 291 |
292 } // namespace gles2 | 292 } // namespace gles2 |
293 } // namespace gpu | 293 } // namespace gpu |
294 | 294 |
295 | 295 |
OLD | NEW |