Chromium Code Reviews| Index: cc/tiles/software_image_decode_cache_unittest.cc |
| diff --git a/cc/tiles/software_image_decode_cache_unittest.cc b/cc/tiles/software_image_decode_cache_unittest.cc |
| index 8df5b9c8746b4f43d07df17d7a5a7c1ac8e69db9..c4cb4c4528686b81a95bd46bdbc20993990e252c 100644 |
| --- a/cc/tiles/software_image_decode_cache_unittest.cc |
| +++ b/cc/tiles/software_image_decode_cache_unittest.cc |
| @@ -13,6 +13,10 @@ |
| namespace cc { |
| namespace { |
| +gfx::ColorSpace DefaultColorSpace() { |
| + return gfx::ColorSpace::CreateSRGB(); |
| +} |
| + |
| size_t kLockedMemoryLimitBytes = 128 * 1024 * 1024; |
| class TestSoftwareImageDecodeCache : public SoftwareImageDecodeCache { |
| public: |
| @@ -21,12 +25,19 @@ class TestSoftwareImageDecodeCache : public SoftwareImageDecodeCache { |
| kLockedMemoryLimitBytes) {} |
| }; |
| -sk_sp<SkImage> CreateImage(int width, int height) { |
| +sk_sp<SkImage> CreateImageWithColorSpace(int width, |
| + int height, |
| + const gfx::ColorSpace& color_space) { |
| SkBitmap bitmap; |
| - bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height)); |
| + bitmap.allocPixels( |
| + SkImageInfo::MakeN32Premul(width, height, color_space.ToSkColorSpace())); |
| return SkImage::MakeFromBitmap(bitmap); |
| } |
| +sk_sp<SkImage> CreateImage(int width, int height) { |
| + return CreateImageWithColorSpace(width, height, DefaultColorSpace()); |
| +} |
| + |
| SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { |
| SkMatrix matrix; |
| matrix.setScale(scale.width(), scale.height()); |
| @@ -46,7 +57,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyLowQuality) { |
| for (auto quality : qualities) { |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -67,7 +79,27 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQuality) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| + |
| + auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| + EXPECT_EQ(image->uniqueID(), key.image_id()); |
| + EXPECT_EQ(quality, key.filter_quality()); |
| + EXPECT_EQ(100, key.target_size().width()); |
| + EXPECT_EQ(100, key.target_size().height()); |
| + EXPECT_FALSE(key.can_use_original_decode()); |
| + EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| +} |
| + |
| +TEST(SoftwareImageDecodeCacheTest, ImageKeyDifferentColorSpace) { |
| + sk_sp<SkImage> image = CreateImage(100, 100); |
| + bool is_decomposable = true; |
| + SkFilterQuality quality = kNone_SkFilterQuality; |
| + |
| + DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| + quality, |
| + CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| + gfx::ColorSpace::CreateXYZD50()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -85,7 +117,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityDropToLowIfEnlarging) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -103,7 +136,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityDropToLowIfIdentity) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -122,7 +156,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -141,7 +176,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -160,7 +196,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -178,7 +215,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt1_5Scale) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -196,7 +234,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt1_0cale) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -214,7 +253,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_75Scale) { |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -232,7 +272,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_5Scale) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -250,7 +291,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_49Scale) { |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -268,7 +310,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_1Scale) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -286,7 +329,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_01Scale) { |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -305,7 +349,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -324,7 +369,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.2f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.2f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -342,7 +388,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyDowscalesHighQuality) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(2.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(2.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -363,7 +410,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyHighQualityDropToMediumIfTooLarge) { |
| // become low. |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.9f, 2.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.9f, 2.f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -382,7 +430,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -400,7 +449,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageKeyHighQualityDropToLowIfIdentity) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -419,7 +469,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -438,7 +489,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -456,7 +508,8 @@ TEST(SoftwareImageDecodeCacheTest, OriginalDecodesAreEqual) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -468,7 +521,8 @@ TEST(SoftwareImageDecodeCacheTest, OriginalDecodesAreEqual) { |
| DrawImage another_draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(1.5f, 1.5), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.5f, 1.5), is_decomposable), |
| + DefaultColorSpace()); |
| auto another_key = ImageDecodeCacheKey::FromDrawImage(another_draw_image); |
| EXPECT_EQ(image->uniqueID(), another_key.image_id()); |
| @@ -488,7 +542,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageRectDoesNotContainSrcRect) { |
| DrawImage draw_image( |
| image, SkIRect::MakeXYWH(25, 35, image->width(), image->height()), |
| - quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -506,7 +561,8 @@ TEST(SoftwareImageDecodeCacheTest, ImageRectDoesNotContainSrcRectWithScale) { |
| DrawImage draw_image( |
| image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), |
| - quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
| EXPECT_EQ(image->uniqueID(), key.image_id()); |
| @@ -525,7 +581,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImage) { |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| draw_image, ImageDecodeCache::TracingInfo(), &task); |
| @@ -534,7 +591,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImage) { |
| DrawImage another_draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> another_task; |
| need_unref = cache.GetTaskForImageAndRef( |
| another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); |
| @@ -555,7 +613,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentQuality) { |
| DrawImage high_quality_draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), |
| kHigh_SkFilterQuality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> high_quality_task; |
| bool need_unref = cache.GetTaskForImageAndRef(high_quality_draw_image, |
| ImageDecodeCache::TracingInfo(), |
| @@ -566,7 +625,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentQuality) { |
| DrawImage low_quality_draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), |
| kLow_SkFilterQuality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> low_quality_task; |
| need_unref = cache.GetTaskForImageAndRef(low_quality_draw_image, |
| ImageDecodeCache::TracingInfo(), |
| @@ -590,7 +650,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentSize) { |
| DrawImage half_size_draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> half_size_task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| half_size_draw_image, ImageDecodeCache::TracingInfo(), &half_size_task); |
| @@ -599,7 +660,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentSize) { |
| DrawImage quarter_size_draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> quarter_size_task; |
| need_unref = cache.GetTaskForImageAndRef(quarter_size_draw_image, |
| ImageDecodeCache::TracingInfo(), |
| @@ -623,7 +685,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageDifferentImage) { |
| sk_sp<SkImage> first_image = CreateImage(100, 100); |
| DrawImage first_draw_image( |
| first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| - quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> first_task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| @@ -634,7 +697,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageDifferentImage) { |
| DrawImage second_draw_image( |
| second_image, |
| SkIRect::MakeWH(second_image->width(), second_image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> second_task; |
| need_unref = cache.GetTaskForImageAndRef( |
| second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| @@ -649,6 +713,55 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageDifferentImage) { |
| cache.UnrefImage(second_draw_image); |
| } |
| +TEST(SoftwareImageDecodeCacheTest, GetTaskForImageDifferentColorSpace) { |
| + TestSoftwareImageDecodeCache cache; |
| + bool is_decomposable = true; |
| + SkFilterQuality quality = kHigh_SkFilterQuality; |
| + |
| + gfx::ColorSpace color_space_a(gfx::ColorSpace::PrimaryID::XYZ_D50, |
| + gfx::ColorSpace::TransferID::IEC61966_2_1); |
| + gfx::ColorSpace color_space_b(gfx::ColorSpace::PrimaryID::SMPTE170M, |
|
vmpstr
2017/04/04 01:16:43
:D
|
| + gfx::ColorSpace::TransferID::IEC61966_2_1); |
| + gfx::ColorSpace color_space_c = gfx::ColorSpace::CreateSRGB(); |
| + |
| + sk_sp<SkImage> image = CreateImageWithColorSpace(100, 100, color_space_a); |
| + DrawImage first_draw_image( |
| + image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| + CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), color_space_b); |
| + scoped_refptr<TileTask> first_task; |
| + bool need_unref = cache.GetTaskForImageAndRef( |
| + first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| + EXPECT_TRUE(need_unref); |
| + EXPECT_TRUE(first_task); |
| + |
| + DrawImage second_draw_image( |
| + image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| + CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), color_space_c); |
| + scoped_refptr<TileTask> second_task; |
| + need_unref = cache.GetTaskForImageAndRef( |
| + second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| + EXPECT_TRUE(need_unref); |
| + EXPECT_TRUE(second_task); |
| + EXPECT_TRUE(first_task.get() != second_task.get()); |
| + |
| + DrawImage third_draw_image( |
| + image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| + CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), color_space_b); |
| + scoped_refptr<TileTask> third_task; |
| + need_unref = cache.GetTaskForImageAndRef( |
| + third_draw_image, ImageDecodeCache::TracingInfo(), &third_task); |
| + EXPECT_TRUE(need_unref); |
| + EXPECT_TRUE(third_task); |
| + EXPECT_TRUE(first_task.get() == third_task.get()); |
| + |
| + TestTileTaskRunner::ProcessTask(first_task.get()); |
| + TestTileTaskRunner::ProcessTask(second_task.get()); |
| + |
| + cache.UnrefImage(first_draw_image); |
| + cache.UnrefImage(second_draw_image); |
| + cache.UnrefImage(third_draw_image); |
| +} |
| + |
| TEST(SoftwareImageDecodeCacheTest, GetTaskForImageAlreadyDecoded) { |
| TestSoftwareImageDecodeCache cache; |
| bool is_decomposable = true; |
| @@ -657,7 +770,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageAlreadyDecoded) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| draw_image, ImageDecodeCache::TracingInfo(), &task); |
| @@ -687,7 +801,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageAlreadyPrerolled) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| draw_image, ImageDecodeCache::TracingInfo(), &task); |
| @@ -724,7 +839,8 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageCanceledGetsNewTask) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| draw_image, ImageDecodeCache::TracingInfo(), &task); |
| @@ -767,7 +883,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| draw_image, ImageDecodeCache::TracingInfo(), &task); |
| @@ -809,7 +926,8 @@ TEST(SoftwareImageDecodeCacheTest, GetDecodedImageForDraw) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| draw_image, ImageDecodeCache::TracingInfo(), &task); |
| @@ -842,7 +960,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image( |
| image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), |
| - quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| draw_image, ImageDecodeCache::TracingInfo(), &task); |
| @@ -874,7 +993,8 @@ TEST(SoftwareImageDecodeCacheTest, GetDecodedImageForDrawAtRasterDecode) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| DecodedDrawImage decoded_draw_image = |
| cache.GetDecodedImageForDraw(draw_image); |
| @@ -899,7 +1019,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| DecodedDrawImage decoded_draw_image = |
| cache.GetDecodedImageForDraw(draw_image); |
| @@ -930,7 +1051,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| DecodedDrawImage decoded_draw_image = |
| cache.GetDecodedImageForDraw(draw_image); |
| @@ -975,7 +1097,8 @@ TEST(SoftwareImageDecodeCacheTest, |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| DecodedDrawImage decoded_draw_image = |
| cache.GetDecodedImageForDraw(draw_image); |
| @@ -1020,7 +1143,8 @@ TEST(SoftwareImageDecodeCacheTest, ZeroSizedImagesAreSkipped) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1043,7 +1167,8 @@ TEST(SoftwareImageDecodeCacheTest, NonOverlappingSrcRectImagesAreSkipped) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image( |
| image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), |
| - quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1066,7 +1191,8 @@ TEST(SoftwareImageDecodeCacheTest, LowQualityFilterIsHandled) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1094,7 +1220,8 @@ TEST(SoftwareImageDecodeCacheTest, LowQualityScaledSubrectIsHandled) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1124,7 +1251,8 @@ TEST(SoftwareImageDecodeCacheTest, NoneQualityScaledSubrectIsHandled) { |
| sk_sp<SkImage> image = CreateImage(100, 100); |
| DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1155,7 +1283,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt01_5ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1187,7 +1316,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt1_0ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1219,7 +1349,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_75ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1251,7 +1382,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_5ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1283,7 +1415,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_49ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1315,7 +1448,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_1ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| quality, |
| - CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1347,7 +1481,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_01ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1379,7 +1514,8 @@ TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_001ScaleIsHandled) { |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.001f, 0.001f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.001f, 0.001f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task; |
| bool need_unref = cache.GetTaskForImageAndRef( |
| @@ -1403,10 +1539,12 @@ TEST(SoftwareImageDecodeCacheTest, |
| sk_sp<SkImage> image = CreateImage(500, 200); |
| DrawImage draw_image_50( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| + DefaultColorSpace()); |
| DrawImage draw_image_49( |
| image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| - CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); |
| + CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable), |
| + DefaultColorSpace()); |
| scoped_refptr<TileTask> task_50; |
| bool need_unref_50 = cache.GetTaskForImageAndRef( |