OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "cc/tiles/image_decode_controller.h" |
| 6 |
| 7 #include "cc/playback/draw_image.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 |
| 10 namespace cc { |
| 11 namespace { |
| 12 |
| 13 skia::RefPtr<SkImage> CreateImage(int width, int height) { |
| 14 SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); |
| 15 SkBitmap bitmap; |
| 16 bitmap.allocPixels(info); |
| 17 return skia::AdoptRef(SkImage::NewFromBitmap(bitmap)); |
| 18 } |
| 19 |
| 20 TEST(ImageDecodeControllerTest, ImageKeyLowQuality) { |
| 21 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 22 bool has_perspective = false; |
| 23 bool is_decomposable = true; |
| 24 SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality}; |
| 25 for (auto quality : qualities) { |
| 26 DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality, |
| 27 has_perspective, is_decomposable); |
| 28 |
| 29 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 30 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 31 EXPECT_EQ(quality, key.filter_quality()); |
| 32 EXPECT_EQ(50, key.target_size().width()); |
| 33 EXPECT_EQ(150, key.target_size().height()); |
| 34 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); |
| 35 } |
| 36 } |
| 37 |
| 38 TEST(ImageDecodeControllerTest, ImageKeyMediumQuality) { |
| 39 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 40 bool has_perspective = false; |
| 41 bool is_decomposable = true; |
| 42 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 43 |
| 44 DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality, |
| 45 has_perspective, is_decomposable); |
| 46 |
| 47 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 48 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 49 EXPECT_EQ(quality, key.filter_quality()); |
| 50 EXPECT_EQ(50, key.target_size().width()); |
| 51 EXPECT_EQ(150, key.target_size().height()); |
| 52 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); |
| 53 } |
| 54 |
| 55 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityEvenWithPerspective) { |
| 56 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 57 bool has_perspective = true; |
| 58 bool is_decomposable = true; |
| 59 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 60 |
| 61 DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality, |
| 62 has_perspective, is_decomposable); |
| 63 |
| 64 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 65 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 66 EXPECT_EQ(quality, key.filter_quality()); |
| 67 EXPECT_EQ(50, key.target_size().width()); |
| 68 EXPECT_EQ(150, key.target_size().height()); |
| 69 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); |
| 70 } |
| 71 |
| 72 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfEnlarging) { |
| 73 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 74 bool has_perspective = false; |
| 75 bool is_decomposable = true; |
| 76 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 77 |
| 78 DrawImage draw_image(image.get(), SkSize::Make(1.5f, 1.5f), quality, |
| 79 has_perspective, is_decomposable); |
| 80 |
| 81 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 82 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 83 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 84 EXPECT_EQ(150, key.target_size().width()); |
| 85 EXPECT_EQ(150, key.target_size().height()); |
| 86 EXPECT_EQ(150u * 150u * 4u, key.target_bytes()); |
| 87 } |
| 88 |
| 89 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfIdentity) { |
| 90 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 91 bool has_perspective = false; |
| 92 bool is_decomposable = true; |
| 93 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 94 |
| 95 DrawImage draw_image(image.get(), SkSize::Make(1.f, 1.f), quality, |
| 96 has_perspective, is_decomposable); |
| 97 |
| 98 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 99 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 100 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 101 EXPECT_EQ(100, key.target_size().width()); |
| 102 EXPECT_EQ(100, key.target_size().height()); |
| 103 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); |
| 104 } |
| 105 |
| 106 TEST(ImageDecodeControllerTest, |
| 107 ImageKeyMediumQualityDropToLowIfNotDecomposable) { |
| 108 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 109 bool has_perspective = false; |
| 110 bool is_decomposable = false; |
| 111 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 112 |
| 113 DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality, |
| 114 has_perspective, is_decomposable); |
| 115 |
| 116 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 117 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 118 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 119 EXPECT_EQ(50, key.target_size().width()); |
| 120 EXPECT_EQ(150, key.target_size().height()); |
| 121 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); |
| 122 } |
| 123 |
| 124 TEST(ImageDecodeControllerTest, ImageKeyHighQuality) { |
| 125 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 126 bool has_perspective = false; |
| 127 bool is_decomposable = true; |
| 128 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 129 |
| 130 DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality, |
| 131 has_perspective, is_decomposable); |
| 132 |
| 133 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 134 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 135 EXPECT_EQ(quality, key.filter_quality()); |
| 136 EXPECT_EQ(50, key.target_size().width()); |
| 137 EXPECT_EQ(150, key.target_size().height()); |
| 138 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); |
| 139 } |
| 140 |
| 141 TEST(ImageDecodeControllerTest, |
| 142 ImageKeyHighQualityDropToMediumWithPerspective) { |
| 143 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 144 bool has_perspective = true; |
| 145 bool is_decomposable = true; |
| 146 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 147 |
| 148 DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality, |
| 149 has_perspective, is_decomposable); |
| 150 |
| 151 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 152 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 153 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); |
| 154 EXPECT_EQ(50, key.target_size().width()); |
| 155 EXPECT_EQ(150, key.target_size().height()); |
| 156 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); |
| 157 } |
| 158 |
| 159 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNotDecomposable) { |
| 160 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 161 bool has_perspective = false; |
| 162 bool is_decomposable = false; |
| 163 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 164 |
| 165 DrawImage draw_image(image.get(), SkSize::Make(0.5f, 1.5f), quality, |
| 166 has_perspective, is_decomposable); |
| 167 |
| 168 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 169 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 170 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 171 EXPECT_EQ(50, key.target_size().width()); |
| 172 EXPECT_EQ(150, key.target_size().height()); |
| 173 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); |
| 174 } |
| 175 |
| 176 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfIdentity) { |
| 177 skia::RefPtr<SkImage> image = CreateImage(100, 100); |
| 178 bool has_perspective = false; |
| 179 bool is_decomposable = true; |
| 180 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 181 |
| 182 DrawImage draw_image(image.get(), SkSize::Make(1.f, 1.f), quality, |
| 183 has_perspective, is_decomposable); |
| 184 |
| 185 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 186 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 187 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 188 EXPECT_EQ(100, key.target_size().width()); |
| 189 EXPECT_EQ(100, key.target_size().height()); |
| 190 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); |
| 191 } |
| 192 |
| 193 } // namespace |
| 194 } // namespace cc |
OLD | NEW |