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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 : public RenderbufferManagerTestBase { | 51 : public RenderbufferManagerTestBase { |
52 protected: | 52 protected: |
53 virtual void SetUp() { | 53 virtual void SetUp() { |
54 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); | 54 mock_memory_tracker_ = new StrictMock<MockMemoryTracker>(); |
55 SetUpBase(mock_memory_tracker_.get()); | 55 SetUpBase(mock_memory_tracker_.get()); |
56 } | 56 } |
57 | 57 |
58 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; | 58 scoped_refptr<MockMemoryTracker> mock_memory_tracker_; |
59 }; | 59 }; |
60 | 60 |
61 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ | 61 #define EXPECT_MEMORY_ALLOCATION_CHANGE(old_size, new_size, pool) \ |
62 EXPECT_CALL(*mock_memory_tracker_, \ | 62 EXPECT_CALL(*mock_memory_tracker_.get(), \ |
63 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ | 63 TrackMemoryAllocatedChange(old_size, new_size, pool)) \ |
64 .Times(1) \ | 64 .Times(1).RetiresOnSaturation() |
65 .RetiresOnSaturation() \ | |
66 | 65 |
67 // GCC requires these declarations, but MSVC requires they not be present | 66 // GCC requires these declarations, but MSVC requires they not be present |
68 #ifndef COMPILER_MSVC | 67 #ifndef COMPILER_MSVC |
69 const GLint RenderbufferManagerTestBase::kMaxSize; | 68 const GLint RenderbufferManagerTestBase::kMaxSize; |
70 const GLint RenderbufferManagerTestBase::kMaxSamples; | 69 const GLint RenderbufferManagerTestBase::kMaxSamples; |
71 #endif | 70 #endif |
72 | 71 |
73 TEST_F(RenderbufferManagerTest, Basic) { | 72 TEST_F(RenderbufferManagerTest, Basic) { |
74 const GLuint kClient1Id = 1; | 73 const GLuint kClient1Id = 1; |
75 const GLuint kService1Id = 11; | 74 const GLuint kService1Id = 11; |
76 const GLuint kClient2Id = 2; | 75 const GLuint kClient2Id = 2; |
77 EXPECT_EQ(kMaxSize, manager_->max_renderbuffer_size()); | 76 EXPECT_EQ(kMaxSize, manager_->max_renderbuffer_size()); |
78 EXPECT_EQ(kMaxSamples, manager_->max_samples()); | 77 EXPECT_EQ(kMaxSamples, manager_->max_samples()); |
79 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 78 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
80 // Check we can create renderbuffer. | 79 // Check we can create renderbuffer. |
81 manager_->CreateRenderbuffer(kClient1Id, kService1Id); | 80 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
82 // Check renderbuffer got created. | 81 // Check renderbuffer got created. |
83 scoped_refptr<Renderbuffer> renderbuffer1 = | 82 scoped_refptr<Renderbuffer> renderbuffer1 = |
84 manager_->GetRenderbuffer(kClient1Id); | 83 manager_->GetRenderbuffer(kClient1Id); |
85 ASSERT_TRUE(renderbuffer1 != NULL); | 84 ASSERT_TRUE(renderbuffer1.get() != NULL); |
86 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 85 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
87 EXPECT_EQ(kClient1Id, renderbuffer1->client_id()); | 86 EXPECT_EQ(kClient1Id, renderbuffer1->client_id()); |
88 // Check we get nothing for a non-existent renderbuffer. | 87 // Check we get nothing for a non-existent renderbuffer. |
89 EXPECT_TRUE(manager_->GetRenderbuffer(kClient2Id) == NULL); | 88 EXPECT_TRUE(manager_->GetRenderbuffer(kClient2Id) == NULL); |
90 // Check trying to a remove non-existent renderbuffers does not crash. | 89 // Check trying to a remove non-existent renderbuffers does not crash. |
91 manager_->RemoveRenderbuffer(kClient2Id); | 90 manager_->RemoveRenderbuffer(kClient2Id); |
92 // Check that the renderbuffer is deleted when the last ref is released. | 91 // Check that the renderbuffer is deleted when the last ref is released. |
93 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 92 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
94 .Times(1) | 93 .Times(1) |
95 .RetiresOnSaturation(); | 94 .RetiresOnSaturation(); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 .Times(1) | 197 .Times(1) |
199 .RetiresOnSaturation(); | 198 .RetiresOnSaturation(); |
200 } | 199 } |
201 | 200 |
202 TEST_F(RenderbufferManagerTest, UseDeletedRenderbufferInfo) { | 201 TEST_F(RenderbufferManagerTest, UseDeletedRenderbufferInfo) { |
203 const GLuint kClient1Id = 1; | 202 const GLuint kClient1Id = 1; |
204 const GLuint kService1Id = 11; | 203 const GLuint kService1Id = 11; |
205 manager_->CreateRenderbuffer(kClient1Id, kService1Id); | 204 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
206 scoped_refptr<Renderbuffer> renderbuffer1( | 205 scoped_refptr<Renderbuffer> renderbuffer1( |
207 manager_->GetRenderbuffer(kClient1Id)); | 206 manager_->GetRenderbuffer(kClient1Id)); |
208 ASSERT_TRUE(renderbuffer1 != NULL); | 207 ASSERT_TRUE(renderbuffer1.get() != NULL); |
209 // Remove it. | 208 // Remove it. |
210 manager_->RemoveRenderbuffer(kClient1Id); | 209 manager_->RemoveRenderbuffer(kClient1Id); |
211 // Use after removing. | 210 // Use after removing. |
212 const GLsizei kSamples = 4; | 211 const GLsizei kSamples = 4; |
213 const GLenum kFormat = GL_RGBA4; | 212 const GLenum kFormat = GL_RGBA4; |
214 const GLsizei kWidth = 128; | 213 const GLsizei kWidth = 128; |
215 const GLsizei kHeight = 64; | 214 const GLsizei kHeight = 64; |
216 manager_->SetInfo(renderbuffer1, kSamples, kFormat, kWidth, kHeight); | 215 manager_->SetInfo(renderbuffer1.get(), kSamples, kFormat, kWidth, kHeight); |
217 // See that it still affects manager. | 216 // See that it still affects manager. |
218 EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers()); | 217 EXPECT_TRUE(manager_->HaveUnclearedRenderbuffers()); |
219 manager_->SetCleared(renderbuffer1, true); | 218 manager_->SetCleared(renderbuffer1.get(), true); |
220 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); | 219 EXPECT_FALSE(manager_->HaveUnclearedRenderbuffers()); |
221 // Check that the renderbuffer is deleted when the last ref is released. | 220 // Check that the renderbuffer is deleted when the last ref is released. |
222 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 221 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
223 .Times(1) | 222 .Times(1) |
224 .RetiresOnSaturation(); | 223 .RetiresOnSaturation(); |
225 renderbuffer1 = NULL; | 224 renderbuffer1 = NULL; |
226 } | 225 } |
227 | 226 |
228 namespace { | 227 namespace { |
229 | 228 |
230 bool InSet(std::set<std::string>* string_set, const std::string& str) { | 229 bool InSet(std::set<std::string>* string_set, const std::string& str) { |
231 std::pair<std::set<std::string>::iterator, bool> result = | 230 std::pair<std::set<std::string>::iterator, bool> result = |
232 string_set->insert(str); | 231 string_set->insert(str); |
233 return !result.second; | 232 return !result.second; |
234 } | 233 } |
235 | 234 |
236 } // anonymous namespace | 235 } // anonymous namespace |
237 | 236 |
238 TEST_F(RenderbufferManagerTest, AddToSignature) { | 237 TEST_F(RenderbufferManagerTest, AddToSignature) { |
239 const GLuint kClient1Id = 1; | 238 const GLuint kClient1Id = 1; |
240 const GLuint kService1Id = 11; | 239 const GLuint kService1Id = 11; |
241 manager_->CreateRenderbuffer(kClient1Id, kService1Id); | 240 manager_->CreateRenderbuffer(kClient1Id, kService1Id); |
242 scoped_refptr<Renderbuffer> renderbuffer1( | 241 scoped_refptr<Renderbuffer> renderbuffer1( |
243 manager_->GetRenderbuffer(kClient1Id)); | 242 manager_->GetRenderbuffer(kClient1Id)); |
244 ASSERT_TRUE(renderbuffer1 != NULL); | 243 ASSERT_TRUE(renderbuffer1.get() != NULL); |
245 const GLsizei kSamples = 4; | 244 const GLsizei kSamples = 4; |
246 const GLenum kFormat = GL_RGBA4; | 245 const GLenum kFormat = GL_RGBA4; |
247 const GLsizei kWidth = 128; | 246 const GLsizei kWidth = 128; |
248 const GLsizei kHeight = 64; | 247 const GLsizei kHeight = 64; |
249 manager_->SetInfo(renderbuffer1, kSamples, kFormat, kWidth, kHeight); | 248 manager_->SetInfo(renderbuffer1.get(), kSamples, kFormat, kWidth, kHeight); |
250 std::string signature1; | 249 std::string signature1; |
251 std::string signature2; | 250 std::string signature2; |
252 renderbuffer1->AddToSignature(&signature1); | 251 renderbuffer1->AddToSignature(&signature1); |
253 | 252 |
254 std::set<std::string> string_set; | 253 std::set<std::string> string_set; |
255 EXPECT_FALSE(InSet(&string_set, signature1)); | 254 EXPECT_FALSE(InSet(&string_set, signature1)); |
256 | 255 |
257 // change things and see that the signatures change. | 256 // change things and see that the signatures change. |
258 manager_->SetInfo(renderbuffer1, kSamples + 1, kFormat, kWidth, kHeight); | 257 manager_->SetInfo( |
| 258 renderbuffer1.get(), kSamples + 1, kFormat, kWidth, kHeight); |
259 renderbuffer1->AddToSignature(&signature2); | 259 renderbuffer1->AddToSignature(&signature2); |
260 EXPECT_FALSE(InSet(&string_set, signature2)); | 260 EXPECT_FALSE(InSet(&string_set, signature2)); |
261 | 261 |
262 manager_->SetInfo(renderbuffer1, kSamples, kFormat + 1, kWidth, kHeight); | 262 manager_->SetInfo( |
| 263 renderbuffer1.get(), kSamples, kFormat + 1, kWidth, kHeight); |
263 signature2.clear(); | 264 signature2.clear(); |
264 renderbuffer1->AddToSignature(&signature2); | 265 renderbuffer1->AddToSignature(&signature2); |
265 EXPECT_FALSE(InSet(&string_set, signature2)); | 266 EXPECT_FALSE(InSet(&string_set, signature2)); |
266 | 267 |
267 manager_->SetInfo(renderbuffer1, kSamples, kFormat, kWidth + 1, kHeight); | 268 manager_->SetInfo( |
| 269 renderbuffer1.get(), kSamples, kFormat, kWidth + 1, kHeight); |
268 signature2.clear(); | 270 signature2.clear(); |
269 renderbuffer1->AddToSignature(&signature2); | 271 renderbuffer1->AddToSignature(&signature2); |
270 EXPECT_FALSE(InSet(&string_set, signature2)); | 272 EXPECT_FALSE(InSet(&string_set, signature2)); |
271 | 273 |
272 manager_->SetInfo(renderbuffer1, kSamples, kFormat, kWidth, kHeight + 1); | 274 manager_->SetInfo( |
| 275 renderbuffer1.get(), kSamples, kFormat, kWidth, kHeight + 1); |
273 signature2.clear(); | 276 signature2.clear(); |
274 renderbuffer1->AddToSignature(&signature2); | 277 renderbuffer1->AddToSignature(&signature2); |
275 EXPECT_FALSE(InSet(&string_set, signature2)); | 278 EXPECT_FALSE(InSet(&string_set, signature2)); |
276 | 279 |
277 // put it back to the same and it should be the same. | 280 // put it back to the same and it should be the same. |
278 manager_->SetInfo(renderbuffer1, kSamples, kFormat, kWidth, kHeight); | 281 manager_->SetInfo(renderbuffer1.get(), kSamples, kFormat, kWidth, kHeight); |
279 signature2.clear(); | 282 signature2.clear(); |
280 renderbuffer1->AddToSignature(&signature2); | 283 renderbuffer1->AddToSignature(&signature2); |
281 EXPECT_EQ(signature1, signature2); | 284 EXPECT_EQ(signature1, signature2); |
282 | 285 |
283 // Check the set was acutally getting different signatures. | 286 // Check the set was acutally getting different signatures. |
284 EXPECT_EQ(5u, string_set.size()); | 287 EXPECT_EQ(5u, string_set.size()); |
285 | 288 |
286 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) | 289 EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, ::testing::Pointee(kService1Id))) |
287 .Times(1) | 290 .Times(1) |
288 .RetiresOnSaturation(); | 291 .RetiresOnSaturation(); |
289 } | 292 } |
290 | 293 |
291 } // namespace gles2 | 294 } // namespace gles2 |
292 } // namespace gpu | 295 } // namespace gpu |
293 | 296 |
294 | 297 |
OLD | NEW |