Index: cc/tiles/gpu_image_decode_cache_unittest.cc |
diff --git a/cc/tiles/gpu_image_decode_cache_unittest.cc b/cc/tiles/gpu_image_decode_cache_unittest.cc |
index a5ae673022df1c86349a802e5198fc9c8086124c..0257717af0099b83c04e4a8a1dee81b28ddc11b3 100644 |
--- a/cc/tiles/gpu_image_decode_cache_unittest.cc |
+++ b/cc/tiles/gpu_image_decode_cache_unittest.cc |
@@ -1774,6 +1774,43 @@ TEST_P(GpuImageDecodeCacheTest, GetTaskForImageDifferentColorSpace) { |
cache.UnrefImage(third_draw_image); |
} |
+TEST_P(GpuImageDecodeCacheTest, RemoveUnusedImage) { |
+ auto context_provider = TestContextProvider::Create(); |
+ context_provider->BindToCurrentThread(); |
+ TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
+ bool is_decomposable = true; |
+ SkFilterQuality quality = kHigh_SkFilterQuality; |
+ std::vector<uint32_t> unique_ids(10); |
+ |
+ for (int i = 0; i < 10; ++i) { |
+ sk_sp<SkImage> image = CreateImage(100, 100); |
+ unique_ids[i] = image->uniqueID(); |
+ DrawImage draw_image( |
+ CreatePaintImage(image), |
+ SkIRect::MakeWH(image->width(), image->height()), quality, |
+ CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
+ DefaultColorSpace()); |
+ scoped_refptr<TileTask> task; |
+ bool need_unref = cache.GetTaskForImageAndRef( |
+ draw_image, ImageDecodeCache::TracingInfo(), &task); |
+ EXPECT_TRUE(need_unref); |
+ EXPECT_TRUE(task); |
+ TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
+ TestTileTaskRunner::ProcessTask(task.get()); |
+ cache.UnrefImage(draw_image); |
+ } |
+ |
+ // We should now have data image in our cache. |
+ EXPECT_GT(cache.GetBytesUsedForTesting(), 0u); |
+ EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 10u); |
+ |
+ // Remove unused ids. |
+ for (uint32_t i = 0; i < 10; ++i) { |
+ cache.NotifyImageUnused(unique_ids[i]); |
+ EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), (10 - i - 1)); |
+ } |
+} |
+ |
INSTANTIATE_TEST_CASE_P(GpuImageDecodeCacheTests, |
GpuImageDecodeCacheTest, |
::testing::Values(ResourceFormat::RGBA_8888, |