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

Side by Side Diff: cc/tiles/software_image_decode_cache_unittest.cc

Issue 2797583002: cc: Add color space to image decode caches (Closed)
Patch Set: Remove dead code Created 3 years, 8 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 unified diff | Download patch
« no previous file with comments | « cc/tiles/software_image_decode_cache_perftest.cc ('k') | cc/tiles/tile_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/tiles/software_image_decode_cache.h" 5 #include "cc/tiles/software_image_decode_cache.h"
6 6
7 #include "cc/paint/draw_image.h" 7 #include "cc/paint/draw_image.h"
8 #include "cc/resources/resource_format.h" 8 #include "cc/resources/resource_format.h"
9 #include "cc/test/test_tile_task_runner.h" 9 #include "cc/test/test_tile_task_runner.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/skia/include/core/SkRefCnt.h" 11 #include "third_party/skia/include/core/SkRefCnt.h"
12 12
13 namespace cc { 13 namespace cc {
14 namespace { 14 namespace {
15 15
16 gfx::ColorSpace DefaultColorSpace() {
17 return gfx::ColorSpace::CreateSRGB();
18 }
19
16 size_t kLockedMemoryLimitBytes = 128 * 1024 * 1024; 20 size_t kLockedMemoryLimitBytes = 128 * 1024 * 1024;
17 class TestSoftwareImageDecodeCache : public SoftwareImageDecodeCache { 21 class TestSoftwareImageDecodeCache : public SoftwareImageDecodeCache {
18 public: 22 public:
19 TestSoftwareImageDecodeCache() 23 TestSoftwareImageDecodeCache()
20 : SoftwareImageDecodeCache(ResourceFormat::RGBA_8888, 24 : SoftwareImageDecodeCache(ResourceFormat::RGBA_8888,
21 kLockedMemoryLimitBytes) {} 25 kLockedMemoryLimitBytes) {}
22 }; 26 };
23 27
28 sk_sp<SkImage> CreateImageWithColorSpace(int width,
29 int height,
30 const gfx::ColorSpace& color_space) {
31 SkBitmap bitmap;
32 bitmap.allocPixels(
33 SkImageInfo::MakeN32Premul(width, height, color_space.ToSkColorSpace()));
34 return SkImage::MakeFromBitmap(bitmap);
35 }
36
24 sk_sp<SkImage> CreateImage(int width, int height) { 37 sk_sp<SkImage> CreateImage(int width, int height) {
25 SkBitmap bitmap; 38 return CreateImageWithColorSpace(width, height, DefaultColorSpace());
26 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height));
27 return SkImage::MakeFromBitmap(bitmap);
28 } 39 }
29 40
30 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { 41 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) {
31 SkMatrix matrix; 42 SkMatrix matrix;
32 matrix.setScale(scale.width(), scale.height()); 43 matrix.setScale(scale.width(), scale.height());
33 44
34 if (!is_decomposable) { 45 if (!is_decomposable) {
35 // Perspective is not decomposable, add it. 46 // Perspective is not decomposable, add it.
36 matrix[SkMatrix::kMPersp0] = 0.1f; 47 matrix[SkMatrix::kMPersp0] = 0.1f;
37 } 48 }
38 49
39 return matrix; 50 return matrix;
40 } 51 }
41 52
42 TEST(SoftwareImageDecodeCacheTest, ImageKeyLowQuality) { 53 TEST(SoftwareImageDecodeCacheTest, ImageKeyLowQuality) {
43 sk_sp<SkImage> image = CreateImage(100, 100); 54 sk_sp<SkImage> image = CreateImage(100, 100);
44 bool is_decomposable = true; 55 bool is_decomposable = true;
45 SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality}; 56 SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality};
46 for (auto quality : qualities) { 57 for (auto quality : qualities) {
47 DrawImage draw_image( 58 DrawImage draw_image(
48 image, SkIRect::MakeWH(image->width(), image->height()), quality, 59 image, SkIRect::MakeWH(image->width(), image->height()), quality,
49 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); 60 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable),
61 DefaultColorSpace());
50 62
51 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 63 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
52 EXPECT_EQ(image->uniqueID(), key.image_id()); 64 EXPECT_EQ(image->uniqueID(), key.image_id());
53 EXPECT_EQ(quality, key.filter_quality()); 65 EXPECT_EQ(quality, key.filter_quality());
54 EXPECT_EQ(100, key.target_size().width()); 66 EXPECT_EQ(100, key.target_size().width());
55 EXPECT_EQ(100, key.target_size().height()); 67 EXPECT_EQ(100, key.target_size().height());
56 EXPECT_TRUE(key.can_use_original_decode()); 68 EXPECT_TRUE(key.can_use_original_size_decode());
57 // Since the original decode will be used, the locked_bytes is that of the 69 // Since the original decode will be used, the locked_bytes is that of the
58 // original image. 70 // original image.
59 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 71 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
60 } 72 }
61 } 73 }
62 74
63 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQuality) { 75 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQuality) {
64 sk_sp<SkImage> image = CreateImage(100, 100); 76 sk_sp<SkImage> image = CreateImage(100, 100);
65 bool is_decomposable = true; 77 bool is_decomposable = true;
66 SkFilterQuality quality = kMedium_SkFilterQuality; 78 SkFilterQuality quality = kMedium_SkFilterQuality;
67 79
68 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 80 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
69 quality, 81 quality,
70 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); 82 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable),
83 DefaultColorSpace());
71 84
72 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 85 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
73 EXPECT_EQ(image->uniqueID(), key.image_id()); 86 EXPECT_EQ(image->uniqueID(), key.image_id());
74 EXPECT_EQ(quality, key.filter_quality()); 87 EXPECT_EQ(quality, key.filter_quality());
75 EXPECT_EQ(100, key.target_size().width()); 88 EXPECT_EQ(100, key.target_size().width());
76 EXPECT_EQ(100, key.target_size().height()); 89 EXPECT_EQ(100, key.target_size().height());
77 EXPECT_FALSE(key.can_use_original_decode()); 90 EXPECT_FALSE(key.can_use_original_size_decode());
78 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 91 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
79 } 92 }
80 93
81 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityDropToLowIfEnlarging) { 94 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityDropToLowIfEnlarging) {
82 sk_sp<SkImage> image = CreateImage(100, 100); 95 sk_sp<SkImage> image = CreateImage(100, 100);
83 bool is_decomposable = true; 96 bool is_decomposable = true;
84 SkFilterQuality quality = kMedium_SkFilterQuality; 97 SkFilterQuality quality = kMedium_SkFilterQuality;
85 98
86 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 99 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
87 quality, 100 quality,
88 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); 101 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable),
102 DefaultColorSpace());
89 103
90 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 104 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
91 EXPECT_EQ(image->uniqueID(), key.image_id()); 105 EXPECT_EQ(image->uniqueID(), key.image_id());
92 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 106 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
93 EXPECT_EQ(100, key.target_size().width()); 107 EXPECT_EQ(100, key.target_size().width());
94 EXPECT_EQ(100, key.target_size().height()); 108 EXPECT_EQ(100, key.target_size().height());
95 EXPECT_TRUE(key.can_use_original_decode()); 109 EXPECT_TRUE(key.can_use_original_size_decode());
96 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 110 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
97 } 111 }
98 112
99 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityDropToLowIfIdentity) { 113 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityDropToLowIfIdentity) {
100 sk_sp<SkImage> image = CreateImage(100, 100); 114 sk_sp<SkImage> image = CreateImage(100, 100);
101 bool is_decomposable = true; 115 bool is_decomposable = true;
102 SkFilterQuality quality = kMedium_SkFilterQuality; 116 SkFilterQuality quality = kMedium_SkFilterQuality;
103 117
104 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 118 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
105 quality, 119 quality,
106 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 120 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
121 DefaultColorSpace());
107 122
108 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 123 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
109 EXPECT_EQ(image->uniqueID(), key.image_id()); 124 EXPECT_EQ(image->uniqueID(), key.image_id());
110 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 125 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
111 EXPECT_EQ(100, key.target_size().width()); 126 EXPECT_EQ(100, key.target_size().width());
112 EXPECT_EQ(100, key.target_size().height()); 127 EXPECT_EQ(100, key.target_size().height());
113 EXPECT_TRUE(key.can_use_original_decode()); 128 EXPECT_TRUE(key.can_use_original_size_decode());
114 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 129 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
115 } 130 }
116 131
117 TEST(SoftwareImageDecodeCacheTest, 132 TEST(SoftwareImageDecodeCacheTest,
118 ImageKeyMediumQualityDropToLowIfNearlyIdentity) { 133 ImageKeyMediumQualityDropToLowIfNearlyIdentity) {
119 sk_sp<SkImage> image = CreateImage(100, 100); 134 sk_sp<SkImage> image = CreateImage(100, 100);
120 bool is_decomposable = true; 135 bool is_decomposable = true;
121 SkFilterQuality quality = kMedium_SkFilterQuality; 136 SkFilterQuality quality = kMedium_SkFilterQuality;
122 137
123 DrawImage draw_image( 138 DrawImage draw_image(
124 image, SkIRect::MakeWH(image->width(), image->height()), quality, 139 image, SkIRect::MakeWH(image->width(), image->height()), quality,
125 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); 140 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable),
141 DefaultColorSpace());
126 142
127 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 143 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
128 EXPECT_EQ(image->uniqueID(), key.image_id()); 144 EXPECT_EQ(image->uniqueID(), key.image_id());
129 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 145 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
130 EXPECT_EQ(100, key.target_size().width()); 146 EXPECT_EQ(100, key.target_size().width());
131 EXPECT_EQ(100, key.target_size().height()); 147 EXPECT_EQ(100, key.target_size().height());
132 EXPECT_TRUE(key.can_use_original_decode()); 148 EXPECT_TRUE(key.can_use_original_size_decode());
133 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 149 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
134 } 150 }
135 151
136 TEST(SoftwareImageDecodeCacheTest, 152 TEST(SoftwareImageDecodeCacheTest,
137 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) { 153 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) {
138 sk_sp<SkImage> image = CreateImage(100, 100); 154 sk_sp<SkImage> image = CreateImage(100, 100);
139 bool is_decomposable = true; 155 bool is_decomposable = true;
140 SkFilterQuality quality = kMedium_SkFilterQuality; 156 SkFilterQuality quality = kMedium_SkFilterQuality;
141 157
142 DrawImage draw_image( 158 DrawImage draw_image(
143 image, SkIRect::MakeWH(image->width(), image->height()), quality, 159 image, SkIRect::MakeWH(image->width(), image->height()), quality,
144 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); 160 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable),
161 DefaultColorSpace());
145 162
146 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 163 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
147 EXPECT_EQ(image->uniqueID(), key.image_id()); 164 EXPECT_EQ(image->uniqueID(), key.image_id());
148 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 165 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
149 EXPECT_EQ(100, key.target_size().width()); 166 EXPECT_EQ(100, key.target_size().width());
150 EXPECT_EQ(100, key.target_size().height()); 167 EXPECT_EQ(100, key.target_size().height());
151 EXPECT_TRUE(key.can_use_original_decode()); 168 EXPECT_TRUE(key.can_use_original_size_decode());
152 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 169 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
153 } 170 }
154 171
155 TEST(SoftwareImageDecodeCacheTest, 172 TEST(SoftwareImageDecodeCacheTest,
156 ImageKeyMediumQualityDropToLowIfNotDecomposable) { 173 ImageKeyMediumQualityDropToLowIfNotDecomposable) {
157 sk_sp<SkImage> image = CreateImage(100, 100); 174 sk_sp<SkImage> image = CreateImage(100, 100);
158 bool is_decomposable = false; 175 bool is_decomposable = false;
159 SkFilterQuality quality = kMedium_SkFilterQuality; 176 SkFilterQuality quality = kMedium_SkFilterQuality;
160 177
161 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 178 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
162 quality, 179 quality,
163 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); 180 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable),
181 DefaultColorSpace());
164 182
165 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 183 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
166 EXPECT_EQ(image->uniqueID(), key.image_id()); 184 EXPECT_EQ(image->uniqueID(), key.image_id());
167 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 185 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
168 EXPECT_EQ(100, key.target_size().width()); 186 EXPECT_EQ(100, key.target_size().width());
169 EXPECT_EQ(100, key.target_size().height()); 187 EXPECT_EQ(100, key.target_size().height());
170 EXPECT_TRUE(key.can_use_original_decode()); 188 EXPECT_TRUE(key.can_use_original_size_decode());
171 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 189 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
172 } 190 }
173 191
174 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt1_5Scale) { 192 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt1_5Scale) {
175 sk_sp<SkImage> image = CreateImage(500, 200); 193 sk_sp<SkImage> image = CreateImage(500, 200);
176 bool is_decomposable = true; 194 bool is_decomposable = true;
177 SkFilterQuality quality = kMedium_SkFilterQuality; 195 SkFilterQuality quality = kMedium_SkFilterQuality;
178 196
179 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 197 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
180 quality, 198 quality,
181 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); 199 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable),
200 DefaultColorSpace());
182 201
183 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 202 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
184 EXPECT_EQ(image->uniqueID(), key.image_id()); 203 EXPECT_EQ(image->uniqueID(), key.image_id());
185 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 204 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
186 EXPECT_EQ(500, key.target_size().width()); 205 EXPECT_EQ(500, key.target_size().width());
187 EXPECT_EQ(200, key.target_size().height()); 206 EXPECT_EQ(200, key.target_size().height());
188 EXPECT_TRUE(key.can_use_original_decode()); 207 EXPECT_TRUE(key.can_use_original_size_decode());
189 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes()); 208 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes());
190 } 209 }
191 210
192 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt1_0cale) { 211 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt1_0cale) {
193 sk_sp<SkImage> image = CreateImage(500, 200); 212 sk_sp<SkImage> image = CreateImage(500, 200);
194 bool is_decomposable = true; 213 bool is_decomposable = true;
195 SkFilterQuality quality = kMedium_SkFilterQuality; 214 SkFilterQuality quality = kMedium_SkFilterQuality;
196 215
197 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 216 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
198 quality, 217 quality,
199 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 218 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
219 DefaultColorSpace());
200 220
201 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 221 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
202 EXPECT_EQ(image->uniqueID(), key.image_id()); 222 EXPECT_EQ(image->uniqueID(), key.image_id());
203 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 223 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
204 EXPECT_EQ(500, key.target_size().width()); 224 EXPECT_EQ(500, key.target_size().width());
205 EXPECT_EQ(200, key.target_size().height()); 225 EXPECT_EQ(200, key.target_size().height());
206 EXPECT_TRUE(key.can_use_original_decode()); 226 EXPECT_TRUE(key.can_use_original_size_decode());
207 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes()); 227 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes());
208 } 228 }
209 229
210 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_75Scale) { 230 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_75Scale) {
211 sk_sp<SkImage> image = CreateImage(500, 200); 231 sk_sp<SkImage> image = CreateImage(500, 200);
212 bool is_decomposable = true; 232 bool is_decomposable = true;
213 SkFilterQuality quality = kMedium_SkFilterQuality; 233 SkFilterQuality quality = kMedium_SkFilterQuality;
214 234
215 DrawImage draw_image( 235 DrawImage draw_image(
216 image, SkIRect::MakeWH(image->width(), image->height()), quality, 236 image, SkIRect::MakeWH(image->width(), image->height()), quality,
217 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable)); 237 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable),
238 DefaultColorSpace());
218 239
219 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 240 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
220 EXPECT_EQ(image->uniqueID(), key.image_id()); 241 EXPECT_EQ(image->uniqueID(), key.image_id());
221 EXPECT_EQ(quality, key.filter_quality()); 242 EXPECT_EQ(quality, key.filter_quality());
222 EXPECT_EQ(500, key.target_size().width()); 243 EXPECT_EQ(500, key.target_size().width());
223 EXPECT_EQ(200, key.target_size().height()); 244 EXPECT_EQ(200, key.target_size().height());
224 EXPECT_FALSE(key.can_use_original_decode()); 245 EXPECT_FALSE(key.can_use_original_size_decode());
225 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes()); 246 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes());
226 } 247 }
227 248
228 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_5Scale) { 249 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_5Scale) {
229 sk_sp<SkImage> image = CreateImage(500, 200); 250 sk_sp<SkImage> image = CreateImage(500, 200);
230 bool is_decomposable = true; 251 bool is_decomposable = true;
231 SkFilterQuality quality = kMedium_SkFilterQuality; 252 SkFilterQuality quality = kMedium_SkFilterQuality;
232 253
233 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 254 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
234 quality, 255 quality,
235 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 256 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
257 DefaultColorSpace());
236 258
237 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 259 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
238 EXPECT_EQ(image->uniqueID(), key.image_id()); 260 EXPECT_EQ(image->uniqueID(), key.image_id());
239 EXPECT_EQ(quality, key.filter_quality()); 261 EXPECT_EQ(quality, key.filter_quality());
240 EXPECT_EQ(250, key.target_size().width()); 262 EXPECT_EQ(250, key.target_size().width());
241 EXPECT_EQ(100, key.target_size().height()); 263 EXPECT_EQ(100, key.target_size().height());
242 EXPECT_FALSE(key.can_use_original_decode()); 264 EXPECT_FALSE(key.can_use_original_size_decode());
243 EXPECT_EQ(250u * 100u * 4u, key.locked_bytes()); 265 EXPECT_EQ(250u * 100u * 4u, key.locked_bytes());
244 } 266 }
245 267
246 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_49Scale) { 268 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_49Scale) {
247 sk_sp<SkImage> image = CreateImage(500, 200); 269 sk_sp<SkImage> image = CreateImage(500, 200);
248 bool is_decomposable = true; 270 bool is_decomposable = true;
249 SkFilterQuality quality = kMedium_SkFilterQuality; 271 SkFilterQuality quality = kMedium_SkFilterQuality;
250 272
251 DrawImage draw_image( 273 DrawImage draw_image(
252 image, SkIRect::MakeWH(image->width(), image->height()), quality, 274 image, SkIRect::MakeWH(image->width(), image->height()), quality,
253 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); 275 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable),
276 DefaultColorSpace());
254 277
255 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 278 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
256 EXPECT_EQ(image->uniqueID(), key.image_id()); 279 EXPECT_EQ(image->uniqueID(), key.image_id());
257 EXPECT_EQ(quality, key.filter_quality()); 280 EXPECT_EQ(quality, key.filter_quality());
258 EXPECT_EQ(250, key.target_size().width()); 281 EXPECT_EQ(250, key.target_size().width());
259 EXPECT_EQ(100, key.target_size().height()); 282 EXPECT_EQ(100, key.target_size().height());
260 EXPECT_FALSE(key.can_use_original_decode()); 283 EXPECT_FALSE(key.can_use_original_size_decode());
261 EXPECT_EQ(250u * 100u * 4u, key.locked_bytes()); 284 EXPECT_EQ(250u * 100u * 4u, key.locked_bytes());
262 } 285 }
263 286
264 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_1Scale) { 287 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_1Scale) {
265 sk_sp<SkImage> image = CreateImage(500, 200); 288 sk_sp<SkImage> image = CreateImage(500, 200);
266 bool is_decomposable = true; 289 bool is_decomposable = true;
267 SkFilterQuality quality = kMedium_SkFilterQuality; 290 SkFilterQuality quality = kMedium_SkFilterQuality;
268 291
269 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 292 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
270 quality, 293 quality,
271 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable)); 294 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable),
295 DefaultColorSpace());
272 296
273 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 297 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
274 EXPECT_EQ(image->uniqueID(), key.image_id()); 298 EXPECT_EQ(image->uniqueID(), key.image_id());
275 EXPECT_EQ(quality, key.filter_quality()); 299 EXPECT_EQ(quality, key.filter_quality());
276 EXPECT_EQ(62, key.target_size().width()); 300 EXPECT_EQ(62, key.target_size().width());
277 EXPECT_EQ(25, key.target_size().height()); 301 EXPECT_EQ(25, key.target_size().height());
278 EXPECT_FALSE(key.can_use_original_decode()); 302 EXPECT_FALSE(key.can_use_original_size_decode());
279 EXPECT_EQ(62u * 25u * 4u, key.locked_bytes()); 303 EXPECT_EQ(62u * 25u * 4u, key.locked_bytes());
280 } 304 }
281 305
282 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_01Scale) { 306 TEST(SoftwareImageDecodeCacheTest, ImageKeyMediumQualityAt0_01Scale) {
283 sk_sp<SkImage> image = CreateImage(500, 200); 307 sk_sp<SkImage> image = CreateImage(500, 200);
284 bool is_decomposable = true; 308 bool is_decomposable = true;
285 SkFilterQuality quality = kMedium_SkFilterQuality; 309 SkFilterQuality quality = kMedium_SkFilterQuality;
286 310
287 DrawImage draw_image( 311 DrawImage draw_image(
288 image, SkIRect::MakeWH(image->width(), image->height()), quality, 312 image, SkIRect::MakeWH(image->width(), image->height()), quality,
289 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable)); 313 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable),
314 DefaultColorSpace());
290 315
291 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 316 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
292 EXPECT_EQ(image->uniqueID(), key.image_id()); 317 EXPECT_EQ(image->uniqueID(), key.image_id());
293 EXPECT_EQ(quality, key.filter_quality()); 318 EXPECT_EQ(quality, key.filter_quality());
294 EXPECT_EQ(7, key.target_size().width()); 319 EXPECT_EQ(7, key.target_size().width());
295 EXPECT_EQ(3, key.target_size().height()); 320 EXPECT_EQ(3, key.target_size().height());
296 EXPECT_FALSE(key.can_use_original_decode()); 321 EXPECT_FALSE(key.can_use_original_size_decode());
297 EXPECT_EQ(7u * 3u * 4u, key.locked_bytes()); 322 EXPECT_EQ(7u * 3u * 4u, key.locked_bytes());
298 } 323 }
299 324
300 TEST(SoftwareImageDecodeCacheTest, 325 TEST(SoftwareImageDecodeCacheTest,
301 ImageKeyPartialDowscalesDropsHighQualityToMedium) { 326 ImageKeyPartialDowscalesDropsHighQualityToMedium) {
302 sk_sp<SkImage> image = CreateImage(100, 100); 327 sk_sp<SkImage> image = CreateImage(100, 100);
303 bool is_decomposable = true; 328 bool is_decomposable = true;
304 SkFilterQuality quality = kHigh_SkFilterQuality; 329 SkFilterQuality quality = kHigh_SkFilterQuality;
305 330
306 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 331 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
307 quality, 332 quality,
308 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); 333 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable),
334 DefaultColorSpace());
309 335
310 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 336 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
311 EXPECT_EQ(image->uniqueID(), key.image_id()); 337 EXPECT_EQ(image->uniqueID(), key.image_id());
312 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 338 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
313 EXPECT_EQ(100, key.target_size().width()); 339 EXPECT_EQ(100, key.target_size().width());
314 EXPECT_EQ(100, key.target_size().height()); 340 EXPECT_EQ(100, key.target_size().height());
315 EXPECT_FALSE(key.can_use_original_decode()); 341 EXPECT_FALSE(key.can_use_original_size_decode());
316 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 342 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
317 } 343 }
318 344
319 TEST(SoftwareImageDecodeCacheTest, 345 TEST(SoftwareImageDecodeCacheTest,
320 ImageKeyFullDowscalesDropsHighQualityToMedium) { 346 ImageKeyFullDowscalesDropsHighQualityToMedium) {
321 sk_sp<SkImage> image = CreateImage(100, 100); 347 sk_sp<SkImage> image = CreateImage(100, 100);
322 bool is_decomposable = true; 348 bool is_decomposable = true;
323 SkFilterQuality quality = kHigh_SkFilterQuality; 349 SkFilterQuality quality = kHigh_SkFilterQuality;
324 350
325 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 351 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
326 quality, 352 quality,
327 CreateMatrix(SkSize::Make(0.5f, 0.2f), is_decomposable)); 353 CreateMatrix(SkSize::Make(0.5f, 0.2f), is_decomposable),
354 DefaultColorSpace());
328 355
329 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 356 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
330 EXPECT_EQ(image->uniqueID(), key.image_id()); 357 EXPECT_EQ(image->uniqueID(), key.image_id());
331 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 358 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
332 EXPECT_EQ(50, key.target_size().width()); 359 EXPECT_EQ(50, key.target_size().width());
333 EXPECT_EQ(50, key.target_size().height()); 360 EXPECT_EQ(50, key.target_size().height());
334 EXPECT_FALSE(key.can_use_original_decode()); 361 EXPECT_FALSE(key.can_use_original_size_decode());
335 EXPECT_EQ(50u * 50u * 4u, key.locked_bytes()); 362 EXPECT_EQ(50u * 50u * 4u, key.locked_bytes());
336 } 363 }
337 364
338 TEST(SoftwareImageDecodeCacheTest, ImageKeyDowscalesHighQuality) { 365 TEST(SoftwareImageDecodeCacheTest, ImageKeyDowscalesHighQuality) {
339 sk_sp<SkImage> image = CreateImage(100, 100); 366 sk_sp<SkImage> image = CreateImage(100, 100);
340 bool is_decomposable = true; 367 bool is_decomposable = true;
341 SkFilterQuality quality = kHigh_SkFilterQuality; 368 SkFilterQuality quality = kHigh_SkFilterQuality;
342 369
343 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 370 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
344 quality, 371 quality,
345 CreateMatrix(SkSize::Make(2.5f, 1.5f), is_decomposable)); 372 CreateMatrix(SkSize::Make(2.5f, 1.5f), is_decomposable),
373 DefaultColorSpace());
346 374
347 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 375 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
348 EXPECT_EQ(image->uniqueID(), key.image_id()); 376 EXPECT_EQ(image->uniqueID(), key.image_id());
349 EXPECT_EQ(quality, key.filter_quality()); 377 EXPECT_EQ(quality, key.filter_quality());
350 EXPECT_EQ(250, key.target_size().width()); 378 EXPECT_EQ(250, key.target_size().width());
351 EXPECT_EQ(150, key.target_size().height()); 379 EXPECT_EQ(150, key.target_size().height());
352 EXPECT_FALSE(key.can_use_original_decode()); 380 EXPECT_FALSE(key.can_use_original_size_decode());
353 EXPECT_EQ(250u * 150u * 4u, key.locked_bytes()); 381 EXPECT_EQ(250u * 150u * 4u, key.locked_bytes());
354 } 382 }
355 383
356 TEST(SoftwareImageDecodeCacheTest, ImageKeyHighQualityDropToMediumIfTooLarge) { 384 TEST(SoftwareImageDecodeCacheTest, ImageKeyHighQualityDropToMediumIfTooLarge) {
357 // Just over 64MB when scaled. 385 // Just over 64MB when scaled.
358 sk_sp<SkImage> image = CreateImage(4555, 2048); 386 sk_sp<SkImage> image = CreateImage(4555, 2048);
359 bool is_decomposable = true; 387 bool is_decomposable = true;
360 SkFilterQuality quality = kHigh_SkFilterQuality; 388 SkFilterQuality quality = kHigh_SkFilterQuality;
361 389
362 // At least one dimension should scale down, so that medium quality doesn't 390 // At least one dimension should scale down, so that medium quality doesn't
363 // become low. 391 // become low.
364 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 392 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
365 quality, 393 quality,
366 CreateMatrix(SkSize::Make(0.9f, 2.f), is_decomposable)); 394 CreateMatrix(SkSize::Make(0.9f, 2.f), is_decomposable),
395 DefaultColorSpace());
367 396
368 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 397 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
369 EXPECT_EQ(image->uniqueID(), key.image_id()); 398 EXPECT_EQ(image->uniqueID(), key.image_id());
370 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 399 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
371 EXPECT_EQ(4555, key.target_size().width()); 400 EXPECT_EQ(4555, key.target_size().width());
372 EXPECT_EQ(2048, key.target_size().height()); 401 EXPECT_EQ(2048, key.target_size().height());
373 EXPECT_FALSE(key.can_use_original_decode()); 402 EXPECT_FALSE(key.can_use_original_size_decode());
374 EXPECT_EQ(4555u * 2048u * 4u, key.locked_bytes()); 403 EXPECT_EQ(4555u * 2048u * 4u, key.locked_bytes());
375 } 404 }
376 405
377 TEST(SoftwareImageDecodeCacheTest, 406 TEST(SoftwareImageDecodeCacheTest,
378 ImageKeyHighQualityDropToLowIfNotDecomposable) { 407 ImageKeyHighQualityDropToLowIfNotDecomposable) {
379 sk_sp<SkImage> image = CreateImage(100, 100); 408 sk_sp<SkImage> image = CreateImage(100, 100);
380 bool is_decomposable = false; 409 bool is_decomposable = false;
381 SkFilterQuality quality = kHigh_SkFilterQuality; 410 SkFilterQuality quality = kHigh_SkFilterQuality;
382 411
383 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 412 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
384 quality, 413 quality,
385 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); 414 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable),
415 DefaultColorSpace());
386 416
387 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 417 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
388 EXPECT_EQ(image->uniqueID(), key.image_id()); 418 EXPECT_EQ(image->uniqueID(), key.image_id());
389 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 419 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
390 EXPECT_EQ(100, key.target_size().width()); 420 EXPECT_EQ(100, key.target_size().width());
391 EXPECT_EQ(100, key.target_size().height()); 421 EXPECT_EQ(100, key.target_size().height());
392 EXPECT_TRUE(key.can_use_original_decode()); 422 EXPECT_TRUE(key.can_use_original_size_decode());
393 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 423 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
394 } 424 }
395 425
396 TEST(SoftwareImageDecodeCacheTest, ImageKeyHighQualityDropToLowIfIdentity) { 426 TEST(SoftwareImageDecodeCacheTest, ImageKeyHighQualityDropToLowIfIdentity) {
397 sk_sp<SkImage> image = CreateImage(100, 100); 427 sk_sp<SkImage> image = CreateImage(100, 100);
398 bool is_decomposable = true; 428 bool is_decomposable = true;
399 SkFilterQuality quality = kHigh_SkFilterQuality; 429 SkFilterQuality quality = kHigh_SkFilterQuality;
400 430
401 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 431 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
402 quality, 432 quality,
403 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 433 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
434 DefaultColorSpace());
404 435
405 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 436 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
406 EXPECT_EQ(image->uniqueID(), key.image_id()); 437 EXPECT_EQ(image->uniqueID(), key.image_id());
407 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 438 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
408 EXPECT_EQ(100, key.target_size().width()); 439 EXPECT_EQ(100, key.target_size().width());
409 EXPECT_EQ(100, key.target_size().height()); 440 EXPECT_EQ(100, key.target_size().height());
410 EXPECT_TRUE(key.can_use_original_decode()); 441 EXPECT_TRUE(key.can_use_original_size_decode());
411 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 442 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
412 } 443 }
413 444
414 TEST(SoftwareImageDecodeCacheTest, 445 TEST(SoftwareImageDecodeCacheTest,
415 ImageKeyHighQualityDropToLowIfNearlyIdentity) { 446 ImageKeyHighQualityDropToLowIfNearlyIdentity) {
416 sk_sp<SkImage> image = CreateImage(100, 100); 447 sk_sp<SkImage> image = CreateImage(100, 100);
417 bool is_decomposable = true; 448 bool is_decomposable = true;
418 SkFilterQuality quality = kHigh_SkFilterQuality; 449 SkFilterQuality quality = kHigh_SkFilterQuality;
419 450
420 DrawImage draw_image( 451 DrawImage draw_image(
421 image, SkIRect::MakeWH(image->width(), image->height()), quality, 452 image, SkIRect::MakeWH(image->width(), image->height()), quality,
422 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); 453 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable),
454 DefaultColorSpace());
423 455
424 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 456 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
425 EXPECT_EQ(image->uniqueID(), key.image_id()); 457 EXPECT_EQ(image->uniqueID(), key.image_id());
426 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 458 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
427 EXPECT_EQ(100, key.target_size().width()); 459 EXPECT_EQ(100, key.target_size().width());
428 EXPECT_EQ(100, key.target_size().height()); 460 EXPECT_EQ(100, key.target_size().height());
429 EXPECT_TRUE(key.can_use_original_decode()); 461 EXPECT_TRUE(key.can_use_original_size_decode());
430 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 462 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
431 } 463 }
432 464
433 TEST(SoftwareImageDecodeCacheTest, 465 TEST(SoftwareImageDecodeCacheTest,
434 ImageKeyHighQualityDropToLowIfNearlyIdentity2) { 466 ImageKeyHighQualityDropToLowIfNearlyIdentity2) {
435 sk_sp<SkImage> image = CreateImage(100, 100); 467 sk_sp<SkImage> image = CreateImage(100, 100);
436 bool is_decomposable = true; 468 bool is_decomposable = true;
437 SkFilterQuality quality = kHigh_SkFilterQuality; 469 SkFilterQuality quality = kHigh_SkFilterQuality;
438 470
439 DrawImage draw_image( 471 DrawImage draw_image(
440 image, SkIRect::MakeWH(image->width(), image->height()), quality, 472 image, SkIRect::MakeWH(image->width(), image->height()), quality,
441 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); 473 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable),
474 DefaultColorSpace());
442 475
443 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 476 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
444 EXPECT_EQ(image->uniqueID(), key.image_id()); 477 EXPECT_EQ(image->uniqueID(), key.image_id());
445 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 478 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
446 EXPECT_EQ(100, key.target_size().width()); 479 EXPECT_EQ(100, key.target_size().width());
447 EXPECT_EQ(100, key.target_size().height()); 480 EXPECT_EQ(100, key.target_size().height());
448 EXPECT_TRUE(key.can_use_original_decode()); 481 EXPECT_TRUE(key.can_use_original_size_decode());
449 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 482 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
450 } 483 }
451 484
452 TEST(SoftwareImageDecodeCacheTest, OriginalDecodesAreEqual) { 485 TEST(SoftwareImageDecodeCacheTest, OriginalDecodesAreEqual) {
453 sk_sp<SkImage> image = CreateImage(100, 100); 486 sk_sp<SkImage> image = CreateImage(100, 100);
454 bool is_decomposable = true; 487 bool is_decomposable = true;
455 SkFilterQuality quality = kLow_SkFilterQuality; 488 SkFilterQuality quality = kLow_SkFilterQuality;
456 489
457 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 490 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
458 quality, 491 quality,
459 CreateMatrix(SkSize::Make(0.5f, 0.5), is_decomposable)); 492 CreateMatrix(SkSize::Make(0.5f, 0.5), is_decomposable),
493 DefaultColorSpace());
460 494
461 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 495 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
462 EXPECT_EQ(image->uniqueID(), key.image_id()); 496 EXPECT_EQ(image->uniqueID(), key.image_id());
463 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 497 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
464 EXPECT_EQ(100, key.target_size().width()); 498 EXPECT_EQ(100, key.target_size().width());
465 EXPECT_EQ(100, key.target_size().height()); 499 EXPECT_EQ(100, key.target_size().height());
466 EXPECT_TRUE(key.can_use_original_decode()); 500 EXPECT_TRUE(key.can_use_original_size_decode());
467 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 501 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
468 502
469 DrawImage another_draw_image( 503 DrawImage another_draw_image(
470 image, SkIRect::MakeWH(image->width(), image->height()), quality, 504 image, SkIRect::MakeWH(image->width(), image->height()), quality,
471 CreateMatrix(SkSize::Make(1.5f, 1.5), is_decomposable)); 505 CreateMatrix(SkSize::Make(1.5f, 1.5), is_decomposable),
506 DefaultColorSpace());
472 507
473 auto another_key = ImageDecodeCacheKey::FromDrawImage(another_draw_image); 508 auto another_key = ImageDecodeCacheKey::FromDrawImage(another_draw_image);
474 EXPECT_EQ(image->uniqueID(), another_key.image_id()); 509 EXPECT_EQ(image->uniqueID(), another_key.image_id());
475 EXPECT_EQ(kLow_SkFilterQuality, another_key.filter_quality()); 510 EXPECT_EQ(kLow_SkFilterQuality, another_key.filter_quality());
476 EXPECT_EQ(100, another_key.target_size().width()); 511 EXPECT_EQ(100, another_key.target_size().width());
477 EXPECT_EQ(100, another_key.target_size().height()); 512 EXPECT_EQ(100, another_key.target_size().height());
478 EXPECT_TRUE(another_key.can_use_original_decode()); 513 EXPECT_TRUE(another_key.can_use_original_size_decode());
479 EXPECT_EQ(100u * 100u * 4u, another_key.locked_bytes()); 514 EXPECT_EQ(100u * 100u * 4u, another_key.locked_bytes());
480 515
481 EXPECT_TRUE(key == another_key); 516 EXPECT_TRUE(key == another_key);
482 } 517 }
483 518
484 TEST(SoftwareImageDecodeCacheTest, ImageRectDoesNotContainSrcRect) { 519 TEST(SoftwareImageDecodeCacheTest, ImageRectDoesNotContainSrcRect) {
485 sk_sp<SkImage> image = CreateImage(100, 100); 520 sk_sp<SkImage> image = CreateImage(100, 100);
486 bool is_decomposable = true; 521 bool is_decomposable = true;
487 SkFilterQuality quality = kHigh_SkFilterQuality; 522 SkFilterQuality quality = kHigh_SkFilterQuality;
488 523
489 DrawImage draw_image( 524 DrawImage draw_image(
490 image, SkIRect::MakeXYWH(25, 35, image->width(), image->height()), 525 image, SkIRect::MakeXYWH(25, 35, image->width(), image->height()),
491 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 526 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
527 DefaultColorSpace());
492 528
493 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 529 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
494 EXPECT_EQ(image->uniqueID(), key.image_id()); 530 EXPECT_EQ(image->uniqueID(), key.image_id());
495 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 531 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
496 EXPECT_EQ(100, key.target_size().width()); 532 EXPECT_EQ(100, key.target_size().width());
497 EXPECT_EQ(100, key.target_size().height()); 533 EXPECT_EQ(100, key.target_size().height());
498 EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect()); 534 EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect());
499 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 535 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
500 } 536 }
501 537
502 TEST(SoftwareImageDecodeCacheTest, ImageRectDoesNotContainSrcRectWithScale) { 538 TEST(SoftwareImageDecodeCacheTest, ImageRectDoesNotContainSrcRectWithScale) {
503 sk_sp<SkImage> image = CreateImage(100, 100); 539 sk_sp<SkImage> image = CreateImage(100, 100);
504 bool is_decomposable = true; 540 bool is_decomposable = true;
505 SkFilterQuality quality = kHigh_SkFilterQuality; 541 SkFilterQuality quality = kHigh_SkFilterQuality;
506 542
507 DrawImage draw_image( 543 DrawImage draw_image(
508 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), 544 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()),
509 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 545 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
546 DefaultColorSpace());
510 547
511 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image); 548 auto key = ImageDecodeCacheKey::FromDrawImage(draw_image);
512 EXPECT_EQ(image->uniqueID(), key.image_id()); 549 EXPECT_EQ(image->uniqueID(), key.image_id());
513 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 550 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
514 EXPECT_EQ(40, key.target_size().width()); 551 EXPECT_EQ(40, key.target_size().width());
515 EXPECT_EQ(35, key.target_size().height()); 552 EXPECT_EQ(35, key.target_size().height());
516 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); 553 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect());
517 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); 554 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes());
518 } 555 }
519 556
520 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImage) { 557 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImage) {
521 TestSoftwareImageDecodeCache cache; 558 TestSoftwareImageDecodeCache cache;
522 sk_sp<SkImage> image = CreateImage(100, 100); 559 sk_sp<SkImage> image = CreateImage(100, 100);
523 bool is_decomposable = true; 560 bool is_decomposable = true;
524 SkFilterQuality quality = kHigh_SkFilterQuality; 561 SkFilterQuality quality = kHigh_SkFilterQuality;
525 562
526 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 563 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
527 quality, 564 quality,
528 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 565 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
566 DefaultColorSpace());
529 scoped_refptr<TileTask> task; 567 scoped_refptr<TileTask> task;
530 bool need_unref = cache.GetTaskForImageAndRef( 568 bool need_unref = cache.GetTaskForImageAndRef(
531 draw_image, ImageDecodeCache::TracingInfo(), &task); 569 draw_image, ImageDecodeCache::TracingInfo(), &task);
532 EXPECT_TRUE(need_unref); 570 EXPECT_TRUE(need_unref);
533 EXPECT_TRUE(task); 571 EXPECT_TRUE(task);
534 572
535 DrawImage another_draw_image( 573 DrawImage another_draw_image(
536 image, SkIRect::MakeWH(image->width(), image->height()), quality, 574 image, SkIRect::MakeWH(image->width(), image->height()), quality,
537 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 575 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
576 DefaultColorSpace());
538 scoped_refptr<TileTask> another_task; 577 scoped_refptr<TileTask> another_task;
539 need_unref = cache.GetTaskForImageAndRef( 578 need_unref = cache.GetTaskForImageAndRef(
540 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); 579 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task);
541 EXPECT_TRUE(need_unref); 580 EXPECT_TRUE(need_unref);
542 EXPECT_TRUE(task.get() == another_task.get()); 581 EXPECT_TRUE(task.get() == another_task.get());
543 582
544 TestTileTaskRunner::ProcessTask(task.get()); 583 TestTileTaskRunner::ProcessTask(task.get());
545 584
546 cache.UnrefImage(draw_image); 585 cache.UnrefImage(draw_image);
547 cache.UnrefImage(draw_image); 586 cache.UnrefImage(draw_image);
548 } 587 }
549 588
550 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentQuality) { 589 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentQuality) {
551 TestSoftwareImageDecodeCache cache; 590 TestSoftwareImageDecodeCache cache;
552 sk_sp<SkImage> image = CreateImage(100, 100); 591 sk_sp<SkImage> image = CreateImage(100, 100);
553 bool is_decomposable = true; 592 bool is_decomposable = true;
554 593
555 DrawImage high_quality_draw_image( 594 DrawImage high_quality_draw_image(
556 image, SkIRect::MakeWH(image->width(), image->height()), 595 image, SkIRect::MakeWH(image->width(), image->height()),
557 kHigh_SkFilterQuality, 596 kHigh_SkFilterQuality,
558 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 597 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
598 DefaultColorSpace());
559 scoped_refptr<TileTask> high_quality_task; 599 scoped_refptr<TileTask> high_quality_task;
560 bool need_unref = cache.GetTaskForImageAndRef(high_quality_draw_image, 600 bool need_unref = cache.GetTaskForImageAndRef(high_quality_draw_image,
561 ImageDecodeCache::TracingInfo(), 601 ImageDecodeCache::TracingInfo(),
562 &high_quality_task); 602 &high_quality_task);
563 EXPECT_TRUE(need_unref); 603 EXPECT_TRUE(need_unref);
564 EXPECT_TRUE(high_quality_task); 604 EXPECT_TRUE(high_quality_task);
565 605
566 DrawImage low_quality_draw_image( 606 DrawImage low_quality_draw_image(
567 image, SkIRect::MakeWH(image->width(), image->height()), 607 image, SkIRect::MakeWH(image->width(), image->height()),
568 kLow_SkFilterQuality, 608 kLow_SkFilterQuality,
569 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 609 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
610 DefaultColorSpace());
570 scoped_refptr<TileTask> low_quality_task; 611 scoped_refptr<TileTask> low_quality_task;
571 need_unref = cache.GetTaskForImageAndRef(low_quality_draw_image, 612 need_unref = cache.GetTaskForImageAndRef(low_quality_draw_image,
572 ImageDecodeCache::TracingInfo(), 613 ImageDecodeCache::TracingInfo(),
573 &low_quality_task); 614 &low_quality_task);
574 EXPECT_TRUE(need_unref); 615 EXPECT_TRUE(need_unref);
575 EXPECT_TRUE(low_quality_task); 616 EXPECT_TRUE(low_quality_task);
576 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); 617 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get());
577 618
578 TestTileTaskRunner::ProcessTask(high_quality_task.get()); 619 TestTileTaskRunner::ProcessTask(high_quality_task.get());
579 TestTileTaskRunner::ProcessTask(low_quality_task.get()); 620 TestTileTaskRunner::ProcessTask(low_quality_task.get());
580 621
581 cache.UnrefImage(high_quality_draw_image); 622 cache.UnrefImage(high_quality_draw_image);
582 cache.UnrefImage(low_quality_draw_image); 623 cache.UnrefImage(low_quality_draw_image);
583 } 624 }
584 625
585 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentSize) { 626 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageSameImageDifferentSize) {
586 TestSoftwareImageDecodeCache cache; 627 TestSoftwareImageDecodeCache cache;
587 sk_sp<SkImage> image = CreateImage(100, 100); 628 sk_sp<SkImage> image = CreateImage(100, 100);
588 bool is_decomposable = true; 629 bool is_decomposable = true;
589 SkFilterQuality quality = kHigh_SkFilterQuality; 630 SkFilterQuality quality = kHigh_SkFilterQuality;
590 631
591 DrawImage half_size_draw_image( 632 DrawImage half_size_draw_image(
592 image, SkIRect::MakeWH(image->width(), image->height()), quality, 633 image, SkIRect::MakeWH(image->width(), image->height()), quality,
593 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 634 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
635 DefaultColorSpace());
594 scoped_refptr<TileTask> half_size_task; 636 scoped_refptr<TileTask> half_size_task;
595 bool need_unref = cache.GetTaskForImageAndRef( 637 bool need_unref = cache.GetTaskForImageAndRef(
596 half_size_draw_image, ImageDecodeCache::TracingInfo(), &half_size_task); 638 half_size_draw_image, ImageDecodeCache::TracingInfo(), &half_size_task);
597 EXPECT_TRUE(need_unref); 639 EXPECT_TRUE(need_unref);
598 EXPECT_TRUE(half_size_task); 640 EXPECT_TRUE(half_size_task);
599 641
600 DrawImage quarter_size_draw_image( 642 DrawImage quarter_size_draw_image(
601 image, SkIRect::MakeWH(image->width(), image->height()), quality, 643 image, SkIRect::MakeWH(image->width(), image->height()), quality,
602 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); 644 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable),
645 DefaultColorSpace());
603 scoped_refptr<TileTask> quarter_size_task; 646 scoped_refptr<TileTask> quarter_size_task;
604 need_unref = cache.GetTaskForImageAndRef(quarter_size_draw_image, 647 need_unref = cache.GetTaskForImageAndRef(quarter_size_draw_image,
605 ImageDecodeCache::TracingInfo(), 648 ImageDecodeCache::TracingInfo(),
606 &quarter_size_task); 649 &quarter_size_task);
607 EXPECT_TRUE(need_unref); 650 EXPECT_TRUE(need_unref);
608 EXPECT_TRUE(quarter_size_task); 651 EXPECT_TRUE(quarter_size_task);
609 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get()); 652 EXPECT_TRUE(half_size_task.get() != quarter_size_task.get());
610 653
611 TestTileTaskRunner::ProcessTask(half_size_task.get()); 654 TestTileTaskRunner::ProcessTask(half_size_task.get());
612 TestTileTaskRunner::ProcessTask(quarter_size_task.get()); 655 TestTileTaskRunner::ProcessTask(quarter_size_task.get());
613 656
614 cache.UnrefImage(half_size_draw_image); 657 cache.UnrefImage(half_size_draw_image);
615 cache.UnrefImage(quarter_size_draw_image); 658 cache.UnrefImage(quarter_size_draw_image);
616 } 659 }
617 660
618 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageDifferentImage) { 661 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageDifferentImage) {
619 TestSoftwareImageDecodeCache cache; 662 TestSoftwareImageDecodeCache cache;
620 bool is_decomposable = true; 663 bool is_decomposable = true;
621 SkFilterQuality quality = kHigh_SkFilterQuality; 664 SkFilterQuality quality = kHigh_SkFilterQuality;
622 665
623 sk_sp<SkImage> first_image = CreateImage(100, 100); 666 sk_sp<SkImage> first_image = CreateImage(100, 100);
624 DrawImage first_draw_image( 667 DrawImage first_draw_image(
625 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), 668 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()),
626 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 669 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
670 DefaultColorSpace());
627 scoped_refptr<TileTask> first_task; 671 scoped_refptr<TileTask> first_task;
628 bool need_unref = cache.GetTaskForImageAndRef( 672 bool need_unref = cache.GetTaskForImageAndRef(
629 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); 673 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task);
630 EXPECT_TRUE(need_unref); 674 EXPECT_TRUE(need_unref);
631 EXPECT_TRUE(first_task); 675 EXPECT_TRUE(first_task);
632 676
633 sk_sp<SkImage> second_image = CreateImage(100, 100); 677 sk_sp<SkImage> second_image = CreateImage(100, 100);
634 DrawImage second_draw_image( 678 DrawImage second_draw_image(
635 second_image, 679 second_image,
636 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, 680 SkIRect::MakeWH(second_image->width(), second_image->height()), quality,
637 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); 681 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable),
682 DefaultColorSpace());
638 scoped_refptr<TileTask> second_task; 683 scoped_refptr<TileTask> second_task;
639 need_unref = cache.GetTaskForImageAndRef( 684 need_unref = cache.GetTaskForImageAndRef(
640 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); 685 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task);
641 EXPECT_TRUE(need_unref); 686 EXPECT_TRUE(need_unref);
642 EXPECT_TRUE(second_task); 687 EXPECT_TRUE(second_task);
643 EXPECT_TRUE(first_task.get() != second_task.get()); 688 EXPECT_TRUE(first_task.get() != second_task.get());
644 689
645 TestTileTaskRunner::ProcessTask(first_task.get()); 690 TestTileTaskRunner::ProcessTask(first_task.get());
646 TestTileTaskRunner::ProcessTask(second_task.get()); 691 TestTileTaskRunner::ProcessTask(second_task.get());
647 692
648 cache.UnrefImage(first_draw_image); 693 cache.UnrefImage(first_draw_image);
649 cache.UnrefImage(second_draw_image); 694 cache.UnrefImage(second_draw_image);
650 } 695 }
651 696
697 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageDifferentColorSpace) {
698 TestSoftwareImageDecodeCache cache;
699 bool is_decomposable = true;
700 SkFilterQuality quality = kHigh_SkFilterQuality;
701
702 gfx::ColorSpace color_space_a(gfx::ColorSpace::PrimaryID::XYZ_D50,
703 gfx::ColorSpace::TransferID::IEC61966_2_1);
704 gfx::ColorSpace color_space_b(gfx::ColorSpace::PrimaryID::SMPTE170M,
705 gfx::ColorSpace::TransferID::IEC61966_2_1);
706 gfx::ColorSpace color_space_c = gfx::ColorSpace::CreateSRGB();
707
708 sk_sp<SkImage> image = CreateImageWithColorSpace(100, 100, color_space_a);
709 DrawImage first_draw_image(
710 image, SkIRect::MakeWH(image->width(), image->height()), quality,
711 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), color_space_b);
712 scoped_refptr<TileTask> first_task;
713 bool need_unref = cache.GetTaskForImageAndRef(
714 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task);
715 EXPECT_TRUE(need_unref);
716 EXPECT_TRUE(first_task);
717
718 DrawImage second_draw_image(
719 image, SkIRect::MakeWH(image->width(), image->height()), quality,
720 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), color_space_c);
721 scoped_refptr<TileTask> second_task;
722 need_unref = cache.GetTaskForImageAndRef(
723 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task);
724 EXPECT_TRUE(need_unref);
725 EXPECT_TRUE(second_task);
726 EXPECT_TRUE(first_task.get() != second_task.get());
727
728 DrawImage third_draw_image(
729 image, SkIRect::MakeWH(image->width(), image->height()), quality,
730 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), color_space_b);
731 scoped_refptr<TileTask> third_task;
732 need_unref = cache.GetTaskForImageAndRef(
733 third_draw_image, ImageDecodeCache::TracingInfo(), &third_task);
734 EXPECT_TRUE(need_unref);
735 EXPECT_TRUE(third_task);
736 EXPECT_TRUE(first_task.get() == third_task.get());
737
738 TestTileTaskRunner::ProcessTask(first_task.get());
739 TestTileTaskRunner::ProcessTask(second_task.get());
740
741 cache.UnrefImage(first_draw_image);
742 cache.UnrefImage(second_draw_image);
743 cache.UnrefImage(third_draw_image);
744 }
745
652 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageAlreadyDecoded) { 746 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageAlreadyDecoded) {
653 TestSoftwareImageDecodeCache cache; 747 TestSoftwareImageDecodeCache cache;
654 bool is_decomposable = true; 748 bool is_decomposable = true;
655 SkFilterQuality quality = kHigh_SkFilterQuality; 749 SkFilterQuality quality = kHigh_SkFilterQuality;
656 750
657 sk_sp<SkImage> image = CreateImage(100, 100); 751 sk_sp<SkImage> image = CreateImage(100, 100);
658 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 752 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
659 quality, 753 quality,
660 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 754 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
755 DefaultColorSpace());
661 scoped_refptr<TileTask> task; 756 scoped_refptr<TileTask> task;
662 bool need_unref = cache.GetTaskForImageAndRef( 757 bool need_unref = cache.GetTaskForImageAndRef(
663 draw_image, ImageDecodeCache::TracingInfo(), &task); 758 draw_image, ImageDecodeCache::TracingInfo(), &task);
664 EXPECT_TRUE(need_unref); 759 EXPECT_TRUE(need_unref);
665 EXPECT_TRUE(task); 760 EXPECT_TRUE(task);
666 761
667 TestTileTaskRunner::ScheduleTask(task.get()); 762 TestTileTaskRunner::ScheduleTask(task.get());
668 TestTileTaskRunner::RunTask(task.get()); 763 TestTileTaskRunner::RunTask(task.get());
669 764
670 scoped_refptr<TileTask> another_task; 765 scoped_refptr<TileTask> another_task;
671 need_unref = cache.GetTaskForImageAndRef( 766 need_unref = cache.GetTaskForImageAndRef(
672 draw_image, ImageDecodeCache::TracingInfo(), &another_task); 767 draw_image, ImageDecodeCache::TracingInfo(), &another_task);
673 EXPECT_TRUE(need_unref); 768 EXPECT_TRUE(need_unref);
674 EXPECT_FALSE(another_task); 769 EXPECT_FALSE(another_task);
675 770
676 TestTileTaskRunner::CompleteTask(task.get()); 771 TestTileTaskRunner::CompleteTask(task.get());
677 772
678 cache.UnrefImage(draw_image); 773 cache.UnrefImage(draw_image);
679 cache.UnrefImage(draw_image); 774 cache.UnrefImage(draw_image);
680 } 775 }
681 776
682 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageAlreadyPrerolled) { 777 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageAlreadyPrerolled) {
683 TestSoftwareImageDecodeCache cache; 778 TestSoftwareImageDecodeCache cache;
684 bool is_decomposable = true; 779 bool is_decomposable = true;
685 SkFilterQuality quality = kLow_SkFilterQuality; 780 SkFilterQuality quality = kLow_SkFilterQuality;
686 781
687 sk_sp<SkImage> image = CreateImage(100, 100); 782 sk_sp<SkImage> image = CreateImage(100, 100);
688 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 783 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
689 quality, 784 quality,
690 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 785 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
786 DefaultColorSpace());
691 scoped_refptr<TileTask> task; 787 scoped_refptr<TileTask> task;
692 bool need_unref = cache.GetTaskForImageAndRef( 788 bool need_unref = cache.GetTaskForImageAndRef(
693 draw_image, ImageDecodeCache::TracingInfo(), &task); 789 draw_image, ImageDecodeCache::TracingInfo(), &task);
694 EXPECT_TRUE(need_unref); 790 EXPECT_TRUE(need_unref);
695 EXPECT_TRUE(task); 791 EXPECT_TRUE(task);
696 792
697 TestTileTaskRunner::ScheduleTask(task.get()); 793 TestTileTaskRunner::ScheduleTask(task.get());
698 TestTileTaskRunner::RunTask(task.get()); 794 TestTileTaskRunner::RunTask(task.get());
699 795
700 scoped_refptr<TileTask> another_task; 796 scoped_refptr<TileTask> another_task;
(...skipping 16 matching lines...) Expand all
717 } 813 }
718 814
719 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageCanceledGetsNewTask) { 815 TEST(SoftwareImageDecodeCacheTest, GetTaskForImageCanceledGetsNewTask) {
720 TestSoftwareImageDecodeCache cache; 816 TestSoftwareImageDecodeCache cache;
721 bool is_decomposable = true; 817 bool is_decomposable = true;
722 SkFilterQuality quality = kHigh_SkFilterQuality; 818 SkFilterQuality quality = kHigh_SkFilterQuality;
723 819
724 sk_sp<SkImage> image = CreateImage(100, 100); 820 sk_sp<SkImage> image = CreateImage(100, 100);
725 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 821 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
726 quality, 822 quality,
727 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 823 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
824 DefaultColorSpace());
728 scoped_refptr<TileTask> task; 825 scoped_refptr<TileTask> task;
729 bool need_unref = cache.GetTaskForImageAndRef( 826 bool need_unref = cache.GetTaskForImageAndRef(
730 draw_image, ImageDecodeCache::TracingInfo(), &task); 827 draw_image, ImageDecodeCache::TracingInfo(), &task);
731 EXPECT_TRUE(need_unref); 828 EXPECT_TRUE(need_unref);
732 EXPECT_TRUE(task); 829 EXPECT_TRUE(task);
733 830
734 scoped_refptr<TileTask> another_task; 831 scoped_refptr<TileTask> another_task;
735 need_unref = cache.GetTaskForImageAndRef( 832 need_unref = cache.GetTaskForImageAndRef(
736 draw_image, ImageDecodeCache::TracingInfo(), &another_task); 833 draw_image, ImageDecodeCache::TracingInfo(), &another_task);
737 EXPECT_TRUE(need_unref); 834 EXPECT_TRUE(need_unref);
(...skipping 22 matching lines...) Expand all
760 857
761 TEST(SoftwareImageDecodeCacheTest, 858 TEST(SoftwareImageDecodeCacheTest,
762 GetTaskForImageCanceledWhileReffedGetsNewTask) { 859 GetTaskForImageCanceledWhileReffedGetsNewTask) {
763 TestSoftwareImageDecodeCache cache; 860 TestSoftwareImageDecodeCache cache;
764 bool is_decomposable = true; 861 bool is_decomposable = true;
765 SkFilterQuality quality = kHigh_SkFilterQuality; 862 SkFilterQuality quality = kHigh_SkFilterQuality;
766 863
767 sk_sp<SkImage> image = CreateImage(100, 100); 864 sk_sp<SkImage> image = CreateImage(100, 100);
768 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 865 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
769 quality, 866 quality,
770 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 867 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
868 DefaultColorSpace());
771 scoped_refptr<TileTask> task; 869 scoped_refptr<TileTask> task;
772 bool need_unref = cache.GetTaskForImageAndRef( 870 bool need_unref = cache.GetTaskForImageAndRef(
773 draw_image, ImageDecodeCache::TracingInfo(), &task); 871 draw_image, ImageDecodeCache::TracingInfo(), &task);
774 EXPECT_TRUE(need_unref); 872 EXPECT_TRUE(need_unref);
775 EXPECT_TRUE(task); 873 EXPECT_TRUE(task);
776 874
777 scoped_refptr<TileTask> another_task; 875 scoped_refptr<TileTask> another_task;
778 need_unref = cache.GetTaskForImageAndRef( 876 need_unref = cache.GetTaskForImageAndRef(
779 draw_image, ImageDecodeCache::TracingInfo(), &another_task); 877 draw_image, ImageDecodeCache::TracingInfo(), &another_task);
780 EXPECT_TRUE(need_unref); 878 EXPECT_TRUE(need_unref);
(...skipping 21 matching lines...) Expand all
802 } 900 }
803 901
804 TEST(SoftwareImageDecodeCacheTest, GetDecodedImageForDraw) { 902 TEST(SoftwareImageDecodeCacheTest, GetDecodedImageForDraw) {
805 TestSoftwareImageDecodeCache cache; 903 TestSoftwareImageDecodeCache cache;
806 bool is_decomposable = true; 904 bool is_decomposable = true;
807 SkFilterQuality quality = kHigh_SkFilterQuality; 905 SkFilterQuality quality = kHigh_SkFilterQuality;
808 906
809 sk_sp<SkImage> image = CreateImage(100, 100); 907 sk_sp<SkImage> image = CreateImage(100, 100);
810 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 908 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
811 quality, 909 quality,
812 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 910 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
911 DefaultColorSpace());
813 scoped_refptr<TileTask> task; 912 scoped_refptr<TileTask> task;
814 bool need_unref = cache.GetTaskForImageAndRef( 913 bool need_unref = cache.GetTaskForImageAndRef(
815 draw_image, ImageDecodeCache::TracingInfo(), &task); 914 draw_image, ImageDecodeCache::TracingInfo(), &task);
816 EXPECT_TRUE(need_unref); 915 EXPECT_TRUE(need_unref);
817 EXPECT_TRUE(task); 916 EXPECT_TRUE(task);
818 917
819 TestTileTaskRunner::ProcessTask(task.get()); 918 TestTileTaskRunner::ProcessTask(task.get());
820 919
821 DecodedDrawImage decoded_draw_image = 920 DecodedDrawImage decoded_draw_image =
822 cache.GetDecodedImageForDraw(draw_image); 921 cache.GetDecodedImageForDraw(draw_image);
(...skipping 12 matching lines...) Expand all
835 934
836 TEST(SoftwareImageDecodeCacheTest, 935 TEST(SoftwareImageDecodeCacheTest,
837 GetDecodedImageForDrawWithNonContainedSrcRect) { 936 GetDecodedImageForDrawWithNonContainedSrcRect) {
838 TestSoftwareImageDecodeCache cache; 937 TestSoftwareImageDecodeCache cache;
839 bool is_decomposable = true; 938 bool is_decomposable = true;
840 SkFilterQuality quality = kHigh_SkFilterQuality; 939 SkFilterQuality quality = kHigh_SkFilterQuality;
841 940
842 sk_sp<SkImage> image = CreateImage(100, 100); 941 sk_sp<SkImage> image = CreateImage(100, 100);
843 DrawImage draw_image( 942 DrawImage draw_image(
844 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), 943 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()),
845 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 944 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
945 DefaultColorSpace());
846 scoped_refptr<TileTask> task; 946 scoped_refptr<TileTask> task;
847 bool need_unref = cache.GetTaskForImageAndRef( 947 bool need_unref = cache.GetTaskForImageAndRef(
848 draw_image, ImageDecodeCache::TracingInfo(), &task); 948 draw_image, ImageDecodeCache::TracingInfo(), &task);
849 EXPECT_TRUE(need_unref); 949 EXPECT_TRUE(need_unref);
850 EXPECT_TRUE(task); 950 EXPECT_TRUE(task);
851 951
852 TestTileTaskRunner::ProcessTask(task.get()); 952 TestTileTaskRunner::ProcessTask(task.get());
853 953
854 DecodedDrawImage decoded_draw_image = 954 DecodedDrawImage decoded_draw_image =
855 cache.GetDecodedImageForDraw(draw_image); 955 cache.GetDecodedImageForDraw(draw_image);
(...skipping 11 matching lines...) Expand all
867 } 967 }
868 968
869 TEST(SoftwareImageDecodeCacheTest, GetDecodedImageForDrawAtRasterDecode) { 969 TEST(SoftwareImageDecodeCacheTest, GetDecodedImageForDrawAtRasterDecode) {
870 TestSoftwareImageDecodeCache cache; 970 TestSoftwareImageDecodeCache cache;
871 bool is_decomposable = true; 971 bool is_decomposable = true;
872 SkFilterQuality quality = kHigh_SkFilterQuality; 972 SkFilterQuality quality = kHigh_SkFilterQuality;
873 973
874 sk_sp<SkImage> image = CreateImage(100, 100); 974 sk_sp<SkImage> image = CreateImage(100, 100);
875 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 975 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
876 quality, 976 quality,
877 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 977 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
978 DefaultColorSpace());
878 979
879 DecodedDrawImage decoded_draw_image = 980 DecodedDrawImage decoded_draw_image =
880 cache.GetDecodedImageForDraw(draw_image); 981 cache.GetDecodedImageForDraw(draw_image);
881 EXPECT_TRUE(decoded_draw_image.image()); 982 EXPECT_TRUE(decoded_draw_image.image());
882 EXPECT_EQ(50, decoded_draw_image.image()->width()); 983 EXPECT_EQ(50, decoded_draw_image.image()->width());
883 EXPECT_EQ(50, decoded_draw_image.image()->height()); 984 EXPECT_EQ(50, decoded_draw_image.image()->height());
884 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); 985 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width());
885 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); 986 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height());
886 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 987 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
887 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); 988 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
888 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); 989 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode());
889 990
890 cache.DrawWithImageFinished(draw_image, decoded_draw_image); 991 cache.DrawWithImageFinished(draw_image, decoded_draw_image);
891 } 992 }
892 993
893 TEST(SoftwareImageDecodeCacheTest, 994 TEST(SoftwareImageDecodeCacheTest,
894 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { 995 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) {
895 TestSoftwareImageDecodeCache cache; 996 TestSoftwareImageDecodeCache cache;
896 bool is_decomposable = true; 997 bool is_decomposable = true;
897 SkFilterQuality quality = kHigh_SkFilterQuality; 998 SkFilterQuality quality = kHigh_SkFilterQuality;
898 999
899 sk_sp<SkImage> image = CreateImage(100, 100); 1000 sk_sp<SkImage> image = CreateImage(100, 100);
900 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1001 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
901 quality, 1002 quality,
902 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 1003 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
1004 DefaultColorSpace());
903 1005
904 DecodedDrawImage decoded_draw_image = 1006 DecodedDrawImage decoded_draw_image =
905 cache.GetDecodedImageForDraw(draw_image); 1007 cache.GetDecodedImageForDraw(draw_image);
906 EXPECT_TRUE(decoded_draw_image.image()); 1008 EXPECT_TRUE(decoded_draw_image.image());
907 EXPECT_EQ(50, decoded_draw_image.image()->width()); 1009 EXPECT_EQ(50, decoded_draw_image.image()->width());
908 EXPECT_EQ(50, decoded_draw_image.image()->height()); 1010 EXPECT_EQ(50, decoded_draw_image.image()->height());
909 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); 1011 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width());
910 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); 1012 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height());
911 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 1013 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
912 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); 1014 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
(...skipping 10 matching lines...) Expand all
923 1025
924 TEST(SoftwareImageDecodeCacheTest, 1026 TEST(SoftwareImageDecodeCacheTest,
925 GetDecodedImageForDrawAtRasterDecodeDoesNotPreventTasks) { 1027 GetDecodedImageForDrawAtRasterDecodeDoesNotPreventTasks) {
926 TestSoftwareImageDecodeCache cache; 1028 TestSoftwareImageDecodeCache cache;
927 bool is_decomposable = true; 1029 bool is_decomposable = true;
928 SkFilterQuality quality = kHigh_SkFilterQuality; 1030 SkFilterQuality quality = kHigh_SkFilterQuality;
929 1031
930 sk_sp<SkImage> image = CreateImage(100, 100); 1032 sk_sp<SkImage> image = CreateImage(100, 100);
931 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1033 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
932 quality, 1034 quality,
933 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 1035 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
1036 DefaultColorSpace());
934 1037
935 DecodedDrawImage decoded_draw_image = 1038 DecodedDrawImage decoded_draw_image =
936 cache.GetDecodedImageForDraw(draw_image); 1039 cache.GetDecodedImageForDraw(draw_image);
937 EXPECT_TRUE(decoded_draw_image.image()); 1040 EXPECT_TRUE(decoded_draw_image.image());
938 EXPECT_EQ(50, decoded_draw_image.image()->width()); 1041 EXPECT_EQ(50, decoded_draw_image.image()->width());
939 EXPECT_EQ(50, decoded_draw_image.image()->height()); 1042 EXPECT_EQ(50, decoded_draw_image.image()->height());
940 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); 1043 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width());
941 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); 1044 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height());
942 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 1045 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
943 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); 1046 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
(...skipping 24 matching lines...) Expand all
968 1071
969 TEST(SoftwareImageDecodeCacheTest, 1072 TEST(SoftwareImageDecodeCacheTest,
970 GetDecodedImageForDrawAtRasterDecodeIsUsedForLockedCache) { 1073 GetDecodedImageForDrawAtRasterDecodeIsUsedForLockedCache) {
971 TestSoftwareImageDecodeCache cache; 1074 TestSoftwareImageDecodeCache cache;
972 bool is_decomposable = true; 1075 bool is_decomposable = true;
973 SkFilterQuality quality = kHigh_SkFilterQuality; 1076 SkFilterQuality quality = kHigh_SkFilterQuality;
974 1077
975 sk_sp<SkImage> image = CreateImage(100, 100); 1078 sk_sp<SkImage> image = CreateImage(100, 100);
976 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1079 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
977 quality, 1080 quality,
978 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 1081 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
1082 DefaultColorSpace());
979 1083
980 DecodedDrawImage decoded_draw_image = 1084 DecodedDrawImage decoded_draw_image =
981 cache.GetDecodedImageForDraw(draw_image); 1085 cache.GetDecodedImageForDraw(draw_image);
982 EXPECT_TRUE(decoded_draw_image.image()); 1086 EXPECT_TRUE(decoded_draw_image.image());
983 EXPECT_EQ(50, decoded_draw_image.image()->width()); 1087 EXPECT_EQ(50, decoded_draw_image.image()->width());
984 EXPECT_EQ(50, decoded_draw_image.image()->height()); 1088 EXPECT_EQ(50, decoded_draw_image.image()->height());
985 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); 1089 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width());
986 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); 1090 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height());
987 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 1091 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
988 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); 1092 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
(...skipping 24 matching lines...) Expand all
1013 } 1117 }
1014 1118
1015 TEST(SoftwareImageDecodeCacheTest, ZeroSizedImagesAreSkipped) { 1119 TEST(SoftwareImageDecodeCacheTest, ZeroSizedImagesAreSkipped) {
1016 TestSoftwareImageDecodeCache cache; 1120 TestSoftwareImageDecodeCache cache;
1017 bool is_decomposable = true; 1121 bool is_decomposable = true;
1018 SkFilterQuality quality = kHigh_SkFilterQuality; 1122 SkFilterQuality quality = kHigh_SkFilterQuality;
1019 1123
1020 sk_sp<SkImage> image = CreateImage(100, 100); 1124 sk_sp<SkImage> image = CreateImage(100, 100);
1021 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1125 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1022 quality, 1126 quality,
1023 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); 1127 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable),
1128 DefaultColorSpace());
1024 1129
1025 scoped_refptr<TileTask> task; 1130 scoped_refptr<TileTask> task;
1026 bool need_unref = cache.GetTaskForImageAndRef( 1131 bool need_unref = cache.GetTaskForImageAndRef(
1027 draw_image, ImageDecodeCache::TracingInfo(), &task); 1132 draw_image, ImageDecodeCache::TracingInfo(), &task);
1028 EXPECT_FALSE(task); 1133 EXPECT_FALSE(task);
1029 EXPECT_FALSE(need_unref); 1134 EXPECT_FALSE(need_unref);
1030 1135
1031 DecodedDrawImage decoded_draw_image = 1136 DecodedDrawImage decoded_draw_image =
1032 cache.GetDecodedImageForDraw(draw_image); 1137 cache.GetDecodedImageForDraw(draw_image);
1033 EXPECT_FALSE(decoded_draw_image.image()); 1138 EXPECT_FALSE(decoded_draw_image.image());
1034 1139
1035 cache.DrawWithImageFinished(draw_image, decoded_draw_image); 1140 cache.DrawWithImageFinished(draw_image, decoded_draw_image);
1036 } 1141 }
1037 1142
1038 TEST(SoftwareImageDecodeCacheTest, NonOverlappingSrcRectImagesAreSkipped) { 1143 TEST(SoftwareImageDecodeCacheTest, NonOverlappingSrcRectImagesAreSkipped) {
1039 TestSoftwareImageDecodeCache cache; 1144 TestSoftwareImageDecodeCache cache;
1040 bool is_decomposable = true; 1145 bool is_decomposable = true;
1041 SkFilterQuality quality = kHigh_SkFilterQuality; 1146 SkFilterQuality quality = kHigh_SkFilterQuality;
1042 1147
1043 sk_sp<SkImage> image = CreateImage(100, 100); 1148 sk_sp<SkImage> image = CreateImage(100, 100);
1044 DrawImage draw_image( 1149 DrawImage draw_image(
1045 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), 1150 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()),
1046 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 1151 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
1152 DefaultColorSpace());
1047 1153
1048 scoped_refptr<TileTask> task; 1154 scoped_refptr<TileTask> task;
1049 bool need_unref = cache.GetTaskForImageAndRef( 1155 bool need_unref = cache.GetTaskForImageAndRef(
1050 draw_image, ImageDecodeCache::TracingInfo(), &task); 1156 draw_image, ImageDecodeCache::TracingInfo(), &task);
1051 EXPECT_FALSE(task); 1157 EXPECT_FALSE(task);
1052 EXPECT_FALSE(need_unref); 1158 EXPECT_FALSE(need_unref);
1053 1159
1054 DecodedDrawImage decoded_draw_image = 1160 DecodedDrawImage decoded_draw_image =
1055 cache.GetDecodedImageForDraw(draw_image); 1161 cache.GetDecodedImageForDraw(draw_image);
1056 EXPECT_FALSE(decoded_draw_image.image()); 1162 EXPECT_FALSE(decoded_draw_image.image());
1057 1163
1058 cache.DrawWithImageFinished(draw_image, decoded_draw_image); 1164 cache.DrawWithImageFinished(draw_image, decoded_draw_image);
1059 } 1165 }
1060 1166
1061 TEST(SoftwareImageDecodeCacheTest, LowQualityFilterIsHandled) { 1167 TEST(SoftwareImageDecodeCacheTest, LowQualityFilterIsHandled) {
1062 TestSoftwareImageDecodeCache cache; 1168 TestSoftwareImageDecodeCache cache;
1063 bool is_decomposable = true; 1169 bool is_decomposable = true;
1064 SkFilterQuality quality = kLow_SkFilterQuality; 1170 SkFilterQuality quality = kLow_SkFilterQuality;
1065 1171
1066 sk_sp<SkImage> image = CreateImage(100, 100); 1172 sk_sp<SkImage> image = CreateImage(100, 100);
1067 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1173 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1068 quality, 1174 quality,
1069 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 1175 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
1176 DefaultColorSpace());
1070 1177
1071 scoped_refptr<TileTask> task; 1178 scoped_refptr<TileTask> task;
1072 bool need_unref = cache.GetTaskForImageAndRef( 1179 bool need_unref = cache.GetTaskForImageAndRef(
1073 draw_image, ImageDecodeCache::TracingInfo(), &task); 1180 draw_image, ImageDecodeCache::TracingInfo(), &task);
1074 EXPECT_TRUE(task); 1181 EXPECT_TRUE(task);
1075 EXPECT_TRUE(need_unref); 1182 EXPECT_TRUE(need_unref);
1076 1183
1077 TestTileTaskRunner::ProcessTask(task.get()); 1184 TestTileTaskRunner::ProcessTask(task.get());
1078 1185
1079 DecodedDrawImage decoded_draw_image = 1186 DecodedDrawImage decoded_draw_image =
1080 cache.GetDecodedImageForDraw(draw_image); 1187 cache.GetDecodedImageForDraw(draw_image);
1081 EXPECT_TRUE(decoded_draw_image.image()); 1188 EXPECT_TRUE(decoded_draw_image.image());
1082 // If we decoded the image and cached it, it would be stored in a different 1189 // If we decoded the image and cached it, it would be stored in a different
1083 // SkImage object. 1190 // SkImage object.
1084 EXPECT_TRUE(decoded_draw_image.image() != image); 1191 EXPECT_TRUE(decoded_draw_image.image() != image);
1085 1192
1086 cache.DrawWithImageFinished(draw_image, decoded_draw_image); 1193 cache.DrawWithImageFinished(draw_image, decoded_draw_image);
1087 cache.UnrefImage(draw_image); 1194 cache.UnrefImage(draw_image);
1088 } 1195 }
1089 1196
1090 TEST(SoftwareImageDecodeCacheTest, LowQualityScaledSubrectIsHandled) { 1197 TEST(SoftwareImageDecodeCacheTest, LowQualityScaledSubrectIsHandled) {
1091 TestSoftwareImageDecodeCache cache; 1198 TestSoftwareImageDecodeCache cache;
1092 bool is_decomposable = true; 1199 bool is_decomposable = true;
1093 SkFilterQuality quality = kLow_SkFilterQuality; 1200 SkFilterQuality quality = kLow_SkFilterQuality;
1094 1201
1095 sk_sp<SkImage> image = CreateImage(100, 100); 1202 sk_sp<SkImage> image = CreateImage(100, 100);
1096 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, 1203 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality,
1097 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 1204 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
1205 DefaultColorSpace());
1098 1206
1099 scoped_refptr<TileTask> task; 1207 scoped_refptr<TileTask> task;
1100 bool need_unref = cache.GetTaskForImageAndRef( 1208 bool need_unref = cache.GetTaskForImageAndRef(
1101 draw_image, ImageDecodeCache::TracingInfo(), &task); 1209 draw_image, ImageDecodeCache::TracingInfo(), &task);
1102 EXPECT_TRUE(task); 1210 EXPECT_TRUE(task);
1103 EXPECT_TRUE(need_unref); 1211 EXPECT_TRUE(need_unref);
1104 1212
1105 TestTileTaskRunner::ProcessTask(task.get()); 1213 TestTileTaskRunner::ProcessTask(task.get());
1106 1214
1107 DecodedDrawImage decoded_draw_image = 1215 DecodedDrawImage decoded_draw_image =
1108 cache.GetDecodedImageForDraw(draw_image); 1216 cache.GetDecodedImageForDraw(draw_image);
1109 EXPECT_TRUE(decoded_draw_image.image()); 1217 EXPECT_TRUE(decoded_draw_image.image());
1110 // If we decoded the image and cached it, it would be stored in a different 1218 // If we decoded the image and cached it, it would be stored in a different
1111 // SkImage object. 1219 // SkImage object.
1112 EXPECT_TRUE(decoded_draw_image.image() != image); 1220 EXPECT_TRUE(decoded_draw_image.image() != image);
1113 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); 1221 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1114 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); 1222 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity());
1115 1223
1116 cache.DrawWithImageFinished(draw_image, decoded_draw_image); 1224 cache.DrawWithImageFinished(draw_image, decoded_draw_image);
1117 cache.UnrefImage(draw_image); 1225 cache.UnrefImage(draw_image);
1118 } 1226 }
1119 1227
1120 TEST(SoftwareImageDecodeCacheTest, NoneQualityScaledSubrectIsHandled) { 1228 TEST(SoftwareImageDecodeCacheTest, NoneQualityScaledSubrectIsHandled) {
1121 TestSoftwareImageDecodeCache cache; 1229 TestSoftwareImageDecodeCache cache;
1122 bool is_decomposable = true; 1230 bool is_decomposable = true;
1123 SkFilterQuality quality = kNone_SkFilterQuality; 1231 SkFilterQuality quality = kNone_SkFilterQuality;
1124 1232
1125 sk_sp<SkImage> image = CreateImage(100, 100); 1233 sk_sp<SkImage> image = CreateImage(100, 100);
1126 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality, 1234 DrawImage draw_image(image, SkIRect::MakeXYWH(10, 10, 80, 80), quality,
1127 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 1235 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
1236 DefaultColorSpace());
1128 1237
1129 scoped_refptr<TileTask> task; 1238 scoped_refptr<TileTask> task;
1130 bool need_unref = cache.GetTaskForImageAndRef( 1239 bool need_unref = cache.GetTaskForImageAndRef(
1131 draw_image, ImageDecodeCache::TracingInfo(), &task); 1240 draw_image, ImageDecodeCache::TracingInfo(), &task);
1132 EXPECT_TRUE(task); 1241 EXPECT_TRUE(task);
1133 EXPECT_TRUE(need_unref); 1242 EXPECT_TRUE(need_unref);
1134 1243
1135 TestTileTaskRunner::ProcessTask(task.get()); 1244 TestTileTaskRunner::ProcessTask(task.get());
1136 1245
1137 DecodedDrawImage decoded_draw_image = 1246 DecodedDrawImage decoded_draw_image =
(...skipping 10 matching lines...) Expand all
1148 } 1257 }
1149 1258
1150 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt01_5ScaleIsHandled) { 1259 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt01_5ScaleIsHandled) {
1151 TestSoftwareImageDecodeCache cache; 1260 TestSoftwareImageDecodeCache cache;
1152 bool is_decomposable = true; 1261 bool is_decomposable = true;
1153 SkFilterQuality quality = kMedium_SkFilterQuality; 1262 SkFilterQuality quality = kMedium_SkFilterQuality;
1154 1263
1155 sk_sp<SkImage> image = CreateImage(500, 200); 1264 sk_sp<SkImage> image = CreateImage(500, 200);
1156 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1265 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1157 quality, 1266 quality,
1158 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); 1267 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable),
1268 DefaultColorSpace());
1159 1269
1160 scoped_refptr<TileTask> task; 1270 scoped_refptr<TileTask> task;
1161 bool need_unref = cache.GetTaskForImageAndRef( 1271 bool need_unref = cache.GetTaskForImageAndRef(
1162 draw_image, ImageDecodeCache::TracingInfo(), &task); 1272 draw_image, ImageDecodeCache::TracingInfo(), &task);
1163 EXPECT_TRUE(task); 1273 EXPECT_TRUE(task);
1164 EXPECT_TRUE(need_unref); 1274 EXPECT_TRUE(need_unref);
1165 1275
1166 TestTileTaskRunner::ProcessTask(task.get()); 1276 TestTileTaskRunner::ProcessTask(task.get());
1167 1277
1168 DecodedDrawImage decoded_draw_image = 1278 DecodedDrawImage decoded_draw_image =
(...skipping 11 matching lines...) Expand all
1180 } 1290 }
1181 1291
1182 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt1_0ScaleIsHandled) { 1292 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt1_0ScaleIsHandled) {
1183 TestSoftwareImageDecodeCache cache; 1293 TestSoftwareImageDecodeCache cache;
1184 bool is_decomposable = true; 1294 bool is_decomposable = true;
1185 SkFilterQuality quality = kMedium_SkFilterQuality; 1295 SkFilterQuality quality = kMedium_SkFilterQuality;
1186 1296
1187 sk_sp<SkImage> image = CreateImage(500, 200); 1297 sk_sp<SkImage> image = CreateImage(500, 200);
1188 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1298 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1189 quality, 1299 quality,
1190 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); 1300 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable),
1301 DefaultColorSpace());
1191 1302
1192 scoped_refptr<TileTask> task; 1303 scoped_refptr<TileTask> task;
1193 bool need_unref = cache.GetTaskForImageAndRef( 1304 bool need_unref = cache.GetTaskForImageAndRef(
1194 draw_image, ImageDecodeCache::TracingInfo(), &task); 1305 draw_image, ImageDecodeCache::TracingInfo(), &task);
1195 EXPECT_TRUE(task); 1306 EXPECT_TRUE(task);
1196 EXPECT_TRUE(need_unref); 1307 EXPECT_TRUE(need_unref);
1197 1308
1198 TestTileTaskRunner::ProcessTask(task.get()); 1309 TestTileTaskRunner::ProcessTask(task.get());
1199 1310
1200 DecodedDrawImage decoded_draw_image = 1311 DecodedDrawImage decoded_draw_image =
(...skipping 11 matching lines...) Expand all
1212 } 1323 }
1213 1324
1214 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_75ScaleIsHandled) { 1325 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_75ScaleIsHandled) {
1215 TestSoftwareImageDecodeCache cache; 1326 TestSoftwareImageDecodeCache cache;
1216 bool is_decomposable = true; 1327 bool is_decomposable = true;
1217 SkFilterQuality quality = kMedium_SkFilterQuality; 1328 SkFilterQuality quality = kMedium_SkFilterQuality;
1218 1329
1219 sk_sp<SkImage> image = CreateImage(500, 200); 1330 sk_sp<SkImage> image = CreateImage(500, 200);
1220 DrawImage draw_image( 1331 DrawImage draw_image(
1221 image, SkIRect::MakeWH(image->width(), image->height()), quality, 1332 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1222 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable)); 1333 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable),
1334 DefaultColorSpace());
1223 1335
1224 scoped_refptr<TileTask> task; 1336 scoped_refptr<TileTask> task;
1225 bool need_unref = cache.GetTaskForImageAndRef( 1337 bool need_unref = cache.GetTaskForImageAndRef(
1226 draw_image, ImageDecodeCache::TracingInfo(), &task); 1338 draw_image, ImageDecodeCache::TracingInfo(), &task);
1227 EXPECT_TRUE(task); 1339 EXPECT_TRUE(task);
1228 EXPECT_TRUE(need_unref); 1340 EXPECT_TRUE(need_unref);
1229 1341
1230 TestTileTaskRunner::ProcessTask(task.get()); 1342 TestTileTaskRunner::ProcessTask(task.get());
1231 1343
1232 DecodedDrawImage decoded_draw_image = 1344 DecodedDrawImage decoded_draw_image =
(...skipping 11 matching lines...) Expand all
1244 } 1356 }
1245 1357
1246 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_5ScaleIsHandled) { 1358 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_5ScaleIsHandled) {
1247 TestSoftwareImageDecodeCache cache; 1359 TestSoftwareImageDecodeCache cache;
1248 bool is_decomposable = true; 1360 bool is_decomposable = true;
1249 SkFilterQuality quality = kMedium_SkFilterQuality; 1361 SkFilterQuality quality = kMedium_SkFilterQuality;
1250 1362
1251 sk_sp<SkImage> image = CreateImage(500, 200); 1363 sk_sp<SkImage> image = CreateImage(500, 200);
1252 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1364 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1253 quality, 1365 quality,
1254 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 1366 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
1367 DefaultColorSpace());
1255 1368
1256 scoped_refptr<TileTask> task; 1369 scoped_refptr<TileTask> task;
1257 bool need_unref = cache.GetTaskForImageAndRef( 1370 bool need_unref = cache.GetTaskForImageAndRef(
1258 draw_image, ImageDecodeCache::TracingInfo(), &task); 1371 draw_image, ImageDecodeCache::TracingInfo(), &task);
1259 EXPECT_TRUE(task); 1372 EXPECT_TRUE(task);
1260 EXPECT_TRUE(need_unref); 1373 EXPECT_TRUE(need_unref);
1261 1374
1262 TestTileTaskRunner::ProcessTask(task.get()); 1375 TestTileTaskRunner::ProcessTask(task.get());
1263 1376
1264 DecodedDrawImage decoded_draw_image = 1377 DecodedDrawImage decoded_draw_image =
(...skipping 11 matching lines...) Expand all
1276 } 1389 }
1277 1390
1278 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_49ScaleIsHandled) { 1391 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_49ScaleIsHandled) {
1279 TestSoftwareImageDecodeCache cache; 1392 TestSoftwareImageDecodeCache cache;
1280 bool is_decomposable = true; 1393 bool is_decomposable = true;
1281 SkFilterQuality quality = kMedium_SkFilterQuality; 1394 SkFilterQuality quality = kMedium_SkFilterQuality;
1282 1395
1283 sk_sp<SkImage> image = CreateImage(500, 200); 1396 sk_sp<SkImage> image = CreateImage(500, 200);
1284 DrawImage draw_image( 1397 DrawImage draw_image(
1285 image, SkIRect::MakeWH(image->width(), image->height()), quality, 1398 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1286 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); 1399 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable),
1400 DefaultColorSpace());
1287 1401
1288 scoped_refptr<TileTask> task; 1402 scoped_refptr<TileTask> task;
1289 bool need_unref = cache.GetTaskForImageAndRef( 1403 bool need_unref = cache.GetTaskForImageAndRef(
1290 draw_image, ImageDecodeCache::TracingInfo(), &task); 1404 draw_image, ImageDecodeCache::TracingInfo(), &task);
1291 EXPECT_TRUE(task); 1405 EXPECT_TRUE(task);
1292 EXPECT_TRUE(need_unref); 1406 EXPECT_TRUE(need_unref);
1293 1407
1294 TestTileTaskRunner::ProcessTask(task.get()); 1408 TestTileTaskRunner::ProcessTask(task.get());
1295 1409
1296 DecodedDrawImage decoded_draw_image = 1410 DecodedDrawImage decoded_draw_image =
(...skipping 11 matching lines...) Expand all
1308 } 1422 }
1309 1423
1310 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_1ScaleIsHandled) { 1424 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_1ScaleIsHandled) {
1311 TestSoftwareImageDecodeCache cache; 1425 TestSoftwareImageDecodeCache cache;
1312 bool is_decomposable = true; 1426 bool is_decomposable = true;
1313 SkFilterQuality quality = kMedium_SkFilterQuality; 1427 SkFilterQuality quality = kMedium_SkFilterQuality;
1314 1428
1315 sk_sp<SkImage> image = CreateImage(500, 200); 1429 sk_sp<SkImage> image = CreateImage(500, 200);
1316 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 1430 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1317 quality, 1431 quality,
1318 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable)); 1432 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable),
1433 DefaultColorSpace());
1319 1434
1320 scoped_refptr<TileTask> task; 1435 scoped_refptr<TileTask> task;
1321 bool need_unref = cache.GetTaskForImageAndRef( 1436 bool need_unref = cache.GetTaskForImageAndRef(
1322 draw_image, ImageDecodeCache::TracingInfo(), &task); 1437 draw_image, ImageDecodeCache::TracingInfo(), &task);
1323 EXPECT_TRUE(task); 1438 EXPECT_TRUE(task);
1324 EXPECT_TRUE(need_unref); 1439 EXPECT_TRUE(need_unref);
1325 1440
1326 TestTileTaskRunner::ProcessTask(task.get()); 1441 TestTileTaskRunner::ProcessTask(task.get());
1327 1442
1328 DecodedDrawImage decoded_draw_image = 1443 DecodedDrawImage decoded_draw_image =
(...skipping 11 matching lines...) Expand all
1340 } 1455 }
1341 1456
1342 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_01ScaleIsHandled) { 1457 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_01ScaleIsHandled) {
1343 TestSoftwareImageDecodeCache cache; 1458 TestSoftwareImageDecodeCache cache;
1344 bool is_decomposable = true; 1459 bool is_decomposable = true;
1345 SkFilterQuality quality = kMedium_SkFilterQuality; 1460 SkFilterQuality quality = kMedium_SkFilterQuality;
1346 1461
1347 sk_sp<SkImage> image = CreateImage(500, 200); 1462 sk_sp<SkImage> image = CreateImage(500, 200);
1348 DrawImage draw_image( 1463 DrawImage draw_image(
1349 image, SkIRect::MakeWH(image->width(), image->height()), quality, 1464 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1350 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable)); 1465 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable),
1466 DefaultColorSpace());
1351 1467
1352 scoped_refptr<TileTask> task; 1468 scoped_refptr<TileTask> task;
1353 bool need_unref = cache.GetTaskForImageAndRef( 1469 bool need_unref = cache.GetTaskForImageAndRef(
1354 draw_image, ImageDecodeCache::TracingInfo(), &task); 1470 draw_image, ImageDecodeCache::TracingInfo(), &task);
1355 EXPECT_TRUE(task); 1471 EXPECT_TRUE(task);
1356 EXPECT_TRUE(need_unref); 1472 EXPECT_TRUE(need_unref);
1357 1473
1358 TestTileTaskRunner::ProcessTask(task.get()); 1474 TestTileTaskRunner::ProcessTask(task.get());
1359 1475
1360 DecodedDrawImage decoded_draw_image = 1476 DecodedDrawImage decoded_draw_image =
(...skipping 11 matching lines...) Expand all
1372 } 1488 }
1373 1489
1374 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_001ScaleIsHandled) { 1490 TEST(SoftwareImageDecodeCacheTest, MediumQualityAt0_001ScaleIsHandled) {
1375 TestSoftwareImageDecodeCache cache; 1491 TestSoftwareImageDecodeCache cache;
1376 bool is_decomposable = true; 1492 bool is_decomposable = true;
1377 SkFilterQuality quality = kMedium_SkFilterQuality; 1493 SkFilterQuality quality = kMedium_SkFilterQuality;
1378 1494
1379 sk_sp<SkImage> image = CreateImage(500, 200); 1495 sk_sp<SkImage> image = CreateImage(500, 200);
1380 DrawImage draw_image( 1496 DrawImage draw_image(
1381 image, SkIRect::MakeWH(image->width(), image->height()), quality, 1497 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1382 CreateMatrix(SkSize::Make(0.001f, 0.001f), is_decomposable)); 1498 CreateMatrix(SkSize::Make(0.001f, 0.001f), is_decomposable),
1499 DefaultColorSpace());
1383 1500
1384 scoped_refptr<TileTask> task; 1501 scoped_refptr<TileTask> task;
1385 bool need_unref = cache.GetTaskForImageAndRef( 1502 bool need_unref = cache.GetTaskForImageAndRef(
1386 draw_image, ImageDecodeCache::TracingInfo(), &task); 1503 draw_image, ImageDecodeCache::TracingInfo(), &task);
1387 EXPECT_FALSE(task); 1504 EXPECT_FALSE(task);
1388 EXPECT_FALSE(need_unref); 1505 EXPECT_FALSE(need_unref);
1389 1506
1390 DecodedDrawImage decoded_draw_image = 1507 DecodedDrawImage decoded_draw_image =
1391 cache.GetDecodedImageForDraw(draw_image); 1508 cache.GetDecodedImageForDraw(draw_image);
1392 EXPECT_FALSE(decoded_draw_image.image()); 1509 EXPECT_FALSE(decoded_draw_image.image());
1393 1510
1394 cache.DrawWithImageFinished(draw_image, decoded_draw_image); 1511 cache.DrawWithImageFinished(draw_image, decoded_draw_image);
1395 } 1512 }
1396 1513
1397 TEST(SoftwareImageDecodeCacheTest, 1514 TEST(SoftwareImageDecodeCacheTest,
1398 MediumQualityImagesAreTheSameAt0_5And0_49Scale) { 1515 MediumQualityImagesAreTheSameAt0_5And0_49Scale) {
1399 TestSoftwareImageDecodeCache cache; 1516 TestSoftwareImageDecodeCache cache;
1400 bool is_decomposable = true; 1517 bool is_decomposable = true;
1401 SkFilterQuality quality = kMedium_SkFilterQuality; 1518 SkFilterQuality quality = kMedium_SkFilterQuality;
1402 1519
1403 sk_sp<SkImage> image = CreateImage(500, 200); 1520 sk_sp<SkImage> image = CreateImage(500, 200);
1404 DrawImage draw_image_50( 1521 DrawImage draw_image_50(
1405 image, SkIRect::MakeWH(image->width(), image->height()), quality, 1522 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1406 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 1523 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable),
1524 DefaultColorSpace());
1407 DrawImage draw_image_49( 1525 DrawImage draw_image_49(
1408 image, SkIRect::MakeWH(image->width(), image->height()), quality, 1526 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1409 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable)); 1527 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable),
1528 DefaultColorSpace());
1410 1529
1411 scoped_refptr<TileTask> task_50; 1530 scoped_refptr<TileTask> task_50;
1412 bool need_unref_50 = cache.GetTaskForImageAndRef( 1531 bool need_unref_50 = cache.GetTaskForImageAndRef(
1413 draw_image_50, ImageDecodeCache::TracingInfo(), &task_50); 1532 draw_image_50, ImageDecodeCache::TracingInfo(), &task_50);
1414 EXPECT_TRUE(task_50); 1533 EXPECT_TRUE(task_50);
1415 EXPECT_TRUE(need_unref_50); 1534 EXPECT_TRUE(need_unref_50);
1416 scoped_refptr<TileTask> task_49; 1535 scoped_refptr<TileTask> task_49;
1417 bool need_unref_49 = cache.GetTaskForImageAndRef( 1536 bool need_unref_49 = cache.GetTaskForImageAndRef(
1418 draw_image_49, ImageDecodeCache::TracingInfo(), &task_49); 1537 draw_image_49, ImageDecodeCache::TracingInfo(), &task_49);
1419 EXPECT_TRUE(task_49); 1538 EXPECT_TRUE(task_49);
(...skipping 28 matching lines...) Expand all
1448 1567
1449 TEST(SoftwareImageDecodeCacheTest, ClearCache) { 1568 TEST(SoftwareImageDecodeCacheTest, ClearCache) {
1450 TestSoftwareImageDecodeCache cache; 1569 TestSoftwareImageDecodeCache cache;
1451 bool is_decomposable = true; 1570 bool is_decomposable = true;
1452 SkFilterQuality quality = kHigh_SkFilterQuality; 1571 SkFilterQuality quality = kHigh_SkFilterQuality;
1453 1572
1454 for (int i = 0; i < 10; ++i) { 1573 for (int i = 0; i < 10; ++i) {
1455 sk_sp<SkImage> image = CreateImage(100, 100); 1574 sk_sp<SkImage> image = CreateImage(100, 100);
1456 DrawImage draw_image( 1575 DrawImage draw_image(
1457 image, SkIRect::MakeWH(image->width(), image->height()), quality, 1576 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1458 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); 1577 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable),
1578 DefaultColorSpace());
1459 scoped_refptr<TileTask> task; 1579 scoped_refptr<TileTask> task;
1460 bool need_unref = cache.GetTaskForImageAndRef( 1580 bool need_unref = cache.GetTaskForImageAndRef(
1461 draw_image, ImageDecodeCache::TracingInfo(), &task); 1581 draw_image, ImageDecodeCache::TracingInfo(), &task);
1462 EXPECT_TRUE(need_unref); 1582 EXPECT_TRUE(need_unref);
1463 EXPECT_TRUE(task); 1583 EXPECT_TRUE(task);
1464 TestTileTaskRunner::ProcessTask(task.get()); 1584 TestTileTaskRunner::ProcessTask(task.get());
1465 cache.UnrefImage(draw_image); 1585 cache.UnrefImage(draw_image);
1466 } 1586 }
1467 1587
1468 EXPECT_EQ(10u, cache.GetNumCacheEntriesForTesting()); 1588 EXPECT_EQ(10u, cache.GetNumCacheEntriesForTesting());
1469 1589
1470 // Tell our cache to clear resources. 1590 // Tell our cache to clear resources.
1471 cache.ClearCache(); 1591 cache.ClearCache();
1472 1592
1473 EXPECT_EQ(0u, cache.GetNumCacheEntriesForTesting()); 1593 EXPECT_EQ(0u, cache.GetNumCacheEntriesForTesting());
1474 } 1594 }
1475 1595
1476 } // namespace 1596 } // namespace
1477 } // namespace cc 1597 } // namespace cc
OLDNEW
« no previous file with comments | « cc/tiles/software_image_decode_cache_perftest.cc ('k') | cc/tiles/tile_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698