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 274f508cdf03a2997908a804ddf4999f1604ded4..b4bc472aeec554c8106afed362dfaa839fe3bc78 100644 |
--- a/cc/tiles/software_image_decode_cache_unittest.cc |
+++ b/cc/tiles/software_image_decode_cache_unittest.cc |
@@ -56,27 +56,61 @@ PaintImage CreatePaintImage(sk_sp<SkImage> image) { |
return PaintImage(s_paint_image_id, image); |
} |
-TEST(SoftwareImageDecodeCacheTest, ImageKeyLowQuality) { |
+TEST(SoftwareImageDecodeCacheTest, ImageKeyNoneQuality) { |
sk_sp<SkImage> image = CreateImage(100, 100); |
bool is_decomposable = true; |
- SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality}; |
- for (auto quality : qualities) { |
- DrawImage draw_image( |
- CreatePaintImage(image), |
- SkIRect::MakeWH(image->width(), image->height()), quality, |
- CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable), |
- DefaultColorSpace()); |
+ DrawImage draw_image(CreatePaintImage(image), |
+ SkIRect::MakeWH(image->width(), image->height()), |
+ kNone_SkFilterQuality, |
+ 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_TRUE(key.can_use_original_size_decode()); |
- // Since the original decode will be used, the locked_bytes is that of the |
- // original image. |
- EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
- } |
+ auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
+ EXPECT_EQ(image->uniqueID(), key.image_id()); |
+ EXPECT_EQ(kNone_SkFilterQuality, key.filter_quality()); |
+ EXPECT_EQ(100, key.target_size().width()); |
+ EXPECT_EQ(100, key.target_size().height()); |
+ EXPECT_TRUE(key.can_use_original_size_decode()); |
+ // Since the original decode will be used, the locked_bytes is that of the |
+ // original image. |
+ EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
+} |
+ |
+TEST(SoftwareImageDecodeCacheTest, |
+ ImageKeyLowQualityIncreasedToMediumIfDownscale) { |
+ sk_sp<SkImage> image = CreateImage(100, 100); |
+ bool is_decomposable = true; |
+ DrawImage draw_image(CreatePaintImage(image), |
+ SkIRect::MakeWH(image->width(), image->height()), |
+ kLow_SkFilterQuality, |
+ 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(kMedium_SkFilterQuality, key.filter_quality()); |
+ EXPECT_EQ(100, key.target_size().width()); |
+ EXPECT_EQ(100, key.target_size().height()); |
+ EXPECT_FALSE(key.can_use_original_size_decode()); |
+ EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
+} |
+ |
+TEST(SoftwareImageDecodeCacheTest, ImageKeyLowQualityKeptLowIfUpscale) { |
+ sk_sp<SkImage> image = CreateImage(100, 100); |
+ bool is_decomposable = true; |
+ DrawImage draw_image(CreatePaintImage(image), |
+ SkIRect::MakeWH(image->width(), image->height()), |
+ kLow_SkFilterQuality, |
+ CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
+ DefaultColorSpace()); |
+ |
+ auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
+ EXPECT_EQ(image->uniqueID(), key.image_id()); |
+ EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
+ EXPECT_EQ(100, key.target_size().width()); |
+ EXPECT_EQ(100, key.target_size().height()); |
+ EXPECT_TRUE(key.can_use_original_size_decode()); |
+ EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
} |
TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQuality) { |
@@ -492,7 +526,7 @@ TEST(SoftwareImageDecodeCacheTest, |
TEST(SoftwareImageDecodeCacheTest, OriginalDecodesAreEqual) { |
sk_sp<SkImage> image = CreateImage(100, 100); |
bool is_decomposable = true; |
- SkFilterQuality quality = kLow_SkFilterQuality; |
+ SkFilterQuality quality = kNone_SkFilterQuality; |
DrawImage draw_image( |
CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
@@ -501,7 +535,7 @@ TEST(SoftwareImageDecodeCacheTest, OriginalDecodesAreEqual) { |
auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); |
EXPECT_EQ(image->uniqueID(), key.image_id()); |
- EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
+ EXPECT_EQ(kNone_SkFilterQuality, key.filter_quality()); |
EXPECT_EQ(100, key.target_size().width()); |
EXPECT_EQ(100, key.target_size().height()); |
EXPECT_TRUE(key.can_use_original_size_decode()); |
@@ -514,7 +548,7 @@ TEST(SoftwareImageDecodeCacheTest, OriginalDecodesAreEqual) { |
auto another_key = ImageDecodeCacheKey::FromDrawImage(another_draw_image); |
EXPECT_EQ(image->uniqueID(), another_key.image_id()); |
- EXPECT_EQ(kLow_SkFilterQuality, another_key.filter_quality()); |
+ EXPECT_EQ(kNone_SkFilterQuality, another_key.filter_quality()); |
EXPECT_EQ(100, another_key.target_size().width()); |
EXPECT_EQ(100, another_key.target_size().height()); |
EXPECT_TRUE(another_key.can_use_original_size_decode()); |
@@ -612,24 +646,24 @@ TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentQuality) { |
EXPECT_TRUE(need_unref); |
EXPECT_TRUE(high_quality_task); |
- DrawImage low_quality_draw_image( |
+ DrawImage none_quality_draw_image( |
CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
- kLow_SkFilterQuality, |
+ kNone_SkFilterQuality, |
CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
DefaultColorSpace()); |
- scoped_refptr<TileTask> low_quality_task; |
- need_unref = cache.GetTaskForImageAndRef(low_quality_draw_image, |
+ scoped_refptr<TileTask> none_quality_task; |
+ need_unref = cache.GetTaskForImageAndRef(none_quality_draw_image, |
ImageDecodeCache::TracingInfo(), |
- &low_quality_task); |
+ &none_quality_task); |
EXPECT_TRUE(need_unref); |
- EXPECT_TRUE(low_quality_task); |
- EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); |
+ EXPECT_TRUE(none_quality_task); |
+ EXPECT_TRUE(high_quality_task.get() != none_quality_task.get()); |
TestTileTaskRunner::ProcessTask(high_quality_task.get()); |
- TestTileTaskRunner::ProcessTask(low_quality_task.get()); |
+ TestTileTaskRunner::ProcessTask(none_quality_task.get()); |
cache.UnrefImage(high_quality_draw_image); |
- cache.UnrefImage(low_quality_draw_image); |
+ cache.UnrefImage(none_quality_draw_image); |
} |
TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentSize) { |
@@ -1243,7 +1277,10 @@ TEST(SoftwareImageDecodeCacheTest, LowQualityScaledSubrectIsHandled) { |
// SkImage object. |
EXPECT_TRUE(decoded_draw_image.image() != image); |
EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
- EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); |
+ // Low quality will be upgraded to medium and mip-mapped. |
+ EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
+ EXPECT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
+ EXPECT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
cache.UnrefImage(draw_image); |