Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Unified Diff: cc/tiles/software_image_decode_cache_unittest.cc

Issue 2870753002: SW Image Decode Cache Low to Medium Quality for Downscale (Closed)
Patch Set: rebaseline Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698