| 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 8599887b8c0279df0d56301cf1bb55f27cb1be1b..afdb8ccf4f7a5d13e2c528b085b4fa75bc32d1c9 100644
|
| --- a/cc/tiles/gpu_image_decode_cache_unittest.cc
|
| +++ b/cc/tiles/gpu_image_decode_cache_unittest.cc
|
| @@ -1752,5 +1752,42 @@ TEST(GpuImageDecodeCacheTest, GetTaskForImageDifferentColorSpace) {
|
| cache.UnrefImage(third_draw_image);
|
| }
|
|
|
| +TEST(GpuImageDecodeCacheTest, RemoveUnusedImage) {
|
| + auto context_provider = TestContextProvider::Create();
|
| + context_provider->BindToCurrentThread();
|
| + TestGpuImageDecodeCache cache(context_provider.get());
|
| + 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));
|
| + }
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|