Chromium Code Reviews| Index: cc/resources/resource_pool_unittest.cc |
| diff --git a/cc/resources/resource_pool_unittest.cc b/cc/resources/resource_pool_unittest.cc |
| index aa8e853e0c4f9caa95eda9cd1c30e7fc374f6002..57b9f0db26c8f7811aaa4d1689133a805fd3e82a 100644 |
| --- a/cc/resources/resource_pool_unittest.cc |
| +++ b/cc/resources/resource_pool_unittest.cc |
| @@ -29,10 +29,16 @@ class ResourcePoolTest : public testing::Test { |
| resource_pool_ = |
| ResourcePool::Create(resource_provider_.get(), task_runner_.get(), |
| ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| - ResourcePool::kDefaultExpirationDelay); |
| + ResourcePool::kDefaultExpirationDelay, false); |
| } |
| protected: |
| + void CheckAndReturnResource(Resource* resource) { |
| + EXPECT_NE(nullptr, resource); |
| + resource_pool_->ReleaseResource(resource); |
| + resource_pool_->CheckBusyResources(); |
| + } |
| + |
| scoped_refptr<TestContextProvider> context_provider_; |
| std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| std::unique_ptr<ResourceProvider> resource_provider_; |
| @@ -105,32 +111,28 @@ TEST_F(ResourcePoolTest, SimpleResourceReuse) { |
| gfx::ColorSpace color_space1; |
| gfx::ColorSpace color_space2 = gfx::ColorSpace::CreateSRGB(); |
| - Resource* resource = |
| - resource_pool_->AcquireResource(size, format, color_space1); |
| - resource_pool_->ReleaseResource(resource); |
| - resource_pool_->CheckBusyResources(); |
| + CheckAndReturnResource( |
| + resource_pool_->AcquireResource(size, format, color_space1)); |
| EXPECT_EQ(1u, resource_provider_->num_resources()); |
| // Same size/format should re-use resource. |
| - resource = resource_pool_->AcquireResource(size, format, color_space1); |
| + Resource* resource = |
| + resource_pool_->AcquireResource(size, format, color_space1); |
| EXPECT_EQ(1u, resource_provider_->num_resources()); |
| - resource_pool_->ReleaseResource(resource); |
| - resource_pool_->CheckBusyResources(); |
| + CheckAndReturnResource(resource); |
| EXPECT_EQ(1u, resource_provider_->num_resources()); |
| // Different size/format should allocate new resource. |
| resource = resource_pool_->AcquireResource(gfx::Size(50, 50), LUMINANCE_8, |
| color_space1); |
| EXPECT_EQ(2u, resource_provider_->num_resources()); |
| - resource_pool_->ReleaseResource(resource); |
| - resource_pool_->CheckBusyResources(); |
| + CheckAndReturnResource(resource); |
| EXPECT_EQ(2u, resource_provider_->num_resources()); |
| // Different color space should allocate new resource. |
| resource = resource_pool_->AcquireResource(size, format, color_space2); |
| EXPECT_EQ(3u, resource_provider_->num_resources()); |
| - resource_pool_->ReleaseResource(resource); |
| - resource_pool_->CheckBusyResources(); |
| + CheckAndReturnResource(resource); |
| EXPECT_EQ(3u, resource_provider_->num_resources()); |
| } |
| @@ -160,7 +162,7 @@ TEST_F(ResourcePoolTest, BusyResourcesEventuallyFreed) { |
| resource_pool_ = |
| ResourcePool::Create(resource_provider_.get(), task_runner_.get(), |
| ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| - base::TimeDelta::FromMilliseconds(10)); |
| + base::TimeDelta::FromMilliseconds(10), false); |
| // Limits high enough to not be hit by this test. |
| size_t bytes_limit = 10 * 1024 * 1024; |
| @@ -201,7 +203,7 @@ TEST_F(ResourcePoolTest, UnusedResourcesEventuallyFreed) { |
| resource_pool_ = |
| ResourcePool::Create(resource_provider_.get(), task_runner_.get(), |
| ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| - base::TimeDelta::FromMilliseconds(100)); |
| + base::TimeDelta::FromMilliseconds(100), false); |
| // Limits high enough to not be hit by this test. |
| size_t bytes_limit = 10 * 1024 * 1024; |
| @@ -317,25 +319,47 @@ TEST_F(ResourcePoolTest, ReuseResource) { |
| ResourceFormat format = RGBA_8888; |
| gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB(); |
| - // Create unused resources with sizes close to 100, 100. |
| - resource_pool_->ReleaseResource( |
| - resource_pool_->CreateResource(gfx::Size(99, 100), format, color_space)); |
| - resource_pool_->ReleaseResource( |
| - resource_pool_->CreateResource(gfx::Size(99, 99), format, color_space)); |
| - resource_pool_->ReleaseResource( |
| - resource_pool_->CreateResource(gfx::Size(100, 99), format, color_space)); |
| - resource_pool_->ReleaseResource( |
| - resource_pool_->CreateResource(gfx::Size(101, 101), format, color_space)); |
| - resource_pool_->CheckBusyResources(); |
| - |
| - gfx::Size size(100, 100); |
| - Resource* resource = resource_pool_->ReuseResource(size, format, color_space); |
| - EXPECT_EQ(nullptr, resource); |
| - size = gfx::Size(100, 99); |
| - resource = resource_pool_->ReuseResource(size, format, color_space); |
| - EXPECT_NE(nullptr, resource); |
| - ASSERT_EQ(nullptr, resource_pool_->ReuseResource(size, format, color_space)); |
| - resource_pool_->ReleaseResource(resource); |
| + // Create unused resource with size 100x100. |
| + CheckAndReturnResource( |
| + resource_pool_->CreateResource(gfx::Size(100, 100), format, color_space)); |
| + |
| + // Try some cases that are too large, none should succeed. |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(101, 100), format, |
| + color_space)); |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(100, 101), format, |
| + color_space)); |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(90, 120), format, |
| + color_space)); |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(120, 120), format, |
| + color_space)); |
| + |
| + // Try some cases that are more than 2x smaller than 100x100 in area and |
| + // won't be re-used. |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(49, 100), format, |
| + color_space)); |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(100, 49), format, |
| + color_space)); |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(50, 50), format, |
| + color_space)); |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(70, 70), format, |
| + color_space)); |
| + |
| + // Try some cases that are smaller than 100x100, but within 2x area. Reuse |
| + // should succeed. |
| + CheckAndReturnResource( |
| + resource_pool_->ReuseResource(gfx::Size(50, 100), format, color_space)); |
| + CheckAndReturnResource( |
| + resource_pool_->ReuseResource(gfx::Size(100, 50), format, color_space)); |
| + CheckAndReturnResource( |
| + resource_pool_->ReuseResource(gfx::Size(71, 71), format, color_space)); |
| + |
| + // 100x100 is an exact match and should succeed. A subsequent request for |
| + // the same size should fail (the resource is already in use). |
| + Resource* resource = |
| + resource_pool_->ReuseResource(gfx::Size(100, 100), format, color_space); |
| + EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(100, 100), format, |
| + color_space)); |
| + CheckAndReturnResource(resource); |
| } |
| TEST_F(ResourcePoolTest, MemoryStateSuspended) { |
| @@ -380,7 +404,7 @@ TEST_F(ResourcePoolTest, TextureHintRespected) { |
| resource_pool_ = |
| ResourcePool::Create(resource_provider_.get(), task_runner_.get(), |
| ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| - base::TimeDelta::FromMilliseconds(100)); |
| + base::TimeDelta::FromMilliseconds(100), false); |
|
danakj
2017/05/04 21:48:37
Add a test with true?
ericrk
2017/05/05 23:18:38
added.
|
| Resource* resource = |
| resource_pool_->AcquireResource(size, format, color_space); |
| EXPECT_TRUE(resource_provider_->IsImmutable(resource->id())); |
| @@ -389,7 +413,7 @@ TEST_F(ResourcePoolTest, TextureHintRespected) { |
| resource_pool_ = |
| ResourcePool::Create(resource_provider_.get(), task_runner_.get(), |
| ResourceProvider::TEXTURE_HINT_DEFAULT, |
| - base::TimeDelta::FromMilliseconds(100)); |
| + base::TimeDelta::FromMilliseconds(100), false); |
| resource = resource_pool_->AcquireResource(size, format, color_space); |
| EXPECT_FALSE(resource_provider_->IsImmutable(resource->id())); |
| resource_pool_->ReleaseResource(resource); |