| 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 |