Index: cc/resources/resource_pool_unittest.cc |
diff --git a/cc/resources/resource_pool_unittest.cc b/cc/resources/resource_pool_unittest.cc |
index d9025c621b11f94bf2e30afa11096a9160c9d34a..af14a604c5d43af3a09126707caf491bf80a176a 100644 |
--- a/cc/resources/resource_pool_unittest.cc |
+++ b/cc/resources/resource_pool_unittest.cc |
@@ -49,7 +49,7 @@ TEST_F(ResourcePoolTest, AcquireRelease) { |
EXPECT_EQ(format, resource->format()); |
EXPECT_TRUE(resource_provider_->CanLockForWrite(resource->id())); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
} |
TEST_F(ResourcePoolTest, AccountingSingleResource) { |
@@ -70,7 +70,7 @@ TEST_F(ResourcePoolTest, AccountingSingleResource) { |
EXPECT_EQ(1u, resource_pool_->resource_count()); |
EXPECT_EQ(0u, resource_pool_->GetBusyResourceCountForTesting()); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
EXPECT_EQ(resource_bytes, resource_pool_->GetTotalMemoryUsageForTesting()); |
EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); |
EXPECT_EQ(1u, resource_pool_->GetBusyResourceCountForTesting()); |
@@ -101,21 +101,21 @@ TEST_F(ResourcePoolTest, SimpleResourceReuse) { |
ResourceFormat format = RGBA_8888; |
Resource* resource = resource_pool_->AcquireResource(size, format); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
resource_pool_->CheckBusyResources(); |
EXPECT_EQ(1u, resource_provider_->num_resources()); |
// Same size/format should re-use resource. |
resource = resource_pool_->AcquireResource(size, format); |
EXPECT_EQ(1u, resource_provider_->num_resources()); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
resource_pool_->CheckBusyResources(); |
EXPECT_EQ(1u, resource_provider_->num_resources()); |
// Different size/format should alloate new resource. |
resource = resource_pool_->AcquireResource(gfx::Size(50, 50), LUMINANCE_8); |
EXPECT_EQ(2u, resource_provider_->num_resources()); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
resource_pool_->CheckBusyResources(); |
EXPECT_EQ(2u, resource_provider_->num_resources()); |
} |
@@ -133,7 +133,7 @@ TEST_F(ResourcePoolTest, LostResource) { |
EXPECT_EQ(1u, resource_provider_->num_resources()); |
resource_provider_->LoseResourceForTesting(resource->id()); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
resource_pool_->CheckBusyResources(); |
EXPECT_EQ(0u, resource_provider_->num_resources()); |
} |
@@ -157,7 +157,7 @@ TEST_F(ResourcePoolTest, BusyResourcesEventuallyFreed) { |
EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting()); |
EXPECT_EQ(1u, resource_pool_->resource_count()); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
EXPECT_EQ(1u, resource_provider_->num_resources()); |
EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting()); |
EXPECT_EQ(0u, resource_pool_->memory_usage_bytes()); |
@@ -195,7 +195,7 @@ TEST_F(ResourcePoolTest, UnusedResourcesEventuallyFreed) { |
EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); |
EXPECT_EQ(1u, resource_pool_->resource_count()); |
- resource_pool_->ReleaseResource(resource, 0u); |
+ resource_pool_->ReleaseResource(resource); |
EXPECT_EQ(1u, resource_provider_->num_resources()); |
EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting()); |
EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); |
@@ -220,5 +220,70 @@ TEST_F(ResourcePoolTest, UnusedResourcesEventuallyFreed) { |
EXPECT_EQ(0u, resource_pool_->GetTotalMemoryUsageForTesting()); |
} |
+TEST_F(ResourcePoolTest, UpdateContentId) { |
+ gfx::Size size(100, 100); |
+ ResourceFormat format = RGBA_8888; |
+ uint64_t content_id = 42; |
+ uint64_t new_content_id = 43; |
+ gfx::Rect new_invalidated_rect(20, 20, 10, 10); |
+ |
+ Resource* resource = resource_pool_->AcquireResource(size, format); |
+ resource_pool_->OnContentReplaced(resource->id(), content_id); |
+ resource_pool_->ReleaseResource(resource); |
+ resource_pool_->CheckBusyResources(); |
+ |
+ // Ensure that we can retrieve the resource based on |content_id|. |
+ gfx::Rect invalidated_rect; |
+ Resource* reacquired_resource = |
+ resource_pool_->TryAcquireResourceForPartialRaster( |
+ new_content_id, new_invalidated_rect, content_id, &invalidated_rect); |
+ EXPECT_EQ(resource, reacquired_resource); |
+ EXPECT_EQ(new_invalidated_rect, invalidated_rect); |
+ resource_pool_->ReleaseResource(reacquired_resource); |
+} |
+ |
+TEST_F(ResourcePoolTest, UpdateContentIdAndInvalidatedRect) { |
+ gfx::Size size(100, 100); |
+ ResourceFormat format = RGBA_8888; |
+ uint64_t content_ids[] = {42, 43, 44}; |
+ gfx::Rect invalidated_rect(20, 20, 10, 10); |
+ gfx::Rect second_invalidated_rect(25, 25, 10, 10); |
+ gfx::Rect expected_total_invalidated_rect(20, 20, 15, 15); |
+ |
+ // Acquire a new resource with the first content id. |
+ Resource* resource = resource_pool_->AcquireResource(size, format); |
+ resource_pool_->OnContentReplaced(resource->id(), content_ids[0]); |
+ |
+ // Attempt to acquire this resource. It is in use, so its ID and invalidated |
+ // rect should be updated, but a new resource will be returned. |
+ gfx::Rect new_invalidated_rect; |
+ Resource* reacquired_resource = |
+ resource_pool_->TryAcquireResourceForPartialRaster( |
+ content_ids[1], invalidated_rect, content_ids[0], |
+ &new_invalidated_rect); |
+ EXPECT_EQ(nullptr, reacquired_resource); |
+ EXPECT_EQ(gfx::Rect(), new_invalidated_rect); |
+ |
+ // Release the original resource, returning it to the unused pool. |
+ resource_pool_->ReleaseResource(resource); |
+ resource_pool_->CheckBusyResources(); |
+ |
+ // Ensure that we cannot retrieve a resource based on the original content id. |
+ reacquired_resource = resource_pool_->TryAcquireResourceForPartialRaster( |
+ content_ids[1], invalidated_rect, content_ids[0], &new_invalidated_rect); |
+ EXPECT_EQ(nullptr, reacquired_resource); |
+ EXPECT_EQ(gfx::Rect(), new_invalidated_rect); |
+ |
+ // Ensure that we can retrieve the resource based on the second (updated) |
+ // content ID and that it has the expected invalidated rect. |
+ gfx::Rect total_invalidated_rect; |
+ reacquired_resource = resource_pool_->TryAcquireResourceForPartialRaster( |
+ content_ids[2], second_invalidated_rect, content_ids[1], |
+ &total_invalidated_rect); |
+ EXPECT_EQ(resource, reacquired_resource); |
+ EXPECT_EQ(expected_total_invalidated_rect, total_invalidated_rect); |
+ resource_pool_->ReleaseResource(reacquired_resource); |
+} |
+ |
} // namespace |
} // namespace cc |