Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Side by Side Diff: gpu/command_buffer/service/texture_manager_unittest.cc

Issue 14188053: gpu: Change Produce/ConsumeTexture to allow texture sharing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/texture_manager.h" 5 #include "gpu/command_buffer/service/texture_manager.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "gpu/command_buffer/service/error_state_mock.h" 8 #include "gpu/command_buffer/service/error_state_mock.h"
9 #include "gpu/command_buffer/service/feature_info.h" 9 #include "gpu/command_buffer/service/feature_info.h"
10 #include "gpu/command_buffer/service/framebuffer_manager.h" 10 #include "gpu/command_buffer/service/framebuffer_manager.h"
11 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" 11 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
12 #include "gpu/command_buffer/service/mailbox_manager.h"
12 #include "gpu/command_buffer/service/memory_tracking.h" 13 #include "gpu/command_buffer/service/memory_tracking.h"
13 #include "gpu/command_buffer/service/mocks.h" 14 #include "gpu/command_buffer/service/mocks.h"
14 #include "gpu/command_buffer/service/test_helper.h" 15 #include "gpu/command_buffer/service/test_helper.h"
15 #include "gpu/command_buffer/service/texture_definition.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/gl/gl_mock.h" 17 #include "ui/gl/gl_mock.h"
18 18
19 using ::testing::AtLeast; 19 using ::testing::AtLeast;
20 using ::testing::Pointee; 20 using ::testing::Pointee;
21 using ::testing::Return; 21 using ::testing::Return;
22 using ::testing::SetArgumentPointee; 22 using ::testing::SetArgumentPointee;
23 using ::testing::StrictMock; 23 using ::testing::StrictMock;
24 using ::testing::_; 24 using ::testing::_;
25 25
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 TEST_F(TextureManagerTest, Basic) { 102 TEST_F(TextureManagerTest, Basic) {
103 const GLuint kClient1Id = 1; 103 const GLuint kClient1Id = 1;
104 const GLuint kService1Id = 11; 104 const GLuint kService1Id = 11;
105 const GLuint kClient2Id = 2; 105 const GLuint kClient2Id = 2;
106 EXPECT_FALSE(manager_->HaveUnrenderableTextures()); 106 EXPECT_FALSE(manager_->HaveUnrenderableTextures());
107 EXPECT_FALSE(manager_->HaveUnsafeTextures()); 107 EXPECT_FALSE(manager_->HaveUnsafeTextures());
108 EXPECT_FALSE(manager_->HaveUnclearedMips()); 108 EXPECT_FALSE(manager_->HaveUnclearedMips());
109 // Check we can create texture. 109 // Check we can create texture.
110 manager_->CreateTexture(kClient1Id, kService1Id); 110 manager_->CreateTexture(kClient1Id, kService1Id);
111 // Check texture got created. 111 // Check texture got created.
112 TextureRef* texture = manager_->GetTexture(kClient1Id); 112 scoped_refptr<TextureRef> texture = manager_->GetTexture(kClient1Id);
113 ASSERT_TRUE(texture != NULL); 113 ASSERT_TRUE(texture != NULL);
114 EXPECT_EQ(kService1Id, texture->service_id()); 114 EXPECT_EQ(kService1Id, texture->service_id());
115 GLuint client_id = 0; 115 EXPECT_EQ(kClient1Id, texture->client_id());
116 EXPECT_TRUE(manager_->GetClientId(texture->service_id(), &client_id)); 116 EXPECT_EQ(texture->texture(), manager_->GetTextureForServiceId(
117 EXPECT_EQ(kClient1Id, client_id); 117 texture->service_id()));
118 // Check we get nothing for a non-existent texture. 118 // Check we get nothing for a non-existent texture.
119 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL); 119 EXPECT_TRUE(manager_->GetTexture(kClient2Id) == NULL);
120 // Check trying to a remove non-existent textures does not crash. 120 // Check trying to a remove non-existent textures does not crash.
121 manager_->RemoveTexture(kClient2Id); 121 manager_->RemoveTexture(kClient2Id);
122 // Check that it gets deleted when the last reference is released. 122 // Check that it gets deleted when the last reference is released.
123 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id))) 123 EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id)))
124 .Times(1) 124 .Times(1)
125 .RetiresOnSaturation(); 125 .RetiresOnSaturation();
126 // Check we can't get the texture after we remove it. 126 // Check we can't get the texture after we remove it.
127 manager_->RemoveTexture(kClient1Id); 127 manager_->RemoveTexture(kClient1Id);
128 EXPECT_TRUE(manager_->GetTexture(kClient1Id) == NULL); 128 EXPECT_TRUE(manager_->GetTexture(kClient1Id) == NULL);
129 EXPECT_EQ(0u, texture->client_id());
129 } 130 }
130 131
131 TEST_F(TextureManagerTest, SetParameter) { 132 TEST_F(TextureManagerTest, SetParameter) {
132 const GLuint kClient1Id = 1; 133 const GLuint kClient1Id = 1;
133 const GLuint kService1Id = 11; 134 const GLuint kService1Id = 11;
134 // Check we can create texture. 135 // Check we can create texture.
135 manager_->CreateTexture(kClient1Id, kService1Id); 136 manager_->CreateTexture(kClient1Id, kService1Id);
136 // Check texture got created. 137 // Check texture got created.
137 TextureRef* texture_ref = manager_->GetTexture(kClient1Id); 138 TextureRef* texture_ref = manager_->GetTexture(kClient1Id);
138 ASSERT_TRUE(texture_ref != NULL); 139 ASSERT_TRUE(texture_ref != NULL);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 kMaxTextureSize, kMaxCubeMapTextureSize)); 387 kMaxTextureSize, kMaxCubeMapTextureSize));
387 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>()); 388 decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>());
388 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>()); 389 error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
389 manager_->CreateTexture(kClient1Id, kService1Id); 390 manager_->CreateTexture(kClient1Id, kService1Id);
390 texture_ref_ = manager_->GetTexture(kClient1Id); 391 texture_ref_ = manager_->GetTexture(kClient1Id);
391 ASSERT_TRUE(texture_ref_.get() != NULL); 392 ASSERT_TRUE(texture_ref_.get() != NULL);
392 } 393 }
393 394
394 virtual void TearDown() { 395 virtual void TearDown() {
395 if (texture_ref_.get()) { 396 if (texture_ref_.get()) {
396 GLuint client_id = 0;
397 // If it's not in the manager then setting texture_ref_ to NULL will 397 // If it's not in the manager then setting texture_ref_ to NULL will
398 // delete the texture. 398 // delete the texture.
399 if (!manager_->GetClientId(texture_ref_->service_id(), &client_id)) { 399 if (!texture_ref_->client_id()) {
400 // Check that it gets deleted when the last reference is released. 400 // Check that it gets deleted when the last reference is released.
401 EXPECT_CALL(*gl_, 401 EXPECT_CALL(*gl_,
402 DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id()))) 402 DeleteTextures(1, ::testing::Pointee(texture_ref_->service_id())))
403 .Times(1) 403 .Times(1)
404 .RetiresOnSaturation(); 404 .RetiresOnSaturation();
405 } 405 }
406 texture_ref_ = NULL; 406 texture_ref_ = NULL;
407 } 407 }
408 manager_->Destroy(false); 408 manager_->Destroy(false);
409 manager_.reset(); 409 manager_.reset();
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 // Check putting it back genenerates the same signature 1319 // Check putting it back genenerates the same signature
1320 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR); 1320 SetParameter(texture_ref_, GL_TEXTURE_WRAP_T, GL_REPEAT, GL_NO_ERROR);
1321 signature2.clear(); 1321 signature2.clear();
1322 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2); 1322 manager_->AddToSignature(texture_ref_, GL_TEXTURE_2D, 1, &signature2);
1323 EXPECT_EQ(signature1, signature2); 1323 EXPECT_EQ(signature1, signature2);
1324 1324
1325 // Check the set was acutally getting different signatures. 1325 // Check the set was acutally getting different signatures.
1326 EXPECT_EQ(11u, string_set.size()); 1326 EXPECT_EQ(11u, string_set.size());
1327 } 1327 }
1328 1328
1329 class SaveRestoreTextureTest : public TextureTest { 1329 class ProduceConsumeTextureTest : public TextureTest {
1330 public: 1330 public:
1331 virtual void SetUp() { 1331 virtual void SetUp() {
1332 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external"); 1332 TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external");
1333 manager_->CreateTexture(kClient2Id, kService2Id); 1333 manager_->CreateTexture(kClient2Id, kService2Id);
1334 texture2_ = manager_->GetTexture(kClient2Id); 1334 texture2_ = manager_->GetTexture(kClient2Id);
1335 1335
1336 EXPECT_CALL(*decoder_.get(), GetErrorState()) 1336 EXPECT_CALL(*decoder_.get(), GetErrorState())
1337 .WillRepeatedly(Return(error_state_.get())); 1337 .WillRepeatedly(Return(error_state_.get()));
1338 } 1338 }
1339 1339
1340 virtual void TearDown() { 1340 virtual void TearDown() {
1341 if (texture2_.get()) { 1341 if (texture2_.get()) {
1342 GLuint client_id = 0;
1343 // If it's not in the manager then setting texture2_ to NULL will 1342 // If it's not in the manager then setting texture2_ to NULL will
1344 // delete the texture. 1343 // delete the texture.
1345 if (!manager_->GetClientId(texture2_->service_id(), &client_id)) { 1344 if (!texture2_->client_id()) {
1346 // Check that it gets deleted when the last reference is released. 1345 // Check that it gets deleted when the last reference is released.
1347 EXPECT_CALL( 1346 EXPECT_CALL(
1348 *gl_, 1347 *gl_,
1349 DeleteTextures(1, ::testing::Pointee(texture2_->service_id()))) 1348 DeleteTextures(1, ::testing::Pointee(texture2_->service_id())))
1350 .Times(1).RetiresOnSaturation(); 1349 .Times(1).RetiresOnSaturation();
1351 } 1350 }
1352 texture2_ = NULL; 1351 texture2_ = NULL;
1353 } 1352 }
1354 TextureTest::TearDown(); 1353 TextureTest::TearDown();
1355 } 1354 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 LevelInfo info; 1422 LevelInfo info;
1424 info.target = target; 1423 info.target = target;
1425 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width, 1424 EXPECT_TRUE(texture->GetLevelSize(target, level, &info.width,
1426 &info.height)); 1425 &info.height));
1427 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type, 1426 EXPECT_TRUE(texture->GetLevelType(target, level, &info.type,
1428 &info.format)); 1427 &info.format));
1429 info.cleared = texture->IsLevelCleared(target, level); 1428 info.cleared = texture->IsLevelCleared(target, level);
1430 return info; 1429 return info;
1431 } 1430 }
1432 1431
1433 TextureDefinition* Save(TextureRef* texture_ref) { 1432 Texture* Produce(TextureRef* texture_ref) {
1434 EXPECT_CALL(*gl_, GenTextures(_, _)) 1433 Texture* texture = manager_->Produce(texture_ref);
1435 .WillOnce(SetArgumentPointee<1>(kEmptyTextureServiceId)); 1434 EXPECT_TRUE(texture != NULL);
1436 TextureDefinition* definition = manager_->Save(texture_ref); 1435 return texture;
1437 EXPECT_TRUE(definition != NULL);
1438 return definition;
1439 } 1436 }
1440 1437
1441 void Restore(TextureRef* texture_ref, TextureDefinition* definition) { 1438 void Consume(GLuint client_id, Texture* texture) {
1442 EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(texture_ref->service_id()))) 1439 EXPECT_TRUE(manager_->Consume(client_id, texture));
1443 .Times(1).RetiresOnSaturation();
1444 EXPECT_CALL(*gl_,
1445 BindTexture(definition->target(), definition->service_id()))
1446 .Times(1).RetiresOnSaturation();
1447 EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(AtLeast(1));
1448
1449 EXPECT_TRUE(manager_->Restore("TextureTest", decoder_.get(),
1450 texture_ref, definition));
1451 } 1440 }
1452 1441
1453 scoped_refptr<TextureRef> texture2_; 1442 scoped_refptr<TextureRef> texture2_;
1454 1443
1455 private: 1444 private:
1456 static const GLuint kEmptyTextureServiceId;
1457 static const GLuint kClient2Id; 1445 static const GLuint kClient2Id;
1458 static const GLuint kService2Id; 1446 static const GLuint kService2Id;
1459 }; 1447 };
1460 1448
1461 const GLuint SaveRestoreTextureTest::kClient2Id = 2; 1449 const GLuint ProduceConsumeTextureTest::kClient2Id = 2;
1462 const GLuint SaveRestoreTextureTest::kService2Id = 12; 1450 const GLuint ProduceConsumeTextureTest::kService2Id = 12;
1463 const GLuint SaveRestoreTextureTest::kEmptyTextureServiceId = 13;
1464 1451
1465 TEST_F(SaveRestoreTextureTest, SaveRestore2D) { 1452 TEST_F(ProduceConsumeTextureTest, ProduceConsume2D) {
1466 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D); 1453 manager_->SetTarget(texture_ref_, GL_TEXTURE_2D);
1467 Texture* texture = texture_ref_->texture(); 1454 Texture* texture = texture_ref_->texture();
1468 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target()); 1455 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_2D), texture->target());
1469 LevelInfo level0( 1456 LevelInfo level0(
1470 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true); 1457 GL_TEXTURE_2D, GL_RGBA, 4, 4, 1, 0, GL_UNSIGNED_BYTE, true);
1471 SetLevelInfo(texture_ref_, 0, level0); 1458 SetLevelInfo(texture_ref_, 0, level0);
1472 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_)); 1459 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture_ref_));
1473 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); 1460 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
1474 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1); 1461 LevelInfo level1 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 1);
1475 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2); 1462 LevelInfo level2 = GetLevelInfo(texture_ref_.get(), GL_TEXTURE_2D, 2);
1476 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); 1463 Texture* produced_texture = Produce(texture_ref_);
1477 const TextureDefinition::LevelInfos& infos = definition->level_infos(); 1464 EXPECT_EQ(produced_texture, texture);
1478 EXPECT_EQ(1U, infos.size());
1479 EXPECT_EQ(3U, infos[0].size());
1480 1465
1481 // Make this texture bigger with more levels, and make sure they get 1466 // Make this texture bigger with more levels, and make sure they get
1482 // clobbered correctly during Restore(). 1467 // clobbered correctly during Consume().
1483 manager_->SetTarget(texture2_, GL_TEXTURE_2D); 1468 manager_->SetTarget(texture2_, GL_TEXTURE_2D);
1484 SetLevelInfo( 1469 SetLevelInfo(
1485 texture2_, 1470 texture2_,
1486 0, 1471 0,
1487 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false)); 1472 LevelInfo(GL_TEXTURE_2D, GL_RGBA, 16, 16, 1, 0, GL_UNSIGNED_BYTE, false));
1488 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_)); 1473 EXPECT_TRUE(manager_->MarkMipmapsGenerated(texture2_));
1489 texture = texture2_->texture(); 1474 texture = texture2_->texture();
1490 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); 1475 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
1491 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size()); 1476 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U, texture->estimated_size());
1492 Restore(texture2_, definition.release()); 1477
1493 EXPECT_EQ(level0, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 0)); 1478 GLuint client_id = texture2_->client_id();
1494 EXPECT_EQ(level1, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 1)); 1479 manager_->RemoveTexture(client_id);
1495 EXPECT_EQ(level2, GetLevelInfo(texture2_.get(), GL_TEXTURE_2D, 2)); 1480 Consume(client_id, produced_texture);
1481 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id);
1482 EXPECT_EQ(produced_texture, restored_texture->texture());
1483 EXPECT_EQ(level0, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 0));
1484 EXPECT_EQ(level1, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 1));
1485 EXPECT_EQ(level2, GetLevelInfo(restored_texture.get(), GL_TEXTURE_2D, 2));
1486 texture = restored_texture->texture();
1496 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size()); 1487 EXPECT_EQ(64U + 16U + 4U, texture->estimated_size());
1497 GLint w, h; 1488 GLint w, h;
1498 EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h)); 1489 EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 3, &w, &h));
1499 EXPECT_EQ(0, w); 1490
1500 EXPECT_EQ(0, h); 1491 // However the old texture ref still exists if it was referenced somewhere.
1492 EXPECT_EQ(1024U + 256U + 64U + 16U + 4U,
1493 texture2_->texture()->estimated_size());
1501 } 1494 }
1502 1495
1503 TEST_F(SaveRestoreTextureTest, SaveRestoreClearRectangle) { 1496 TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) {
1504 manager_->SetTarget(texture_ref_, GL_TEXTURE_RECTANGLE_ARB); 1497 manager_->SetTarget(texture_ref_, GL_TEXTURE_RECTANGLE_ARB);
1505 Texture* texture = texture_ref_->texture(); 1498 Texture* texture = texture_ref_->texture();
1506 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target()); 1499 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), texture->target());
1507 LevelInfo level0( 1500 LevelInfo level0(
1508 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false); 1501 GL_TEXTURE_RECTANGLE_ARB, GL_RGBA, 1, 1, 1, 0, GL_UNSIGNED_BYTE, false);
1509 SetLevelInfo(texture_ref_, 0, level0); 1502 SetLevelInfo(texture_ref_, 0, level0);
1510 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); 1503 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
1511 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); 1504 Texture* produced_texture = Produce(texture_ref_);
1512 const TextureDefinition::LevelInfos& infos = definition->level_infos(); 1505 EXPECT_EQ(produced_texture, texture);
1513 EXPECT_EQ(1U, infos.size()); 1506 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB),
1514 EXPECT_EQ(1U, infos[0].size()); 1507 produced_texture->target());
1515 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_RECTANGLE_ARB), infos[0][0].target); 1508
1516 manager_->SetTarget(texture2_, GL_TEXTURE_RECTANGLE_ARB); 1509 GLuint client_id = texture2_->client_id();
1517 Restore(texture2_, definition.release()); 1510 manager_->RemoveTexture(client_id);
1511 Consume(client_id, produced_texture);
1512 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id);
1513 EXPECT_EQ(produced_texture, restored_texture->texture());
1518 1514
1519 // See if we can clear the previously uncleared level now. 1515 // See if we can clear the previously uncleared level now.
1520 EXPECT_EQ(level0, GetLevelInfo(texture2_.get(), GL_TEXTURE_RECTANGLE_ARB, 0)); 1516 EXPECT_EQ(level0,
1517 GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0));
1521 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _)) 1518 EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _))
1522 .WillRepeatedly(Return(true)); 1519 .WillRepeatedly(Return(true));
1523 EXPECT_TRUE(manager_->ClearTextureLevel( 1520 EXPECT_TRUE(manager_->ClearTextureLevel(
1524 decoder_.get(), texture2_, GL_TEXTURE_RECTANGLE_ARB, 0)); 1521 decoder_.get(), restored_texture, GL_TEXTURE_RECTANGLE_ARB, 0));
1525 } 1522 }
1526 1523
1527 TEST_F(SaveRestoreTextureTest, SaveRestoreStreamTexture) { 1524 TEST_F(ProduceConsumeTextureTest, ProduceConsumeStreamTexture) {
1528 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES); 1525 manager_->SetTarget(texture_ref_, GL_TEXTURE_EXTERNAL_OES);
1529 Texture* texture = texture_ref_->texture(); 1526 Texture* texture = texture_ref_->texture();
1530 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target()); 1527 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target());
1531 manager_->SetStreamTexture(texture_ref_, true); 1528 manager_->SetStreamTexture(texture_ref_, true);
1532 GLuint service_id = texture->service_id(); 1529 GLuint service_id = texture->service_id();
1533 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); 1530 Texture* produced_texture = Produce(texture_ref_);
1534 EXPECT_FALSE(texture->IsStreamTexture()); 1531 EXPECT_TRUE(texture->IsStreamTexture());
1535 manager_->SetTarget(texture2_, GL_TEXTURE_EXTERNAL_OES); 1532
1536 Restore(texture2_, definition.release()); 1533 GLuint client_id = texture2_->client_id();
1537 EXPECT_TRUE(texture2_->texture()->IsStreamTexture()); 1534 manager_->RemoveTexture(client_id);
1538 EXPECT_TRUE(texture2_->texture()->IsImmutable()); 1535 Consume(client_id, produced_texture);
1539 EXPECT_EQ(service_id, texture2_->service_id()); 1536 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id);
1537 EXPECT_EQ(produced_texture, restored_texture->texture());
1538 EXPECT_TRUE(restored_texture->texture()->IsStreamTexture());
1539 EXPECT_TRUE(restored_texture->texture()->IsImmutable());
1540 EXPECT_EQ(service_id, restored_texture->service_id());
1540 } 1541 }
1541 1542
1542 TEST_F(SaveRestoreTextureTest, SaveRestoreCube) { 1543 TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) {
1543 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP); 1544 manager_->SetTarget(texture_ref_, GL_TEXTURE_CUBE_MAP);
1544 Texture* texture = texture_ref_->texture(); 1545 Texture* texture = texture_ref_->texture();
1545 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target()); 1546 EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_CUBE_MAP), texture->target());
1546 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 1547 LevelInfo face0(GL_TEXTURE_CUBE_MAP_POSITIVE_X,
1547 GL_RGBA, 1548 GL_RGBA,
1548 1, 1549 1,
1549 1, 1550 1,
1550 1, 1551 1,
1551 0, 1552 0,
1552 GL_UNSIGNED_BYTE, 1553 GL_UNSIGNED_BYTE,
1553 true); 1554 true);
1554 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 1555 LevelInfo face5(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
1555 GL_RGBA, 1556 GL_RGBA,
1556 3, 1557 3,
1557 3, 1558 3,
1558 1, 1559 1,
1559 0, 1560 0,
1560 GL_UNSIGNED_BYTE, 1561 GL_UNSIGNED_BYTE,
1561 true); 1562 true);
1562 SetLevelInfo(texture_ref_, 0, face0); 1563 SetLevelInfo(texture_ref_, 0, face0);
1563 SetLevelInfo(texture_ref_, 0, face5); 1564 SetLevelInfo(texture_ref_, 0, face5);
1564 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture)); 1565 EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
1565 scoped_ptr<TextureDefinition> definition(Save(texture_ref_)); 1566 Texture* produced_texture = Produce(texture_ref_);
1566 const TextureDefinition::LevelInfos& infos = definition->level_infos(); 1567 EXPECT_EQ(produced_texture, texture);
1567 EXPECT_EQ(6U, infos.size()); 1568
1568 EXPECT_EQ(1U, infos[0].size()); 1569 GLuint client_id = texture2_->client_id();
1569 manager_->SetTarget(texture2_, GL_TEXTURE_CUBE_MAP); 1570 manager_->RemoveTexture(client_id);
1570 Restore(texture2_, definition.release()); 1571 Consume(client_id, produced_texture);
1572 scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id);
1573 EXPECT_EQ(produced_texture, restored_texture->texture());
1571 EXPECT_EQ(face0, 1574 EXPECT_EQ(face0,
1572 GetLevelInfo(texture2_.get(), GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0)); 1575 GetLevelInfo(restored_texture, GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0));
1573 EXPECT_EQ(face5, 1576 EXPECT_EQ(face5,
1574 GetLevelInfo(texture2_.get(), GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0)); 1577 GetLevelInfo(restored_texture, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0));
1575 } 1578 }
1576 1579
1577 class CountingMemoryTracker : public MemoryTracker { 1580 class CountingMemoryTracker : public MemoryTracker {
1578 public: 1581 public:
1579 CountingMemoryTracker() { 1582 CountingMemoryTracker() {
1580 current_size_[0] = 0; 1583 current_size_[0] = 0;
1581 current_size_[1] = 0; 1584 current_size_[1] = 0;
1582 } 1585 }
1583 1586
1584 virtual void TrackMemoryAllocatedChange(size_t old_size, 1587 virtual void TrackMemoryAllocatedChange(size_t old_size,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 scoped_ptr< ::gfx::MockGLInterface > gl_; 1649 scoped_ptr< ::gfx::MockGLInterface > gl_;
1647 scoped_refptr<FeatureInfo> feature_info_; 1650 scoped_refptr<FeatureInfo> feature_info_;
1648 scoped_refptr<CountingMemoryTracker> memory_tracker1_; 1651 scoped_refptr<CountingMemoryTracker> memory_tracker1_;
1649 scoped_ptr<TextureManager> texture_manager1_; 1652 scoped_ptr<TextureManager> texture_manager1_;
1650 scoped_refptr<CountingMemoryTracker> memory_tracker2_; 1653 scoped_refptr<CountingMemoryTracker> memory_tracker2_;
1651 scoped_ptr<TextureManager> texture_manager2_; 1654 scoped_ptr<TextureManager> texture_manager2_;
1652 }; 1655 };
1653 1656
1654 TEST_F(SharedTextureTest, DeleteTextures) { 1657 TEST_F(SharedTextureTest, DeleteTextures) {
1655 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); 1658 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
1656 scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(), 1659 scoped_refptr<TextureRef> ref2 =
1657 ref1->texture()); 1660 texture_manager2_->Consume(20, ref1->texture());
1658 EXPECT_CALL(*gl_, DeleteTextures(1, _)) 1661 EXPECT_CALL(*gl_, DeleteTextures(1, _))
1659 .Times(0); 1662 .Times(0);
1660 ref1 = NULL; 1663 ref1 = NULL;
1661 texture_manager1_->RemoveTexture(10); 1664 texture_manager1_->RemoveTexture(10);
1662 testing::Mock::VerifyAndClearExpectations(gl_.get()); 1665 testing::Mock::VerifyAndClearExpectations(gl_.get());
1663 1666
1664 EXPECT_CALL(*gl_, DeleteTextures(1, _)) 1667 EXPECT_CALL(*gl_, DeleteTextures(1, _))
1665 .Times(1) 1668 .Times(1)
1666 .RetiresOnSaturation(); 1669 .RetiresOnSaturation();
1667 ref2 = NULL; 1670 ref2 = NULL;
1671 texture_manager2_->RemoveTexture(20);
1668 testing::Mock::VerifyAndClearExpectations(gl_.get()); 1672 testing::Mock::VerifyAndClearExpectations(gl_.get());
1669 } 1673 }
1670 1674
1671 TEST_F(SharedTextureTest, TextureSafetyAccounting) { 1675 TEST_F(SharedTextureTest, TextureSafetyAccounting) {
1672 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); 1676 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures());
1673 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); 1677 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
1674 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); 1678 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
1675 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); 1679 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures());
1676 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); 1680 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures());
1677 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); 1681 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
1678 1682
1679 // Newly created texture is unrenderable. 1683 // Newly created texture is renderable.
1680 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); 1684 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
1681 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures()); 1685 EXPECT_FALSE(texture_manager1_->HaveUnrenderableTextures());
1682 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); 1686 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
1683 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); 1687 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
1684 1688
1685 // Associate new texture ref to other texture manager, should account for it 1689 // Associate new texture ref to other texture manager, should account for it
1686 // too. 1690 // too.
1687 scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(), 1691 scoped_refptr<TextureRef> ref2 =
1688 ref1->texture()); 1692 texture_manager2_->Consume(20, ref1->texture());
1689 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures()); 1693 EXPECT_FALSE(texture_manager2_->HaveUnrenderableTextures());
1690 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); 1694 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures());
1691 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); 1695 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
1692 1696
1693 // Make texture renderable but uncleared on one texture manager, should affect 1697 // Make texture renderable but uncleared on one texture manager, should affect
1694 // other one. 1698 // other one.
1695 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); 1699 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D);
1696 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures()); 1700 EXPECT_TRUE(texture_manager1_->HaveUnrenderableTextures());
1697 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); 1701 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
1698 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); 1702 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
(...skipping 14 matching lines...) Expand all
1713 texture_manager1_->SetLevelCleared(ref1, GL_TEXTURE_2D, 0, true); 1717 texture_manager1_->SetLevelCleared(ref1, GL_TEXTURE_2D, 0, true);
1714 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures()); 1718 EXPECT_FALSE(texture_manager1_->HaveUnsafeTextures());
1715 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips()); 1719 EXPECT_FALSE(texture_manager1_->HaveUnclearedMips());
1716 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures()); 1720 EXPECT_FALSE(texture_manager2_->HaveUnsafeTextures());
1717 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips()); 1721 EXPECT_FALSE(texture_manager2_->HaveUnclearedMips());
1718 1722
1719 EXPECT_CALL(*gl_, DeleteTextures(1, _)) 1723 EXPECT_CALL(*gl_, DeleteTextures(1, _))
1720 .Times(1) 1724 .Times(1)
1721 .RetiresOnSaturation(); 1725 .RetiresOnSaturation();
1722 texture_manager1_->RemoveTexture(10); 1726 texture_manager1_->RemoveTexture(10);
1727 texture_manager2_->RemoveTexture(20);
1723 } 1728 }
1724 1729
1725 TEST_F(SharedTextureTest, FBOCompletenessCheck) { 1730 TEST_F(SharedTextureTest, FBOCompletenessCheck) {
1726 const GLenum kCompleteValue = GL_FRAMEBUFFER_COMPLETE; 1731 const GLenum kCompleteValue = GL_FRAMEBUFFER_COMPLETE;
1727 FramebufferManager framebuffer_manager1(1, 1); 1732 FramebufferManager framebuffer_manager1(1, 1);
1728 texture_manager1_->set_framebuffer_manager(&framebuffer_manager1); 1733 texture_manager1_->set_framebuffer_manager(&framebuffer_manager1);
1729 FramebufferManager framebuffer_manager2(1, 1); 1734 FramebufferManager framebuffer_manager2(1, 1);
1730 texture_manager2_->set_framebuffer_manager(&framebuffer_manager2); 1735 texture_manager2_->set_framebuffer_manager(&framebuffer_manager2);
1731 1736
1732 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); 1737 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
1733 framebuffer_manager1.CreateFramebuffer(10, 10); 1738 framebuffer_manager1.CreateFramebuffer(10, 10);
1734 scoped_refptr<Framebuffer> framebuffer1 = 1739 scoped_refptr<Framebuffer> framebuffer1 =
1735 framebuffer_manager1.GetFramebuffer(10); 1740 framebuffer_manager1.GetFramebuffer(10);
1736 framebuffer1->AttachTexture(GL_COLOR_ATTACHMENT0, ref1, GL_TEXTURE_2D, 0); 1741 framebuffer1->AttachTexture(GL_COLOR_ATTACHMENT0, ref1, GL_TEXTURE_2D, 0);
1737 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1)); 1742 EXPECT_FALSE(framebuffer_manager1.IsComplete(framebuffer1));
1738 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete()); 1743 EXPECT_NE(kCompleteValue, framebuffer1->IsPossiblyComplete());
1739 1744
1740 // Make FBO complete in manager 1. 1745 // Make FBO complete in manager 1.
1741 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); 1746 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D);
1742 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, 1747 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0,
1743 GL_RGBA, GL_UNSIGNED_BYTE, true); 1748 GL_RGBA, GL_UNSIGNED_BYTE, true);
1744 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete()); 1749 EXPECT_EQ(kCompleteValue, framebuffer1->IsPossiblyComplete());
1745 framebuffer_manager1.MarkAsComplete(framebuffer1); 1750 framebuffer_manager1.MarkAsComplete(framebuffer1);
1746 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1)); 1751 EXPECT_TRUE(framebuffer_manager1.IsComplete(framebuffer1));
1747 1752
1748 // Share texture with manager 2. 1753 // Share texture with manager 2.
1749 scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(), 1754 scoped_refptr<TextureRef> ref2 =
1750 ref1->texture()); 1755 texture_manager2_->Consume(20, ref1->texture());
1751 framebuffer_manager2.CreateFramebuffer(20, 20); 1756 framebuffer_manager2.CreateFramebuffer(20, 20);
1752 scoped_refptr<Framebuffer> framebuffer2 = 1757 scoped_refptr<Framebuffer> framebuffer2 =
1753 framebuffer_manager2.GetFramebuffer(20); 1758 framebuffer_manager2.GetFramebuffer(20);
1754 framebuffer2->AttachTexture(GL_COLOR_ATTACHMENT0, ref2, GL_TEXTURE_2D, 0); 1759 framebuffer2->AttachTexture(GL_COLOR_ATTACHMENT0, ref2, GL_TEXTURE_2D, 0);
1755 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2)); 1760 EXPECT_FALSE(framebuffer_manager2.IsComplete(framebuffer2));
1756 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete()); 1761 EXPECT_EQ(kCompleteValue, framebuffer2->IsPossiblyComplete());
1757 framebuffer_manager2.MarkAsComplete(framebuffer2); 1762 framebuffer_manager2.MarkAsComplete(framebuffer2);
1758 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2)); 1763 EXPECT_TRUE(framebuffer_manager2.IsComplete(framebuffer2));
1759 1764
1760 // Change level for texture, both FBOs should be marked incomplete 1765 // Change level for texture, both FBOs should be marked incomplete
(...skipping 10 matching lines...) Expand all
1771 1776
1772 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)) 1777 EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _))
1773 .Times(2) 1778 .Times(2)
1774 .RetiresOnSaturation(); 1779 .RetiresOnSaturation();
1775 framebuffer_manager1.RemoveFramebuffer(10); 1780 framebuffer_manager1.RemoveFramebuffer(10);
1776 framebuffer_manager2.RemoveFramebuffer(20); 1781 framebuffer_manager2.RemoveFramebuffer(20);
1777 EXPECT_CALL(*gl_, DeleteTextures(1, _)) 1782 EXPECT_CALL(*gl_, DeleteTextures(1, _))
1778 .Times(1) 1783 .Times(1)
1779 .RetiresOnSaturation(); 1784 .RetiresOnSaturation();
1780 texture_manager1_->RemoveTexture(10); 1785 texture_manager1_->RemoveTexture(10);
1786 texture_manager2_->RemoveTexture(20);
1781 } 1787 }
1782 1788
1783 TEST_F(SharedTextureTest, Memory) { 1789 TEST_F(SharedTextureTest, Memory) {
1784 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged); 1790 size_t initial_memory1 = memory_tracker1_->GetSize(MemoryTracker::kUnmanaged);
1785 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged); 1791 size_t initial_memory2 = memory_tracker2_->GetSize(MemoryTracker::kUnmanaged);
1786 1792
1787 // Newly created texture is unrenderable. 1793 // Newly created texture is unrenderable.
1788 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10); 1794 scoped_refptr<TextureRef> ref1 = texture_manager1_->CreateTexture(10, 10);
1789 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D); 1795 texture_manager1_->SetTarget(ref1, GL_TEXTURE_2D);
1790 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 10, 10, 1, 0, 1796 texture_manager1_->SetLevelInfo(ref1, GL_TEXTURE_2D, 0, GL_RGBA, 10, 10, 1, 0,
1791 GL_RGBA, GL_UNSIGNED_BYTE, false); 1797 GL_RGBA, GL_UNSIGNED_BYTE, false);
1792 1798
1793 EXPECT_LT(0u, ref1->texture()->estimated_size()); 1799 EXPECT_LT(0u, ref1->texture()->estimated_size());
1794 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), 1800 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(),
1795 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); 1801 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged));
1796 1802
1797 // Associate new texture ref to other texture manager, it doesn't account for 1803 // Associate new texture ref to other texture manager, it doesn't account for
1798 // the texture memory, the first memory tracker still has it. 1804 // the texture memory, the first memory tracker still has it.
1799 scoped_refptr<TextureRef> ref2 = new TextureRef(texture_manager2_.get(), 1805 scoped_refptr<TextureRef> ref2 =
1800 ref1->texture()); 1806 texture_manager2_->Consume(20, ref1->texture());
1801 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(), 1807 EXPECT_EQ(initial_memory1 + ref1->texture()->estimated_size(),
1802 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); 1808 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged));
1803 EXPECT_EQ(initial_memory2, 1809 EXPECT_EQ(initial_memory2,
1804 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); 1810 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged));
1805 1811
1806 // Delete the texture, memory should go to the remaining tracker. 1812 // Delete the texture, memory should go to the remaining tracker.
1807 texture_manager1_->RemoveTexture(10); 1813 texture_manager1_->RemoveTexture(10);
1808 ref1 = NULL; 1814 ref1 = NULL;
1809 EXPECT_EQ(initial_memory1, 1815 EXPECT_EQ(initial_memory1,
1810 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged)); 1816 memory_tracker1_->GetSize(MemoryTracker::kUnmanaged));
1811 EXPECT_EQ(initial_memory2 + ref2->texture()->estimated_size(), 1817 EXPECT_EQ(initial_memory2 + ref2->texture()->estimated_size(),
1812 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); 1818 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged));
1813 1819
1814 EXPECT_CALL(*gl_, DeleteTextures(1, _)) 1820 EXPECT_CALL(*gl_, DeleteTextures(1, _))
1815 .Times(1) 1821 .Times(1)
1816 .RetiresOnSaturation(); 1822 .RetiresOnSaturation();
1817 ref2 = NULL; 1823 ref2 = NULL;
1824 texture_manager2_->RemoveTexture(20);
1818 EXPECT_EQ(initial_memory2, 1825 EXPECT_EQ(initial_memory2,
1819 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged)); 1826 memory_tracker2_->GetSize(MemoryTracker::kUnmanaged));
1820 } 1827 }
1821 1828
1822 } // namespace gles2 1829 } // namespace gles2
1823 } // namespace gpu 1830 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/texture_manager.cc ('k') | gpu/command_buffer/tests/gl_texture_mailbox_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698