OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/resources/resource_provider.h" | 5 #include "cc/resources/resource_provider.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 ResourceProvider* resource_provider, | 490 ResourceProvider* resource_provider, |
491 ResourceProviderContext* context) { | 491 ResourceProviderContext* context) { |
492 DCHECK_EQ(expected_default_type, resource_provider->default_resource_type()); | 492 DCHECK_EQ(expected_default_type, resource_provider->default_resource_type()); |
493 | 493 |
494 gfx::Size size(1, 1); | 494 gfx::Size size(1, 1); |
495 ResourceFormat format = RGBA_8888; | 495 ResourceFormat format = RGBA_8888; |
496 size_t pixel_size = TextureSizeBytes(size, format); | 496 size_t pixel_size = TextureSizeBytes(size, format); |
497 ASSERT_EQ(4U, pixel_size); | 497 ASSERT_EQ(4U, pixel_size); |
498 | 498 |
499 ResourceProvider::ResourceId id = resource_provider->CreateResource( | 499 ResourceProvider::ResourceId id = resource_provider->CreateResource( |
500 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 500 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
501 EXPECT_EQ(1, static_cast<int>(resource_provider->num_resources())); | 501 EXPECT_EQ(1, static_cast<int>(resource_provider->num_resources())); |
502 if (expected_default_type == ResourceProvider::GLTexture) | 502 if (expected_default_type == ResourceProvider::GLTexture) |
503 EXPECT_EQ(0u, context->NumTextures()); | 503 EXPECT_EQ(0u, context->NumTextures()); |
504 | 504 |
505 uint8_t data[4] = { 1, 2, 3, 4 }; | 505 uint8_t data[4] = { 1, 2, 3, 4 }; |
506 gfx::Rect rect(size); | 506 gfx::Rect rect(size); |
507 resource_provider->SetPixels(id, data, rect, rect, gfx::Vector2d()); | 507 resource_provider->SetPixels(id, data, rect, rect, gfx::Vector2d()); |
508 if (expected_default_type == ResourceProvider::GLTexture) | 508 if (expected_default_type == ResourceProvider::GLTexture) |
509 EXPECT_EQ(1u, context->NumTextures()); | 509 EXPECT_EQ(1u, context->NumTextures()); |
510 | 510 |
(...skipping 11 matching lines...) Expand all Loading... |
522 CheckCreateResource(GetParam(), resource_provider_.get(), context()); | 522 CheckCreateResource(GetParam(), resource_provider_.get(), context()); |
523 } | 523 } |
524 | 524 |
525 TEST_P(ResourceProviderTest, Upload) { | 525 TEST_P(ResourceProviderTest, Upload) { |
526 gfx::Size size(2, 2); | 526 gfx::Size size(2, 2); |
527 ResourceFormat format = RGBA_8888; | 527 ResourceFormat format = RGBA_8888; |
528 size_t pixel_size = TextureSizeBytes(size, format); | 528 size_t pixel_size = TextureSizeBytes(size, format); |
529 ASSERT_EQ(16U, pixel_size); | 529 ASSERT_EQ(16U, pixel_size); |
530 | 530 |
531 ResourceProvider::ResourceId id = resource_provider_->CreateResource( | 531 ResourceProvider::ResourceId id = resource_provider_->CreateResource( |
532 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 532 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
533 | 533 |
534 uint8_t image[16] = { 0 }; | 534 uint8_t image[16] = { 0 }; |
535 gfx::Rect image_rect(size); | 535 gfx::Rect image_rect(size); |
536 resource_provider_->SetPixels( | 536 resource_provider_->SetPixels( |
537 id, image, image_rect, image_rect, gfx::Vector2d()); | 537 id, image, image_rect, image_rect, gfx::Vector2d()); |
538 | 538 |
539 for (uint8_t i = 0; i < pixel_size; ++i) | 539 for (uint8_t i = 0; i < pixel_size; ++i) |
540 image[i] = i; | 540 image[i] = i; |
541 | 541 |
542 uint8_t result[16] = { 0 }; | 542 uint8_t result[16] = { 0 }; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 | 591 |
592 TEST_P(ResourceProviderTest, TransferGLResources) { | 592 TEST_P(ResourceProviderTest, TransferGLResources) { |
593 if (GetParam() != ResourceProvider::GLTexture) | 593 if (GetParam() != ResourceProvider::GLTexture) |
594 return; | 594 return; |
595 gfx::Size size(1, 1); | 595 gfx::Size size(1, 1); |
596 ResourceFormat format = RGBA_8888; | 596 ResourceFormat format = RGBA_8888; |
597 size_t pixel_size = TextureSizeBytes(size, format); | 597 size_t pixel_size = TextureSizeBytes(size, format); |
598 ASSERT_EQ(4U, pixel_size); | 598 ASSERT_EQ(4U, pixel_size); |
599 | 599 |
600 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( | 600 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( |
601 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 601 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
602 uint8_t data1[4] = { 1, 2, 3, 4 }; | 602 uint8_t data1[4] = { 1, 2, 3, 4 }; |
603 gfx::Rect rect(size); | 603 gfx::Rect rect(size); |
604 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 604 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
605 | 605 |
606 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 606 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
607 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 607 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
608 uint8_t data2[4] = { 5, 5, 5, 5 }; | 608 uint8_t data2[4] = { 5, 5, 5, 5 }; |
609 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 609 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
610 | 610 |
611 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | 611 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( |
612 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 612 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
613 child_resource_provider_->MapImageRasterBuffer(id3); | 613 child_resource_provider_->MapImageRasterBuffer(id3); |
614 child_resource_provider_->UnmapImageRasterBuffer(id3); | 614 child_resource_provider_->UnmapImageRasterBuffer(id3); |
615 | 615 |
616 GLuint external_texture_id = child_context_->createExternalTexture(); | 616 GLuint external_texture_id = child_context_->createExternalTexture(); |
617 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); | 617 child_context_->bindTexture(GL_TEXTURE_EXTERNAL_OES, external_texture_id); |
618 | 618 |
619 gpu::Mailbox external_mailbox; | 619 gpu::Mailbox external_mailbox; |
620 child_context_->genMailboxCHROMIUM(external_mailbox.name); | 620 child_context_->genMailboxCHROMIUM(external_mailbox.name); |
621 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, | 621 child_context_->produceTextureCHROMIUM(GL_TEXTURE_EXTERNAL_OES, |
622 external_mailbox.name); | 622 external_mailbox.name); |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 EXPECT_FALSE(returned_to_child[3].lost); | 832 EXPECT_FALSE(returned_to_child[3].lost); |
833 } | 833 } |
834 | 834 |
835 TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) { | 835 TEST_P(ResourceProviderTest, ReadLockCountStopsReturnToChildOrDelete) { |
836 if (GetParam() != ResourceProvider::GLTexture) | 836 if (GetParam() != ResourceProvider::GLTexture) |
837 return; | 837 return; |
838 gfx::Size size(1, 1); | 838 gfx::Size size(1, 1); |
839 ResourceFormat format = RGBA_8888; | 839 ResourceFormat format = RGBA_8888; |
840 | 840 |
841 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( | 841 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( |
842 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 842 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
843 uint8_t data1[4] = {1, 2, 3, 4}; | 843 uint8_t data1[4] = {1, 2, 3, 4}; |
844 gfx::Rect rect(size); | 844 gfx::Rect rect(size); |
845 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 845 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
846 | 846 |
847 ReturnedResourceArray returned_to_child; | 847 ReturnedResourceArray returned_to_child; |
848 int child_id = | 848 int child_id = |
849 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 849 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
850 { | 850 { |
851 // Transfer some resources to the parent. | 851 // Transfer some resources to the parent. |
852 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 852 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
938 TEST_P(ResourceProviderTest, TransferSoftwareResources) { | 938 TEST_P(ResourceProviderTest, TransferSoftwareResources) { |
939 if (GetParam() != ResourceProvider::Bitmap) | 939 if (GetParam() != ResourceProvider::Bitmap) |
940 return; | 940 return; |
941 | 941 |
942 gfx::Size size(1, 1); | 942 gfx::Size size(1, 1); |
943 ResourceFormat format = RGBA_8888; | 943 ResourceFormat format = RGBA_8888; |
944 size_t pixel_size = TextureSizeBytes(size, format); | 944 size_t pixel_size = TextureSizeBytes(size, format); |
945 ASSERT_EQ(4U, pixel_size); | 945 ASSERT_EQ(4U, pixel_size); |
946 | 946 |
947 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( | 947 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( |
948 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 948 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
949 uint8_t data1[4] = { 1, 2, 3, 4 }; | 949 uint8_t data1[4] = { 1, 2, 3, 4 }; |
950 gfx::Rect rect(size); | 950 gfx::Rect rect(size); |
951 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 951 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
952 | 952 |
953 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 953 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
954 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 954 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
955 uint8_t data2[4] = { 5, 5, 5, 5 }; | 955 uint8_t data2[4] = { 5, 5, 5, 5 }; |
956 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 956 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
957 | 957 |
958 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( | 958 ResourceProvider::ResourceId id3 = child_resource_provider_->CreateResource( |
959 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 959 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
960 uint8_t data3[4] = { 6, 7, 8, 9 }; | 960 uint8_t data3[4] = { 6, 7, 8, 9 }; |
961 SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); | 961 SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); |
962 SkCanvas* raster_canvas = child_resource_provider_->MapImageRasterBuffer(id3); | 962 SkCanvas* raster_canvas = child_resource_provider_->MapImageRasterBuffer(id3); |
963 raster_canvas->writePixels(info, data3, info.minRowBytes(), 0, 0); | 963 raster_canvas->writePixels(info, data3, info.minRowBytes(), 0, 0); |
964 child_resource_provider_->UnmapImageRasterBuffer(id3); | 964 child_resource_provider_->UnmapImageRasterBuffer(id3); |
965 | 965 |
966 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); | 966 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
967 shared_memory->CreateAndMapAnonymous(1); | 967 shared_memory->CreateAndMapAnonymous(1); |
968 base::SharedMemory* shared_memory_ptr = shared_memory.get(); | 968 base::SharedMemory* shared_memory_ptr = shared_memory.get(); |
969 ResourceProvider::ResourceId id4 = | 969 ResourceProvider::ResourceId id4 = |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1174 scoped_ptr<ResourceProvider> child_resource_provider(ResourceProvider::Create( | 1174 scoped_ptr<ResourceProvider> child_resource_provider(ResourceProvider::Create( |
1175 child_output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, | 1175 child_output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, |
1176 false)); | 1176 false)); |
1177 | 1177 |
1178 gfx::Size size(1, 1); | 1178 gfx::Size size(1, 1); |
1179 ResourceFormat format = RGBA_8888; | 1179 ResourceFormat format = RGBA_8888; |
1180 size_t pixel_size = TextureSizeBytes(size, format); | 1180 size_t pixel_size = TextureSizeBytes(size, format); |
1181 ASSERT_EQ(4U, pixel_size); | 1181 ASSERT_EQ(4U, pixel_size); |
1182 | 1182 |
1183 ResourceProvider::ResourceId id1 = child_resource_provider->CreateResource( | 1183 ResourceProvider::ResourceId id1 = child_resource_provider->CreateResource( |
1184 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1184 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1185 uint8_t data1[4] = { 1, 2, 3, 4 }; | 1185 uint8_t data1[4] = { 1, 2, 3, 4 }; |
1186 gfx::Rect rect(size); | 1186 gfx::Rect rect(size); |
1187 child_resource_provider->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 1187 child_resource_provider->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
1188 | 1188 |
1189 ReturnedResourceArray returned_to_child; | 1189 ReturnedResourceArray returned_to_child; |
1190 int child_id = | 1190 int child_id = |
1191 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1191 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
1192 { | 1192 { |
1193 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1193 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
1194 resource_ids_to_transfer.push_back(id1); | 1194 resource_ids_to_transfer.push_back(id1); |
(...skipping 26 matching lines...) Expand all Loading... |
1221 TEST_P(ResourceProviderTest, TransferInvalidSoftware) { | 1221 TEST_P(ResourceProviderTest, TransferInvalidSoftware) { |
1222 if (GetParam() != ResourceProvider::Bitmap) | 1222 if (GetParam() != ResourceProvider::Bitmap) |
1223 return; | 1223 return; |
1224 | 1224 |
1225 gfx::Size size(1, 1); | 1225 gfx::Size size(1, 1); |
1226 ResourceFormat format = RGBA_8888; | 1226 ResourceFormat format = RGBA_8888; |
1227 size_t pixel_size = TextureSizeBytes(size, format); | 1227 size_t pixel_size = TextureSizeBytes(size, format); |
1228 ASSERT_EQ(4U, pixel_size); | 1228 ASSERT_EQ(4U, pixel_size); |
1229 | 1229 |
1230 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( | 1230 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( |
1231 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1231 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1232 uint8_t data1[4] = { 1, 2, 3, 4 }; | 1232 uint8_t data1[4] = { 1, 2, 3, 4 }; |
1233 gfx::Rect rect(size); | 1233 gfx::Rect rect(size); |
1234 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 1234 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
1235 | 1235 |
1236 ReturnedResourceArray returned_to_child; | 1236 ReturnedResourceArray returned_to_child; |
1237 int child_id = | 1237 int child_id = |
1238 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1238 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
1239 { | 1239 { |
1240 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1240 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
1241 resource_ids_to_transfer.push_back(id1); | 1241 resource_ids_to_transfer.push_back(id1); |
(...skipping 27 matching lines...) Expand all Loading... |
1269 EXPECT_FALSE(returned_to_child[0].lost); | 1269 EXPECT_FALSE(returned_to_child[0].lost); |
1270 } | 1270 } |
1271 | 1271 |
1272 TEST_P(ResourceProviderTest, DeleteExportedResources) { | 1272 TEST_P(ResourceProviderTest, DeleteExportedResources) { |
1273 gfx::Size size(1, 1); | 1273 gfx::Size size(1, 1); |
1274 ResourceFormat format = RGBA_8888; | 1274 ResourceFormat format = RGBA_8888; |
1275 size_t pixel_size = TextureSizeBytes(size, format); | 1275 size_t pixel_size = TextureSizeBytes(size, format); |
1276 ASSERT_EQ(4U, pixel_size); | 1276 ASSERT_EQ(4U, pixel_size); |
1277 | 1277 |
1278 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( | 1278 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( |
1279 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1279 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1280 uint8_t data1[4] = { 1, 2, 3, 4 }; | 1280 uint8_t data1[4] = { 1, 2, 3, 4 }; |
1281 gfx::Rect rect(size); | 1281 gfx::Rect rect(size); |
1282 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 1282 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
1283 | 1283 |
1284 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 1284 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
1285 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1285 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1286 uint8_t data2[4] = {5, 5, 5, 5}; | 1286 uint8_t data2[4] = {5, 5, 5, 5}; |
1287 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 1287 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
1288 | 1288 |
1289 ReturnedResourceArray returned_to_child; | 1289 ReturnedResourceArray returned_to_child; |
1290 int child_id = | 1290 int child_id = |
1291 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1291 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
1292 { | 1292 { |
1293 // Transfer some resources to the parent. | 1293 // Transfer some resources to the parent. |
1294 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1294 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
1295 resource_ids_to_transfer.push_back(id1); | 1295 resource_ids_to_transfer.push_back(id1); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1363 } | 1363 } |
1364 } | 1364 } |
1365 | 1365 |
1366 TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) { | 1366 TEST_P(ResourceProviderTest, DestroyChildWithExportedResources) { |
1367 gfx::Size size(1, 1); | 1367 gfx::Size size(1, 1); |
1368 ResourceFormat format = RGBA_8888; | 1368 ResourceFormat format = RGBA_8888; |
1369 size_t pixel_size = TextureSizeBytes(size, format); | 1369 size_t pixel_size = TextureSizeBytes(size, format); |
1370 ASSERT_EQ(4U, pixel_size); | 1370 ASSERT_EQ(4U, pixel_size); |
1371 | 1371 |
1372 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( | 1372 ResourceProvider::ResourceId id1 = child_resource_provider_->CreateResource( |
1373 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1373 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1374 uint8_t data1[4] = {1, 2, 3, 4}; | 1374 uint8_t data1[4] = {1, 2, 3, 4}; |
1375 gfx::Rect rect(size); | 1375 gfx::Rect rect(size); |
1376 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); | 1376 child_resource_provider_->SetPixels(id1, data1, rect, rect, gfx::Vector2d()); |
1377 | 1377 |
1378 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( | 1378 ResourceProvider::ResourceId id2 = child_resource_provider_->CreateResource( |
1379 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1379 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1380 uint8_t data2[4] = {5, 5, 5, 5}; | 1380 uint8_t data2[4] = {5, 5, 5, 5}; |
1381 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); | 1381 child_resource_provider_->SetPixels(id2, data2, rect, rect, gfx::Vector2d()); |
1382 | 1382 |
1383 ReturnedResourceArray returned_to_child; | 1383 ReturnedResourceArray returned_to_child; |
1384 int child_id = | 1384 int child_id = |
1385 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1385 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
1386 { | 1386 { |
1387 // Transfer some resources to the parent. | 1387 // Transfer some resources to the parent. |
1388 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1388 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
1389 resource_ids_to_transfer.push_back(id1); | 1389 resource_ids_to_transfer.push_back(id1); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1474 } | 1474 } |
1475 } | 1475 } |
1476 | 1476 |
1477 TEST_P(ResourceProviderTest, DeleteTransferredResources) { | 1477 TEST_P(ResourceProviderTest, DeleteTransferredResources) { |
1478 gfx::Size size(1, 1); | 1478 gfx::Size size(1, 1); |
1479 ResourceFormat format = RGBA_8888; | 1479 ResourceFormat format = RGBA_8888; |
1480 size_t pixel_size = TextureSizeBytes(size, format); | 1480 size_t pixel_size = TextureSizeBytes(size, format); |
1481 ASSERT_EQ(4U, pixel_size); | 1481 ASSERT_EQ(4U, pixel_size); |
1482 | 1482 |
1483 ResourceProvider::ResourceId id = child_resource_provider_->CreateResource( | 1483 ResourceProvider::ResourceId id = child_resource_provider_->CreateResource( |
1484 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1484 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1485 uint8_t data[4] = { 1, 2, 3, 4 }; | 1485 uint8_t data[4] = { 1, 2, 3, 4 }; |
1486 gfx::Rect rect(size); | 1486 gfx::Rect rect(size); |
1487 child_resource_provider_->SetPixels(id, data, rect, rect, gfx::Vector2d()); | 1487 child_resource_provider_->SetPixels(id, data, rect, rect, gfx::Vector2d()); |
1488 | 1488 |
1489 ReturnedResourceArray returned_to_child; | 1489 ReturnedResourceArray returned_to_child; |
1490 int child_id = | 1490 int child_id = |
1491 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1491 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
1492 { | 1492 { |
1493 // Transfer some resource to the parent. | 1493 // Transfer some resource to the parent. |
1494 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1494 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
(...skipping 29 matching lines...) Expand all Loading... |
1524 EXPECT_EQ(0u, child_resource_provider_->num_resources()); | 1524 EXPECT_EQ(0u, child_resource_provider_->num_resources()); |
1525 } | 1525 } |
1526 | 1526 |
1527 TEST_P(ResourceProviderTest, UnuseTransferredResources) { | 1527 TEST_P(ResourceProviderTest, UnuseTransferredResources) { |
1528 gfx::Size size(1, 1); | 1528 gfx::Size size(1, 1); |
1529 ResourceFormat format = RGBA_8888; | 1529 ResourceFormat format = RGBA_8888; |
1530 size_t pixel_size = TextureSizeBytes(size, format); | 1530 size_t pixel_size = TextureSizeBytes(size, format); |
1531 ASSERT_EQ(4U, pixel_size); | 1531 ASSERT_EQ(4U, pixel_size); |
1532 | 1532 |
1533 ResourceProvider::ResourceId id = child_resource_provider_->CreateResource( | 1533 ResourceProvider::ResourceId id = child_resource_provider_->CreateResource( |
1534 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1534 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1535 uint8_t data[4] = {1, 2, 3, 4}; | 1535 uint8_t data[4] = {1, 2, 3, 4}; |
1536 gfx::Rect rect(size); | 1536 gfx::Rect rect(size); |
1537 child_resource_provider_->SetPixels(id, data, rect, rect, gfx::Vector2d()); | 1537 child_resource_provider_->SetPixels(id, data, rect, rect, gfx::Vector2d()); |
1538 | 1538 |
1539 ReturnedResourceArray returned_to_child; | 1539 ReturnedResourceArray returned_to_child; |
1540 int child_id = | 1540 int child_id = |
1541 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1541 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
1542 const ResourceProvider::ResourceIdMap& map = | 1542 const ResourceProvider::ResourceIdMap& map = |
1543 resource_provider_->GetChildToParentMap(child_id); | 1543 resource_provider_->GetChildToParentMap(child_id); |
1544 { | 1544 { |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1675 | 1675 |
1676 gfx::Size size(1, 1); | 1676 gfx::Size size(1, 1); |
1677 ResourceFormat format = RGBA_8888; | 1677 ResourceFormat format = RGBA_8888; |
1678 int child_texture_id = 1; | 1678 int child_texture_id = 1; |
1679 int parent_texture_id = 2; | 1679 int parent_texture_id = 2; |
1680 | 1680 |
1681 size_t pixel_size = TextureSizeBytes(size, format); | 1681 size_t pixel_size = TextureSizeBytes(size, format); |
1682 ASSERT_EQ(4U, pixel_size); | 1682 ASSERT_EQ(4U, pixel_size); |
1683 | 1683 |
1684 ResourceProvider::ResourceId id = child_resource_provider->CreateResource( | 1684 ResourceProvider::ResourceId id = child_resource_provider->CreateResource( |
1685 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1685 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
1686 | 1686 |
1687 // The new texture is created with GL_LINEAR. | 1687 // The new texture is created with GL_LINEAR. |
1688 EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id)) | 1688 EXPECT_CALL(*child_context, bindTexture(GL_TEXTURE_2D, child_texture_id)) |
1689 .Times(2); // Once to create and once to allocate. | 1689 .Times(2); // Once to create and once to allocate. |
1690 EXPECT_CALL(*child_context, | 1690 EXPECT_CALL(*child_context, |
1691 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); | 1691 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); |
1692 EXPECT_CALL(*child_context, | 1692 EXPECT_CALL(*child_context, |
1693 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); | 1693 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); |
1694 EXPECT_CALL( | 1694 EXPECT_CALL( |
1695 *child_context, | 1695 *child_context, |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1941 context()->bindTexture(GL_TEXTURE_2D, texture); | 1941 context()->bindTexture(GL_TEXTURE_2D, texture); |
1942 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); | 1942 context()->consumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name); |
1943 context()->deleteTexture(texture); | 1943 context()->deleteTexture(texture); |
1944 } | 1944 } |
1945 | 1945 |
1946 TEST_P(ResourceProviderTest, LostResourceInParent) { | 1946 TEST_P(ResourceProviderTest, LostResourceInParent) { |
1947 gfx::Size size(1, 1); | 1947 gfx::Size size(1, 1); |
1948 ResourceFormat format = RGBA_8888; | 1948 ResourceFormat format = RGBA_8888; |
1949 ResourceProvider::ResourceId resource = | 1949 ResourceProvider::ResourceId resource = |
1950 child_resource_provider_->CreateResource( | 1950 child_resource_provider_->CreateResource( |
1951 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 1951 size, |
| 1952 GL_CLAMP_TO_EDGE, |
| 1953 ResourceProvider::TextureHintImmutable, |
| 1954 format); |
1952 child_resource_provider_->AllocateForTesting(resource); | 1955 child_resource_provider_->AllocateForTesting(resource); |
1953 // Expect a GL resource to be lost. | 1956 // Expect a GL resource to be lost. |
1954 bool should_lose_resource = GetParam() == ResourceProvider::GLTexture; | 1957 bool should_lose_resource = GetParam() == ResourceProvider::GLTexture; |
1955 | 1958 |
1956 ReturnedResourceArray returned_to_child; | 1959 ReturnedResourceArray returned_to_child; |
1957 int child_id = | 1960 int child_id = |
1958 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 1961 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
1959 { | 1962 { |
1960 // Transfer the resource to the parent. | 1963 // Transfer the resource to the parent. |
1961 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 1964 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1994 // Lost resources stay in use in the parent forever. | 1997 // Lost resources stay in use in the parent forever. |
1995 EXPECT_EQ(should_lose_resource, | 1998 EXPECT_EQ(should_lose_resource, |
1996 child_resource_provider_->InUseByConsumer(resource)); | 1999 child_resource_provider_->InUseByConsumer(resource)); |
1997 } | 2000 } |
1998 | 2001 |
1999 TEST_P(ResourceProviderTest, LostResourceInGrandParent) { | 2002 TEST_P(ResourceProviderTest, LostResourceInGrandParent) { |
2000 gfx::Size size(1, 1); | 2003 gfx::Size size(1, 1); |
2001 ResourceFormat format = RGBA_8888; | 2004 ResourceFormat format = RGBA_8888; |
2002 ResourceProvider::ResourceId resource = | 2005 ResourceProvider::ResourceId resource = |
2003 child_resource_provider_->CreateResource( | 2006 child_resource_provider_->CreateResource( |
2004 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 2007 size, |
| 2008 GL_CLAMP_TO_EDGE, |
| 2009 ResourceProvider::TextureHintImmutable, |
| 2010 format); |
2005 child_resource_provider_->AllocateForTesting(resource); | 2011 child_resource_provider_->AllocateForTesting(resource); |
2006 | 2012 |
2007 ReturnedResourceArray returned_to_child; | 2013 ReturnedResourceArray returned_to_child; |
2008 int child_id = | 2014 int child_id = |
2009 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); | 2015 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child)); |
2010 { | 2016 { |
2011 // Transfer the resource to the parent. | 2017 // Transfer the resource to the parent. |
2012 ResourceProvider::ResourceIdArray resource_ids_to_transfer; | 2018 ResourceProvider::ResourceIdArray resource_ids_to_transfer; |
2013 resource_ids_to_transfer.push_back(resource); | 2019 resource_ids_to_transfer.push_back(resource); |
2014 TransferableResourceArray list; | 2020 TransferableResourceArray list; |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2280 CHECK(output_surface->BindToClient(&output_surface_client)); | 2286 CHECK(output_surface->BindToClient(&output_surface_client)); |
2281 | 2287 |
2282 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2288 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2283 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 2289 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
2284 | 2290 |
2285 gfx::Size size(1, 1); | 2291 gfx::Size size(1, 1); |
2286 ResourceFormat format = RGBA_8888; | 2292 ResourceFormat format = RGBA_8888; |
2287 int texture_id = 1; | 2293 int texture_id = 1; |
2288 | 2294 |
2289 ResourceProvider::ResourceId id = resource_provider->CreateResource( | 2295 ResourceProvider::ResourceId id = resource_provider->CreateResource( |
2290 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 2296 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
2291 | 2297 |
2292 // Check that the texture gets created with the right sampler settings. | 2298 // Check that the texture gets created with the right sampler settings. |
2293 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)) | 2299 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)) |
2294 .Times(2); // Once to create and once to allocate. | 2300 .Times(2); // Once to create and once to allocate. |
2295 EXPECT_CALL(*context, | 2301 EXPECT_CALL(*context, |
2296 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); | 2302 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); |
2297 EXPECT_CALL(*context, | 2303 EXPECT_CALL(*context, |
2298 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); | 2304 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); |
2299 EXPECT_CALL( | 2305 EXPECT_CALL( |
2300 *context, | 2306 *context, |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2365 | 2371 |
2366 gfx::Size size(1, 1); | 2372 gfx::Size size(1, 1); |
2367 ResourceFormat format = RGBA_8888; | 2373 ResourceFormat format = RGBA_8888; |
2368 int texture_id = 1; | 2374 int texture_id = 1; |
2369 | 2375 |
2370 // Check that the texture gets created with the right sampler settings. | 2376 // Check that the texture gets created with the right sampler settings. |
2371 ResourceProvider::ResourceId id = resource_provider->CreateManagedResource( | 2377 ResourceProvider::ResourceId id = resource_provider->CreateManagedResource( |
2372 size, | 2378 size, |
2373 GL_TEXTURE_2D, | 2379 GL_TEXTURE_2D, |
2374 GL_CLAMP_TO_EDGE, | 2380 GL_CLAMP_TO_EDGE, |
2375 ResourceProvider::TextureUsageAny, | 2381 ResourceProvider::TextureHintImmutable, |
2376 format); | 2382 format); |
2377 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); | 2383 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); |
2378 EXPECT_CALL(*context, | 2384 EXPECT_CALL(*context, |
2379 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); | 2385 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); |
2380 EXPECT_CALL(*context, | 2386 EXPECT_CALL(*context, |
2381 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); | 2387 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); |
2382 EXPECT_CALL( | 2388 EXPECT_CALL( |
2383 *context, | 2389 *context, |
2384 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); | 2390 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); |
2385 EXPECT_CALL( | 2391 EXPECT_CALL( |
(...skipping 26 matching lines...) Expand all Loading... |
2412 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2418 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2413 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 2419 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
2414 | 2420 |
2415 gfx::Size size(1, 1); | 2421 gfx::Size size(1, 1); |
2416 ResourceFormat format = RGBA_8888; | 2422 ResourceFormat format = RGBA_8888; |
2417 GLenum texture_pool = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM; | 2423 GLenum texture_pool = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM; |
2418 | 2424 |
2419 for (int texture_id = 1; texture_id <= 2; ++texture_id) { | 2425 for (int texture_id = 1; texture_id <= 2; ++texture_id) { |
2420 GLint wrap_mode = texture_id == 1 ? GL_CLAMP_TO_EDGE : GL_REPEAT; | 2426 GLint wrap_mode = texture_id == 1 ? GL_CLAMP_TO_EDGE : GL_REPEAT; |
2421 // Check that the texture gets created with the right sampler settings. | 2427 // Check that the texture gets created with the right sampler settings. |
| 2428 ResourceProvider::ResourceId id = resource_provider->CreateGLTexture( |
| 2429 size, |
| 2430 GL_TEXTURE_2D, |
| 2431 texture_pool, |
| 2432 wrap_mode, |
| 2433 ResourceProvider::TextureHintImmutable, |
| 2434 format); |
| 2435 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); |
| 2436 EXPECT_CALL(*context, |
| 2437 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); |
| 2438 EXPECT_CALL(*context, |
| 2439 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); |
| 2440 EXPECT_CALL(*context, |
| 2441 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_mode)); |
| 2442 EXPECT_CALL(*context, |
| 2443 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_mode)); |
| 2444 EXPECT_CALL(*context, |
| 2445 texParameteri(GL_TEXTURE_2D, |
| 2446 GL_TEXTURE_POOL_CHROMIUM, |
| 2447 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM)); |
| 2448 resource_provider->CreateForTesting(id); |
| 2449 EXPECT_NE(0u, id); |
| 2450 |
| 2451 Mock::VerifyAndClearExpectations(context); |
| 2452 } |
| 2453 } |
| 2454 |
| 2455 TEST_P(ResourceProviderTest, TextureHint) { |
| 2456 // Sampling is only supported for GL textures. |
| 2457 if (GetParam() != ResourceProvider::GLTexture) |
| 2458 return; |
| 2459 |
| 2460 scoped_ptr<TextureStateTrackingContext> context_owned( |
| 2461 new TextureStateTrackingContext); |
| 2462 TextureStateTrackingContext* context = context_owned.get(); |
| 2463 context->set_support_texture_storage(true); |
| 2464 context->set_support_texture_usage(true); |
| 2465 |
| 2466 FakeOutputSurfaceClient output_surface_client; |
| 2467 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
| 2468 context_owned.PassAs<TestWebGraphicsContext3D>())); |
| 2469 CHECK(output_surface->BindToClient(&output_surface_client)); |
| 2470 |
| 2471 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
| 2472 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
| 2473 |
| 2474 gfx::Size size(1, 1); |
| 2475 ResourceFormat format = RGBA_8888; |
| 2476 GLenum texture_pool = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM; |
| 2477 |
| 2478 const ResourceProvider::TextureHint hints[4] = { |
| 2479 ResourceProvider::TextureHintDefault, |
| 2480 ResourceProvider::TextureHintImmutable, |
| 2481 ResourceProvider::TextureHintFramebuffer, |
| 2482 ResourceProvider::TextureHintImmutableFramebuffer, |
| 2483 }; |
| 2484 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) { |
| 2485 // Check that the texture gets created with the right sampler settings. |
2422 ResourceProvider::ResourceId id = | 2486 ResourceProvider::ResourceId id = |
2423 resource_provider->CreateGLTexture(size, | 2487 resource_provider->CreateGLTexture(size, |
2424 GL_TEXTURE_2D, | 2488 GL_TEXTURE_2D, |
2425 texture_pool, | 2489 texture_pool, |
2426 wrap_mode, | 2490 GL_CLAMP_TO_EDGE, |
2427 ResourceProvider::TextureUsageAny, | 2491 hints[texture_id - 1], |
2428 format); | 2492 format); |
2429 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); | 2493 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)); |
2430 EXPECT_CALL(*context, | 2494 EXPECT_CALL(*context, |
2431 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); | 2495 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); |
2432 EXPECT_CALL(*context, | 2496 EXPECT_CALL(*context, |
2433 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); | 2497 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); |
2434 EXPECT_CALL( | 2498 EXPECT_CALL( |
2435 *context, | 2499 *context, |
2436 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_mode)); | 2500 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); |
2437 EXPECT_CALL( | 2501 EXPECT_CALL( |
2438 *context, | 2502 *context, |
2439 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_mode)); | 2503 texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); |
2440 EXPECT_CALL(*context, | 2504 EXPECT_CALL(*context, |
2441 texParameteri(GL_TEXTURE_2D, | 2505 texParameteri(GL_TEXTURE_2D, |
2442 GL_TEXTURE_POOL_CHROMIUM, | 2506 GL_TEXTURE_POOL_CHROMIUM, |
2443 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM)); | 2507 GL_TEXTURE_POOL_UNMANAGED_CHROMIUM)); |
| 2508 // Check only TextureHintFramebuffer set GL_TEXTURE_USAGE_ANGLE. |
| 2509 bool is_framebuffer_hint = |
| 2510 hints[texture_id - 1] & ResourceProvider::TextureHintFramebuffer; |
| 2511 EXPECT_CALL(*context, |
| 2512 texParameteri(GL_TEXTURE_2D, |
| 2513 GL_TEXTURE_USAGE_ANGLE, |
| 2514 GL_FRAMEBUFFER_ATTACHMENT_ANGLE)) |
| 2515 .Times(is_framebuffer_hint ? 1 : 0); |
2444 resource_provider->CreateForTesting(id); | 2516 resource_provider->CreateForTesting(id); |
2445 EXPECT_NE(0u, id); | 2517 EXPECT_NE(0u, id); |
2446 | 2518 |
2447 Mock::VerifyAndClearExpectations(context); | 2519 Mock::VerifyAndClearExpectations(context); |
2448 } | 2520 } |
2449 } | 2521 } |
2450 | 2522 |
2451 TEST_P(ResourceProviderTest, TextureMailbox_SharedMemory) { | 2523 TEST_P(ResourceProviderTest, TextureMailbox_SharedMemory) { |
2452 if (GetParam() != ResourceProvider::Bitmap) | 2524 if (GetParam() != ResourceProvider::Bitmap) |
2453 return; | 2525 return; |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2816 gfx::Size size(2, 2); | 2888 gfx::Size size(2, 2); |
2817 gfx::Vector2d offset(0, 0); | 2889 gfx::Vector2d offset(0, 0); |
2818 gfx::Rect rect(0, 0, 2, 2); | 2890 gfx::Rect rect(0, 0, 2, 2); |
2819 ResourceFormat format = RGBA_8888; | 2891 ResourceFormat format = RGBA_8888; |
2820 ResourceProvider::ResourceId id = 0; | 2892 ResourceProvider::ResourceId id = 0; |
2821 uint8_t pixels[16] = { 0 }; | 2893 uint8_t pixels[16] = { 0 }; |
2822 int texture_id = 123; | 2894 int texture_id = 123; |
2823 | 2895 |
2824 // Lazy allocation. Don't allocate when creating the resource. | 2896 // Lazy allocation. Don't allocate when creating the resource. |
2825 id = resource_provider->CreateResource( | 2897 id = resource_provider->CreateResource( |
2826 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 2898 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
2827 | 2899 |
2828 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 2900 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
2829 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); | 2901 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); |
2830 resource_provider->CreateForTesting(id); | 2902 resource_provider->CreateForTesting(id); |
2831 | 2903 |
2832 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 2904 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
2833 resource_provider->DeleteResource(id); | 2905 resource_provider->DeleteResource(id); |
2834 | 2906 |
2835 Mock::VerifyAndClearExpectations(context); | 2907 Mock::VerifyAndClearExpectations(context); |
2836 | 2908 |
2837 // Do allocate when we set the pixels. | 2909 // Do allocate when we set the pixels. |
2838 id = resource_provider->CreateResource( | 2910 id = resource_provider->CreateResource( |
2839 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 2911 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
2840 | 2912 |
2841 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 2913 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
2842 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(3); | 2914 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(3); |
2843 EXPECT_CALL(*context, texImage2D(_, _, _, 2, 2, _, _, _, _)).Times(1); | 2915 EXPECT_CALL(*context, texImage2D(_, _, _, 2, 2, _, _, _, _)).Times(1); |
2844 EXPECT_CALL(*context, texSubImage2D(_, _, _, _, 2, 2, _, _, _)).Times(1); | 2916 EXPECT_CALL(*context, texSubImage2D(_, _, _, _, 2, 2, _, _, _)).Times(1); |
2845 resource_provider->SetPixels(id, pixels, rect, rect, offset); | 2917 resource_provider->SetPixels(id, pixels, rect, rect, offset); |
2846 | 2918 |
2847 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 2919 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
2848 resource_provider->DeleteResource(id); | 2920 resource_provider->DeleteResource(id); |
2849 | 2921 |
2850 Mock::VerifyAndClearExpectations(context); | 2922 Mock::VerifyAndClearExpectations(context); |
2851 | 2923 |
2852 // Same for async version. | 2924 // Same for async version. |
2853 id = resource_provider->CreateResource( | 2925 id = resource_provider->CreateResource( |
2854 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 2926 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
2855 resource_provider->AcquirePixelRasterBuffer(id); | 2927 resource_provider->AcquirePixelRasterBuffer(id); |
2856 | 2928 |
2857 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 2929 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
2858 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 2930 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
2859 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 2931 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
2860 .Times(1); | 2932 .Times(1); |
2861 resource_provider->BeginSetPixels(id); | 2933 resource_provider->BeginSetPixels(id); |
2862 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); | 2934 ASSERT_TRUE(resource_provider->DidSetPixelsComplete(id)); |
2863 | 2935 |
2864 resource_provider->ReleasePixelRasterBuffer(id); | 2936 resource_provider->ReleasePixelRasterBuffer(id); |
2865 | 2937 |
2866 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 2938 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
2867 resource_provider->DeleteResource(id); | 2939 resource_provider->DeleteResource(id); |
2868 | 2940 |
2869 Mock::VerifyAndClearExpectations(context); | 2941 Mock::VerifyAndClearExpectations(context); |
2870 } | 2942 } |
2871 | 2943 |
2872 TEST_P(ResourceProviderTest, TextureAllocationStorageUsageAny) { | 2944 TEST_P(ResourceProviderTest, TextureAllocationHint) { |
2873 // Only for GL textures. | 2945 // Only for GL textures. |
2874 if (GetParam() != ResourceProvider::GLTexture) | 2946 if (GetParam() != ResourceProvider::GLTexture) |
2875 return; | 2947 return; |
2876 scoped_ptr<AllocationTrackingContext3D> context_owned( | |
2877 new StrictMock<AllocationTrackingContext3D>); | |
2878 AllocationTrackingContext3D* context = context_owned.get(); | |
2879 context->set_support_texture_storage(true); | |
2880 | |
2881 FakeOutputSurfaceClient output_surface_client; | |
2882 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( | |
2883 context_owned.PassAs<TestWebGraphicsContext3D>())); | |
2884 CHECK(output_surface->BindToClient(&output_surface_client)); | |
2885 | |
2886 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | |
2887 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | |
2888 | |
2889 gfx::Size size(2, 2); | |
2890 ResourceFormat format = RGBA_8888; | |
2891 ResourceProvider::ResourceId id = 0; | |
2892 int texture_id = 123; | |
2893 | |
2894 // Lazy allocation. Don't allocate when creating the resource. | |
2895 id = resource_provider->CreateResource( | |
2896 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | |
2897 | |
2898 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | |
2899 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | |
2900 EXPECT_CALL(*context, texStorage2DEXT(_, _, _, 2, 2)).Times(1); | |
2901 resource_provider->AllocateForTesting(id); | |
2902 | |
2903 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | |
2904 resource_provider->DeleteResource(id); | |
2905 | |
2906 Mock::VerifyAndClearExpectations(context); | |
2907 } | |
2908 | |
2909 TEST_P(ResourceProviderTest, TextureAllocationStorageUsageFramebuffer) { | |
2910 // Only for GL textures. | |
2911 if (GetParam() != ResourceProvider::GLTexture) | |
2912 return; | |
2913 scoped_ptr<AllocationTrackingContext3D> context_owned( | 2948 scoped_ptr<AllocationTrackingContext3D> context_owned( |
2914 new StrictMock<AllocationTrackingContext3D>); | 2949 new StrictMock<AllocationTrackingContext3D>); |
2915 AllocationTrackingContext3D* context = context_owned.get(); | 2950 AllocationTrackingContext3D* context = context_owned.get(); |
2916 context->set_support_texture_storage(true); | 2951 context->set_support_texture_storage(true); |
| 2952 context->set_support_texture_usage(true); |
2917 | 2953 |
2918 FakeOutputSurfaceClient output_surface_client; | 2954 FakeOutputSurfaceClient output_surface_client; |
2919 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( | 2955 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
2920 context_owned.PassAs<TestWebGraphicsContext3D>())); | 2956 context_owned.PassAs<TestWebGraphicsContext3D>())); |
2921 CHECK(output_surface->BindToClient(&output_surface_client)); | 2957 CHECK(output_surface->BindToClient(&output_surface_client)); |
2922 | 2958 |
2923 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 2959 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2924 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 2960 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
2925 | 2961 |
2926 gfx::Size size(2, 2); | 2962 gfx::Size size(2, 2); |
2927 ResourceFormat format = RGBA_8888; | 2963 ResourceFormat format = RGBA_8888; |
2928 ResourceProvider::ResourceId id = 0; | |
2929 int texture_id = 123; | |
2930 | 2964 |
2931 // Lazy allocation. Don't allocate when creating the resource. | 2965 const ResourceProvider::TextureHint hints[4] = { |
2932 id = resource_provider->CreateResource( | 2966 ResourceProvider::TextureHintDefault, |
2933 size, | 2967 ResourceProvider::TextureHintImmutable, |
2934 GL_CLAMP_TO_EDGE, | 2968 ResourceProvider::TextureHintFramebuffer, |
2935 ResourceProvider::TextureUsageFramebuffer, | 2969 ResourceProvider::TextureHintImmutableFramebuffer, |
2936 format); | 2970 }; |
| 2971 for (GLuint texture_id = 1; texture_id <= arraysize(hints); ++texture_id) { |
| 2972 // Lazy allocation. Don't allocate when creating the resource. |
| 2973 ResourceProvider::ResourceId id = resource_provider->CreateResource( |
| 2974 size, GL_CLAMP_TO_EDGE, hints[texture_id - 1], format); |
2937 | 2975 |
2938 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 2976 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
2939 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 2977 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
2940 EXPECT_CALL(*context, texImage2D(_, _, _, 2, 2, _, _, _, _)).Times(1); | 2978 bool is_immutable_hint = |
2941 resource_provider->AllocateForTesting(id); | 2979 hints[texture_id - 1] & ResourceProvider::TextureHintImmutable; |
| 2980 EXPECT_CALL(*context, texStorage2DEXT(_, _, _, 2, 2)) |
| 2981 .Times(is_immutable_hint ? 1 : 0); |
| 2982 EXPECT_CALL(*context, texImage2D(_, _, _, 2, 2, _, _, _, _)) |
| 2983 .Times(is_immutable_hint ? 0 : 1); |
| 2984 resource_provider->AllocateForTesting(id); |
2942 | 2985 |
2943 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 2986 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
2944 resource_provider->DeleteResource(id); | 2987 resource_provider->DeleteResource(id); |
2945 | 2988 |
2946 Mock::VerifyAndClearExpectations(context); | 2989 Mock::VerifyAndClearExpectations(context); |
| 2990 } |
2947 } | 2991 } |
2948 | 2992 |
2949 TEST_P(ResourceProviderTest, PixelBuffer_GLTexture) { | 2993 TEST_P(ResourceProviderTest, PixelBuffer_GLTexture) { |
2950 if (GetParam() != ResourceProvider::GLTexture) | 2994 if (GetParam() != ResourceProvider::GLTexture) |
2951 return; | 2995 return; |
2952 scoped_ptr<AllocationTrackingContext3D> context_owned( | 2996 scoped_ptr<AllocationTrackingContext3D> context_owned( |
2953 new StrictMock<AllocationTrackingContext3D>); | 2997 new StrictMock<AllocationTrackingContext3D>); |
2954 AllocationTrackingContext3D* context = context_owned.get(); | 2998 AllocationTrackingContext3D* context = context_owned.get(); |
2955 | 2999 |
2956 FakeOutputSurfaceClient output_surface_client; | 3000 FakeOutputSurfaceClient output_surface_client; |
2957 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( | 3001 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
2958 context_owned.PassAs<TestWebGraphicsContext3D>())); | 3002 context_owned.PassAs<TestWebGraphicsContext3D>())); |
2959 CHECK(output_surface->BindToClient(&output_surface_client)); | 3003 CHECK(output_surface->BindToClient(&output_surface_client)); |
2960 | 3004 |
2961 gfx::Size size(2, 2); | 3005 gfx::Size size(2, 2); |
2962 ResourceFormat format = RGBA_8888; | 3006 ResourceFormat format = RGBA_8888; |
2963 ResourceProvider::ResourceId id = 0; | 3007 ResourceProvider::ResourceId id = 0; |
2964 int texture_id = 123; | 3008 int texture_id = 123; |
2965 | 3009 |
2966 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3010 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
2967 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3011 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
2968 | 3012 |
2969 id = resource_provider->CreateResource( | 3013 id = resource_provider->CreateResource( |
2970 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3014 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
2971 resource_provider->AcquirePixelRasterBuffer(id); | 3015 resource_provider->AcquirePixelRasterBuffer(id); |
2972 | 3016 |
2973 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3017 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
2974 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3018 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
2975 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 3019 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
2976 .Times(1); | 3020 .Times(1); |
2977 resource_provider->BeginSetPixels(id); | 3021 resource_provider->BeginSetPixels(id); |
2978 | 3022 |
2979 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); | 3023 EXPECT_TRUE(resource_provider->DidSetPixelsComplete(id)); |
2980 | 3024 |
(...skipping 20 matching lines...) Expand all Loading... |
3001 | 3045 |
3002 gfx::Size size(2, 2); | 3046 gfx::Size size(2, 2); |
3003 ResourceFormat format = RGBA_8888; | 3047 ResourceFormat format = RGBA_8888; |
3004 ResourceProvider::ResourceId id = 0; | 3048 ResourceProvider::ResourceId id = 0; |
3005 int texture_id = 123; | 3049 int texture_id = 123; |
3006 | 3050 |
3007 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3051 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3008 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3052 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3009 | 3053 |
3010 id = resource_provider->CreateResource( | 3054 id = resource_provider->CreateResource( |
3011 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3055 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3012 resource_provider->AcquirePixelRasterBuffer(id); | 3056 resource_provider->AcquirePixelRasterBuffer(id); |
3013 | 3057 |
3014 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3058 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3015 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3059 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3016 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) | 3060 EXPECT_CALL(*context, asyncTexImage2DCHROMIUM(_, _, _, 2, 2, _, _, _, _)) |
3017 .Times(1); | 3061 .Times(1); |
3018 resource_provider->BeginSetPixels(id); | 3062 resource_provider->BeginSetPixels(id); |
3019 | 3063 |
3020 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); | 3064 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(1); |
3021 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); | 3065 EXPECT_CALL(*context, waitAsyncTexImage2DCHROMIUM(GL_TEXTURE_2D)).Times(1); |
(...skipping 22 matching lines...) Expand all Loading... |
3044 ResourceFormat format = RGBA_8888; | 3088 ResourceFormat format = RGBA_8888; |
3045 ResourceProvider::ResourceId id = 0; | 3089 ResourceProvider::ResourceId id = 0; |
3046 int texture_id = 123; | 3090 int texture_id = 123; |
3047 | 3091 |
3048 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3092 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3049 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3093 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3050 | 3094 |
3051 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); | 3095 EXPECT_CALL(*context, NextTextureId()).WillRepeatedly(Return(texture_id)); |
3052 | 3096 |
3053 id = resource_provider->CreateResource( | 3097 id = resource_provider->CreateResource( |
3054 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3098 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3055 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, | 3099 context->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
3056 GL_INNOCENT_CONTEXT_RESET_ARB); | 3100 GL_INNOCENT_CONTEXT_RESET_ARB); |
3057 | 3101 |
3058 resource_provider->AcquirePixelRasterBuffer(id); | 3102 resource_provider->AcquirePixelRasterBuffer(id); |
3059 SkCanvas* raster_canvas = resource_provider->MapPixelRasterBuffer(id); | 3103 SkCanvas* raster_canvas = resource_provider->MapPixelRasterBuffer(id); |
3060 EXPECT_TRUE(raster_canvas == NULL); | 3104 EXPECT_TRUE(raster_canvas == NULL); |
3061 resource_provider->UnmapPixelRasterBuffer(id); | 3105 resource_provider->UnmapPixelRasterBuffer(id); |
3062 resource_provider->ReleasePixelRasterBuffer(id); | 3106 resource_provider->ReleasePixelRasterBuffer(id); |
3063 Mock::VerifyAndClearExpectations(context); | 3107 Mock::VerifyAndClearExpectations(context); |
3064 } | 3108 } |
(...skipping 16 matching lines...) Expand all Loading... |
3081 gfx::Size size(kWidth, kHeight); | 3125 gfx::Size size(kWidth, kHeight); |
3082 ResourceFormat format = RGBA_8888; | 3126 ResourceFormat format = RGBA_8888; |
3083 ResourceProvider::ResourceId id = 0; | 3127 ResourceProvider::ResourceId id = 0; |
3084 const unsigned kTextureId = 123u; | 3128 const unsigned kTextureId = 123u; |
3085 const unsigned kImageId = 234u; | 3129 const unsigned kImageId = 234u; |
3086 | 3130 |
3087 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3131 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3088 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3132 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3089 | 3133 |
3090 id = resource_provider->CreateResource( | 3134 id = resource_provider->CreateResource( |
3091 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3135 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3092 | 3136 |
3093 const int kStride = 4; | 3137 const int kStride = 4; |
3094 void* dummy_mapped_buffer_address = NULL; | 3138 void* dummy_mapped_buffer_address = NULL; |
3095 EXPECT_CALL( | 3139 EXPECT_CALL( |
3096 *context, | 3140 *context, |
3097 createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM)) | 3141 createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM)) |
3098 .WillOnce(Return(kImageId)) | 3142 .WillOnce(Return(kImageId)) |
3099 .RetiresOnSaturation(); | 3143 .RetiresOnSaturation(); |
3100 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, | 3144 EXPECT_CALL(*context, getImageParameterivCHROMIUM(kImageId, |
3101 GL_IMAGE_ROWBYTES_CHROMIUM, | 3145 GL_IMAGE_ROWBYTES_CHROMIUM, |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3175 | 3219 |
3176 gfx::Size size(1, 1); | 3220 gfx::Size size(1, 1); |
3177 ResourceFormat format = RGBA_8888; | 3221 ResourceFormat format = RGBA_8888; |
3178 ResourceProvider::ResourceId id = 0; | 3222 ResourceProvider::ResourceId id = 0; |
3179 const uint32_t kBadBeef = 0xbadbeef; | 3223 const uint32_t kBadBeef = 0xbadbeef; |
3180 | 3224 |
3181 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3225 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3182 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3226 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3183 | 3227 |
3184 id = resource_provider->CreateResource( | 3228 id = resource_provider->CreateResource( |
3185 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3229 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3186 | 3230 |
3187 SkBitmap bitmap; | 3231 SkBitmap bitmap; |
3188 bitmap.allocN32Pixels(size.width(), size.height()); | 3232 bitmap.allocN32Pixels(size.width(), size.height()); |
3189 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3233 *(bitmap.getAddr32(0, 0)) = kBadBeef; |
3190 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(id); | 3234 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(id); |
3191 ASSERT_TRUE(!!canvas); | 3235 ASSERT_TRUE(!!canvas); |
3192 canvas->writePixels(bitmap, 0, 0); | 3236 canvas->writePixels(bitmap, 0, 0); |
3193 resource_provider->UnmapImageRasterBuffer(id); | 3237 resource_provider->UnmapImageRasterBuffer(id); |
3194 | 3238 |
3195 { | 3239 { |
(...skipping 27 matching lines...) Expand all Loading... |
3223 ResourceProvider::ResourceId source_id = 0; | 3267 ResourceProvider::ResourceId source_id = 0; |
3224 ResourceProvider::ResourceId dest_id = 0; | 3268 ResourceProvider::ResourceId dest_id = 0; |
3225 const unsigned kSourceTextureId = 123u; | 3269 const unsigned kSourceTextureId = 123u; |
3226 const unsigned kDestTextureId = 321u; | 3270 const unsigned kDestTextureId = 321u; |
3227 const unsigned kImageId = 234u; | 3271 const unsigned kImageId = 234u; |
3228 | 3272 |
3229 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3273 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3230 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3274 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3231 | 3275 |
3232 source_id = resource_provider->CreateResource( | 3276 source_id = resource_provider->CreateResource( |
3233 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3277 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3234 | 3278 |
3235 const int kStride = 4; | 3279 const int kStride = 4; |
3236 void* dummy_mapped_buffer_address = NULL; | 3280 void* dummy_mapped_buffer_address = NULL; |
3237 EXPECT_CALL( | 3281 EXPECT_CALL( |
3238 *context, | 3282 *context, |
3239 createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM)) | 3283 createImageCHROMIUM(kWidth, kHeight, GL_RGBA8_OES, GL_IMAGE_MAP_CHROMIUM)) |
3240 .WillOnce(Return(kImageId)) | 3284 .WillOnce(Return(kImageId)) |
3241 .RetiresOnSaturation(); | 3285 .RetiresOnSaturation(); |
3242 EXPECT_CALL( | 3286 EXPECT_CALL( |
3243 *context, | 3287 *context, |
3244 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) | 3288 getImageParameterivCHROMIUM(kImageId, GL_IMAGE_ROWBYTES_CHROMIUM, _)) |
3245 .WillOnce(SetArgPointee<2>(kStride)) | 3289 .WillOnce(SetArgPointee<2>(kStride)) |
3246 .RetiresOnSaturation(); | 3290 .RetiresOnSaturation(); |
3247 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) | 3291 EXPECT_CALL(*context, mapImageCHROMIUM(kImageId)) |
3248 .WillOnce(Return(dummy_mapped_buffer_address)) | 3292 .WillOnce(Return(dummy_mapped_buffer_address)) |
3249 .RetiresOnSaturation(); | 3293 .RetiresOnSaturation(); |
3250 resource_provider->MapImageRasterBuffer(source_id); | 3294 resource_provider->MapImageRasterBuffer(source_id); |
3251 Mock::VerifyAndClearExpectations(context); | 3295 Mock::VerifyAndClearExpectations(context); |
3252 | 3296 |
3253 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) | 3297 EXPECT_CALL(*context, unmapImageCHROMIUM(kImageId)) |
3254 .Times(1) | 3298 .Times(1) |
3255 .RetiresOnSaturation(); | 3299 .RetiresOnSaturation(); |
3256 resource_provider->UnmapImageRasterBuffer(source_id); | 3300 resource_provider->UnmapImageRasterBuffer(source_id); |
3257 Mock::VerifyAndClearExpectations(context); | 3301 Mock::VerifyAndClearExpectations(context); |
3258 | 3302 |
3259 dest_id = resource_provider->CreateResource( | 3303 dest_id = resource_provider->CreateResource( |
3260 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3304 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3261 | 3305 |
3262 EXPECT_CALL(*context, NextTextureId()) | 3306 EXPECT_CALL(*context, NextTextureId()) |
3263 .WillOnce(Return(kDestTextureId)) | 3307 .WillOnce(Return(kDestTextureId)) |
3264 .RetiresOnSaturation(); | 3308 .RetiresOnSaturation(); |
3265 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) | 3309 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, kDestTextureId)) |
3266 .Times(1) | 3310 .Times(1) |
3267 .RetiresOnSaturation(); | 3311 .RetiresOnSaturation(); |
3268 EXPECT_CALL(*context, NextTextureId()) | 3312 EXPECT_CALL(*context, NextTextureId()) |
3269 .WillOnce(Return(kSourceTextureId)) | 3313 .WillOnce(Return(kSourceTextureId)) |
3270 .RetiresOnSaturation(); | 3314 .RetiresOnSaturation(); |
(...skipping 30 matching lines...) Expand all Loading... |
3301 gfx::Size size(1, 1); | 3345 gfx::Size size(1, 1); |
3302 ResourceFormat format = RGBA_8888; | 3346 ResourceFormat format = RGBA_8888; |
3303 ResourceProvider::ResourceId source_id = 0; | 3347 ResourceProvider::ResourceId source_id = 0; |
3304 ResourceProvider::ResourceId dest_id = 0; | 3348 ResourceProvider::ResourceId dest_id = 0; |
3305 const uint32_t kBadBeef = 0xbadbeef; | 3349 const uint32_t kBadBeef = 0xbadbeef; |
3306 | 3350 |
3307 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( | 3351 scoped_ptr<ResourceProvider> resource_provider(ResourceProvider::Create( |
3308 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); | 3352 output_surface.get(), shared_bitmap_manager_.get(), 0, false, 1, false)); |
3309 | 3353 |
3310 source_id = resource_provider->CreateResource( | 3354 source_id = resource_provider->CreateResource( |
3311 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3355 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3312 | 3356 |
3313 SkBitmap bitmap; | 3357 SkBitmap bitmap; |
3314 bitmap.allocN32Pixels(size.width(), size.height()); | 3358 bitmap.allocN32Pixels(size.width(), size.height()); |
3315 *(bitmap.getAddr32(0, 0)) = kBadBeef; | 3359 *(bitmap.getAddr32(0, 0)) = kBadBeef; |
3316 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(source_id); | 3360 SkCanvas* canvas = resource_provider->MapImageRasterBuffer(source_id); |
3317 ASSERT_TRUE(!!canvas); | 3361 ASSERT_TRUE(!!canvas); |
3318 canvas->writePixels(bitmap, 0, 0); | 3362 canvas->writePixels(bitmap, 0, 0); |
3319 resource_provider->UnmapImageRasterBuffer(source_id); | 3363 resource_provider->UnmapImageRasterBuffer(source_id); |
3320 | 3364 |
3321 dest_id = resource_provider->CreateResource( | 3365 dest_id = resource_provider->CreateResource( |
3322 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3366 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3323 | 3367 |
3324 resource_provider->CopyResource(source_id, dest_id); | 3368 resource_provider->CopyResource(source_id, dest_id); |
3325 | 3369 |
3326 { | 3370 { |
3327 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), | 3371 ResourceProvider::ScopedReadLockSoftware lock(resource_provider.get(), |
3328 dest_id); | 3372 dest_id); |
3329 const SkBitmap* sk_bitmap = lock.sk_bitmap(); | 3373 const SkBitmap* sk_bitmap = lock.sk_bitmap(); |
3330 EXPECT_EQ(sk_bitmap->width(), size.width()); | 3374 EXPECT_EQ(sk_bitmap->width(), size.width()); |
3331 EXPECT_EQ(sk_bitmap->height(), size.height()); | 3375 EXPECT_EQ(sk_bitmap->height(), size.height()); |
3332 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); | 3376 EXPECT_EQ(*sk_bitmap->getAddr32(0, 0), kBadBeef); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3399 scoped_ptr<ResourceProvider> resource_provider( | 3443 scoped_ptr<ResourceProvider> resource_provider( |
3400 ResourceProvider::Create(output_surface.get(), | 3444 ResourceProvider::Create(output_surface.get(), |
3401 shared_bitmap_manager_.get(), | 3445 shared_bitmap_manager_.get(), |
3402 0, | 3446 0, |
3403 false, | 3447 false, |
3404 1, | 3448 1, |
3405 false)); | 3449 false)); |
3406 int texture_id = 123; | 3450 int texture_id = 123; |
3407 | 3451 |
3408 ResourceProvider::ResourceId id = resource_provider->CreateResource( | 3452 ResourceProvider::ResourceId id = resource_provider->CreateResource( |
3409 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, ETC1); | 3453 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, ETC1); |
3410 EXPECT_NE(0u, id); | 3454 EXPECT_NE(0u, id); |
3411 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3455 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3412 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); | 3456 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(2); |
3413 resource_provider->AllocateForTesting(id); | 3457 resource_provider->AllocateForTesting(id); |
3414 | 3458 |
3415 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3459 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
3416 resource_provider->DeleteResource(id); | 3460 resource_provider->DeleteResource(id); |
3417 } | 3461 } |
3418 | 3462 |
3419 TEST_P(ResourceProviderTest, CompressedTextureETC1SetPixels) { | 3463 TEST_P(ResourceProviderTest, CompressedTextureETC1SetPixels) { |
(...skipping 15 matching lines...) Expand all Loading... |
3435 ResourceProvider::Create(output_surface.get(), | 3479 ResourceProvider::Create(output_surface.get(), |
3436 shared_bitmap_manager_.get(), | 3480 shared_bitmap_manager_.get(), |
3437 0, | 3481 0, |
3438 false, | 3482 false, |
3439 1, | 3483 1, |
3440 false)); | 3484 false)); |
3441 int texture_id = 123; | 3485 int texture_id = 123; |
3442 uint8_t pixels[8]; | 3486 uint8_t pixels[8]; |
3443 | 3487 |
3444 ResourceProvider::ResourceId id = resource_provider->CreateResource( | 3488 ResourceProvider::ResourceId id = resource_provider->CreateResource( |
3445 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, ETC1); | 3489 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, ETC1); |
3446 EXPECT_NE(0u, id); | 3490 EXPECT_NE(0u, id); |
3447 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); | 3491 EXPECT_CALL(*context, NextTextureId()).WillOnce(Return(texture_id)); |
3448 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(3); | 3492 EXPECT_CALL(*context, bindTexture(GL_TEXTURE_2D, texture_id)).Times(3); |
3449 EXPECT_CALL(*context, | 3493 EXPECT_CALL(*context, |
3450 compressedTexImage2D( | 3494 compressedTexImage2D( |
3451 _, 0, _, size.width(), size.height(), _, _, _)).Times(1); | 3495 _, 0, _, size.width(), size.height(), _, _, _)).Times(1); |
3452 resource_provider->SetPixels( | 3496 resource_provider->SetPixels( |
3453 id, pixels, gfx::Rect(size), gfx::Rect(size), gfx::Vector2d(0, 0)); | 3497 id, pixels, gfx::Rect(size), gfx::Rect(size), gfx::Vector2d(0, 0)); |
3454 | 3498 |
3455 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); | 3499 EXPECT_CALL(*context, RetireTextureId(texture_id)).Times(1); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3493 size_t kTextureAllocationChunkSize = 1; | 3537 size_t kTextureAllocationChunkSize = 1; |
3494 scoped_ptr<ResourceProvider> resource_provider( | 3538 scoped_ptr<ResourceProvider> resource_provider( |
3495 ResourceProvider::Create(output_surface.get(), | 3539 ResourceProvider::Create(output_surface.get(), |
3496 shared_bitmap_manager.get(), | 3540 shared_bitmap_manager.get(), |
3497 0, | 3541 0, |
3498 false, | 3542 false, |
3499 kTextureAllocationChunkSize, | 3543 kTextureAllocationChunkSize, |
3500 false)); | 3544 false)); |
3501 | 3545 |
3502 ResourceProvider::ResourceId id = resource_provider->CreateResource( | 3546 ResourceProvider::ResourceId id = resource_provider->CreateResource( |
3503 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3547 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3504 resource_provider->AllocateForTesting(id); | 3548 resource_provider->AllocateForTesting(id); |
3505 Mock::VerifyAndClearExpectations(context); | 3549 Mock::VerifyAndClearExpectations(context); |
3506 | 3550 |
3507 DCHECK_EQ(2u, context->PeekTextureId()); | 3551 DCHECK_EQ(2u, context->PeekTextureId()); |
3508 resource_provider->DeleteResource(id); | 3552 resource_provider->DeleteResource(id); |
3509 } | 3553 } |
3510 | 3554 |
3511 { | 3555 { |
3512 size_t kTextureAllocationChunkSize = 8; | 3556 size_t kTextureAllocationChunkSize = 8; |
3513 scoped_ptr<ResourceProvider> resource_provider( | 3557 scoped_ptr<ResourceProvider> resource_provider( |
3514 ResourceProvider::Create(output_surface.get(), | 3558 ResourceProvider::Create(output_surface.get(), |
3515 shared_bitmap_manager.get(), | 3559 shared_bitmap_manager.get(), |
3516 0, | 3560 0, |
3517 false, | 3561 false, |
3518 kTextureAllocationChunkSize, | 3562 kTextureAllocationChunkSize, |
3519 false)); | 3563 false)); |
3520 | 3564 |
3521 ResourceProvider::ResourceId id = resource_provider->CreateResource( | 3565 ResourceProvider::ResourceId id = resource_provider->CreateResource( |
3522 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureUsageAny, format); | 3566 size, GL_CLAMP_TO_EDGE, ResourceProvider::TextureHintImmutable, format); |
3523 resource_provider->AllocateForTesting(id); | 3567 resource_provider->AllocateForTesting(id); |
3524 Mock::VerifyAndClearExpectations(context); | 3568 Mock::VerifyAndClearExpectations(context); |
3525 | 3569 |
3526 DCHECK_EQ(10u, context->PeekTextureId()); | 3570 DCHECK_EQ(10u, context->PeekTextureId()); |
3527 resource_provider->DeleteResource(id); | 3571 resource_provider->DeleteResource(id); |
3528 } | 3572 } |
3529 } | 3573 } |
3530 | 3574 |
3531 } // namespace | 3575 } // namespace |
3532 } // namespace cc | 3576 } // namespace cc |
OLD | NEW |