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

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

Issue 1839833003: Add medium image quality to software predecode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
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_controller.h" 5 #include "cc/tiles/software_image_decode_controller.h"
6 6
7 #include "cc/playback/draw_image.h" 7 #include "cc/playback/draw_image.h"
8 #include "cc/raster/tile_task.h" 8 #include "cc/raster/tile_task.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/skia/include/core/SkRefCnt.h" 10 #include "third_party/skia/include/core/SkRefCnt.h"
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 157
158 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 158 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
159 EXPECT_EQ(image->uniqueID(), key.image_id()); 159 EXPECT_EQ(image->uniqueID(), key.image_id());
160 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 160 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
161 EXPECT_EQ(100, key.target_size().width()); 161 EXPECT_EQ(100, key.target_size().width());
162 EXPECT_EQ(100, key.target_size().height()); 162 EXPECT_EQ(100, key.target_size().height());
163 EXPECT_TRUE(key.can_use_original_decode()); 163 EXPECT_TRUE(key.can_use_original_decode());
164 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); 164 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
165 } 165 }
166 166
167 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQualityAt1_5Scale) {
168 sk_sp<SkImage> image = CreateImage(500, 200);
169 bool is_decomposable = true;
170 SkFilterQuality quality = kMedium_SkFilterQuality;
171
172 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
173 quality,
174 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable));
175
176 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
177 EXPECT_EQ(image->uniqueID(), key.image_id());
178 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
179 EXPECT_EQ(500, key.target_size().width());
180 EXPECT_EQ(200, key.target_size().height());
181 EXPECT_TRUE(key.can_use_original_decode());
182 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes());
183 }
184
185 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQualityAt1_0cale) {
186 sk_sp<SkImage> image = CreateImage(500, 200);
187 bool is_decomposable = true;
188 SkFilterQuality quality = kMedium_SkFilterQuality;
189
190 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
191 quality,
192 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
193
194 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
195 EXPECT_EQ(image->uniqueID(), key.image_id());
196 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
197 EXPECT_EQ(500, key.target_size().width());
198 EXPECT_EQ(200, key.target_size().height());
199 EXPECT_TRUE(key.can_use_original_decode());
200 EXPECT_EQ(500u * 200u * 4u, key.locked_bytes());
201 }
202
203 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQualityAt0_75Scale) {
204 sk_sp<SkImage> image = CreateImage(500, 200);
205 bool is_decomposable = true;
206 SkFilterQuality quality = kMedium_SkFilterQuality;
207
208 DrawImage draw_image(
209 image, SkIRect::MakeWH(image->width(), image->height()), quality,
210 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable));
211
212 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
213 EXPECT_EQ(image->uniqueID(), key.image_id());
214 EXPECT_EQ(quality, key.filter_quality());
215 EXPECT_EQ(375, key.target_size().width());
216 EXPECT_EQ(150, key.target_size().height());
217 EXPECT_FALSE(key.can_use_original_decode());
218 EXPECT_EQ(375u * 150u * 4u, key.locked_bytes());
219 }
220
221 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQualityAt0_5Scale) {
222 sk_sp<SkImage> image = CreateImage(500, 200);
223 bool is_decomposable = true;
224 SkFilterQuality quality = kMedium_SkFilterQuality;
225
226 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
227 quality,
228 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
229
230 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
231 EXPECT_EQ(image->uniqueID(), key.image_id());
232 EXPECT_EQ(quality, key.filter_quality());
233 EXPECT_EQ(250, key.target_size().width());
234 EXPECT_EQ(100, key.target_size().height());
235 EXPECT_FALSE(key.can_use_original_decode());
236 EXPECT_EQ(250u * 100u * 4u, key.locked_bytes());
237 }
238
239 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQualityAt0_49Scale) {
240 sk_sp<SkImage> image = CreateImage(500, 200);
241 bool is_decomposable = true;
242 SkFilterQuality quality = kMedium_SkFilterQuality;
243
244 DrawImage draw_image(
245 image, SkIRect::MakeWH(image->width(), image->height()), quality,
246 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable));
247
248 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
249 EXPECT_EQ(image->uniqueID(), key.image_id());
250 EXPECT_EQ(quality, key.filter_quality());
251 EXPECT_EQ(245, key.target_size().width());
252 EXPECT_EQ(98, key.target_size().height());
253 EXPECT_FALSE(key.can_use_original_decode());
254 EXPECT_EQ(245u * 98u * 4u, key.locked_bytes());
255 }
256
257 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQualityAt0_1Scale) {
258 sk_sp<SkImage> image = CreateImage(500, 200);
259 bool is_decomposable = true;
260 SkFilterQuality quality = kMedium_SkFilterQuality;
261
262 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
263 quality,
264 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable));
265
266 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
267 EXPECT_EQ(image->uniqueID(), key.image_id());
268 EXPECT_EQ(quality, key.filter_quality());
269 EXPECT_EQ(50, key.target_size().width());
270 EXPECT_EQ(20, key.target_size().height());
271 EXPECT_FALSE(key.can_use_original_decode());
272 EXPECT_EQ(50u * 20u * 4u, key.locked_bytes());
273 }
274
275 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQualityAt0_01Scale) {
276 sk_sp<SkImage> image = CreateImage(500, 200);
277 bool is_decomposable = true;
278 SkFilterQuality quality = kMedium_SkFilterQuality;
279
280 DrawImage draw_image(
281 image, SkIRect::MakeWH(image->width(), image->height()), quality,
282 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable));
283
284 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
285 EXPECT_EQ(image->uniqueID(), key.image_id());
286 EXPECT_EQ(quality, key.filter_quality());
287 EXPECT_EQ(5, key.target_size().width());
288 EXPECT_EQ(2, key.target_size().height());
289 EXPECT_FALSE(key.can_use_original_decode());
290 EXPECT_EQ(5u * 2u * 4u, key.locked_bytes());
291 }
292
167 TEST(SoftwareImageDecodeControllerTest, ImageKeyHighQuality) { 293 TEST(SoftwareImageDecodeControllerTest, ImageKeyHighQuality) {
168 sk_sp<SkImage> image = CreateImage(100, 100); 294 sk_sp<SkImage> image = CreateImage(100, 100);
169 bool is_decomposable = true; 295 bool is_decomposable = true;
170 SkFilterQuality quality = kHigh_SkFilterQuality; 296 SkFilterQuality quality = kHigh_SkFilterQuality;
171 297
172 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), 298 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
173 quality, 299 quality,
174 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); 300 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable));
175 301
176 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 302 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 EXPECT_TRUE(high_quality_task); 522 EXPECT_TRUE(high_quality_task);
397 523
398 DrawImage medium_quality_draw_image( 524 DrawImage medium_quality_draw_image(
399 image, SkIRect::MakeWH(image->width(), image->height()), 525 image, SkIRect::MakeWH(image->width(), image->height()),
400 kMedium_SkFilterQuality, 526 kMedium_SkFilterQuality,
401 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 527 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
402 scoped_refptr<TileTask> medium_quality_task; 528 scoped_refptr<TileTask> medium_quality_task;
403 need_unref = controller.GetTaskForImageAndRef( 529 need_unref = controller.GetTaskForImageAndRef(
404 medium_quality_draw_image, ImageDecodeController::TracingInfo(), 530 medium_quality_draw_image, ImageDecodeController::TracingInfo(),
405 &medium_quality_task); 531 &medium_quality_task);
406 // Medium quality isn't handled by the controller, so it won't ref it. Note 532 EXPECT_TRUE(need_unref);
407 // that this will change when medium quality is handled and will need to be
408 // updated.
409 EXPECT_FALSE(need_unref);
410 EXPECT_TRUE(medium_quality_task); 533 EXPECT_TRUE(medium_quality_task);
411 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get()); 534 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get());
412 535
413 DrawImage low_quality_draw_image( 536 DrawImage low_quality_draw_image(
414 image, SkIRect::MakeWH(image->width(), image->height()), 537 image, SkIRect::MakeWH(image->width(), image->height()),
415 kLow_SkFilterQuality, 538 kLow_SkFilterQuality,
416 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); 539 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
417 scoped_refptr<TileTask> low_quality_task; 540 scoped_refptr<TileTask> low_quality_task;
418 need_unref = controller.GetTaskForImageAndRef( 541 need_unref = controller.GetTaskForImageAndRef(
419 low_quality_draw_image, ImageDecodeController::TracingInfo(), 542 low_quality_draw_image, ImageDecodeController::TracingInfo(),
420 &low_quality_task); 543 &low_quality_task);
421 EXPECT_TRUE(need_unref); 544 EXPECT_TRUE(need_unref);
422 EXPECT_TRUE(low_quality_task); 545 EXPECT_TRUE(low_quality_task);
423 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); 546 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get());
424 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); 547 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get());
425 548
426 controller.UnrefImage(high_quality_draw_image); 549 controller.UnrefImage(high_quality_draw_image);
550 controller.UnrefImage(medium_quality_draw_image);
427 controller.UnrefImage(low_quality_draw_image); 551 controller.UnrefImage(low_quality_draw_image);
428 } 552 }
429 553
430 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { 554 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) {
431 SoftwareImageDecodeController controller; 555 SoftwareImageDecodeController controller;
432 sk_sp<SkImage> image = CreateImage(100, 100); 556 sk_sp<SkImage> image = CreateImage(100, 100);
433 bool is_decomposable = true; 557 bool is_decomposable = true;
434 SkFilterQuality quality = kHigh_SkFilterQuality; 558 SkFilterQuality quality = kHigh_SkFilterQuality;
435 559
436 DrawImage half_size_draw_image( 560 DrawImage half_size_draw_image(
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 EXPECT_TRUE(decoded_draw_image.image()); 1143 EXPECT_TRUE(decoded_draw_image.image());
1020 // If we decoded the image and cached it, it would be stored in a different 1144 // If we decoded the image and cached it, it would be stored in a different
1021 // SkImage object. 1145 // SkImage object.
1022 EXPECT_TRUE(decoded_draw_image.image() != image); 1146 EXPECT_TRUE(decoded_draw_image.image() != image);
1023 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); 1147 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality());
1024 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); 1148 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity());
1025 1149
1026 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 1150 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1027 controller.UnrefImage(draw_image); 1151 controller.UnrefImage(draw_image);
1028 } 1152 }
1153
1154 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt01_5ScaleIsHandled) {
1155 SoftwareImageDecodeController controller;
1156 bool is_decomposable = true;
1157 SkFilterQuality quality = kMedium_SkFilterQuality;
1158
1159 sk_sp<SkImage> image = CreateImage(500, 200);
1160 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1161 quality,
1162 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable));
1163
1164 scoped_refptr<TileTask> task;
1165 bool need_unref = controller.GetTaskForImageAndRef(
1166 draw_image, ImageDecodeController::TracingInfo(), &task);
1167 EXPECT_TRUE(task);
1168 EXPECT_TRUE(need_unref);
1169
1170 DecodedDrawImage decoded_draw_image =
1171 controller.GetDecodedImageForDraw(draw_image);
1172 EXPECT_TRUE(decoded_draw_image.image());
1173 // If we decoded the image and cached it, it would be stored in a different
1174 // SkImageObject.
1175 EXPECT_TRUE(decoded_draw_image.image() != image);
1176 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1177 EXPECT_EQ(500, decoded_draw_image.image()->width());
1178 EXPECT_EQ(200, decoded_draw_image.image()->height());
1179
1180 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1181 controller.UnrefImage(draw_image);
1182 }
1183
1184 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt1_0ScaleIsHandled) {
1185 SoftwareImageDecodeController controller;
1186 bool is_decomposable = true;
1187 SkFilterQuality quality = kMedium_SkFilterQuality;
1188
1189 sk_sp<SkImage> image = CreateImage(500, 200);
1190 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1191 quality,
1192 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable));
1193
1194 scoped_refptr<TileTask> task;
1195 bool need_unref = controller.GetTaskForImageAndRef(
1196 draw_image, ImageDecodeController::TracingInfo(), &task);
1197 EXPECT_TRUE(task);
1198 EXPECT_TRUE(need_unref);
1199
1200 DecodedDrawImage decoded_draw_image =
1201 controller.GetDecodedImageForDraw(draw_image);
1202 EXPECT_TRUE(decoded_draw_image.image());
1203 // If we decoded the image and cached it, it would be stored in a different
1204 // SkImageObject.
1205 EXPECT_TRUE(decoded_draw_image.image() != image);
1206 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1207 EXPECT_EQ(500, decoded_draw_image.image()->width());
1208 EXPECT_EQ(200, decoded_draw_image.image()->height());
1209
1210 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1211 controller.UnrefImage(draw_image);
1212 }
1213
1214 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_75ScaleIsHandled) {
1215 SoftwareImageDecodeController controller;
1216 bool is_decomposable = true;
1217 SkFilterQuality quality = kMedium_SkFilterQuality;
1218
1219 sk_sp<SkImage> image = CreateImage(500, 200);
1220 DrawImage draw_image(
1221 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1222 CreateMatrix(SkSize::Make(0.75f, 0.75f), is_decomposable));
1223
1224 scoped_refptr<TileTask> task;
1225 bool need_unref = controller.GetTaskForImageAndRef(
1226 draw_image, ImageDecodeController::TracingInfo(), &task);
1227 EXPECT_TRUE(task);
1228 EXPECT_TRUE(need_unref);
1229
1230 DecodedDrawImage decoded_draw_image =
1231 controller.GetDecodedImageForDraw(draw_image);
1232 EXPECT_TRUE(decoded_draw_image.image());
1233 // If we decoded the image and cached it, it would be stored in a different
1234 // SkImageObject.
1235 EXPECT_TRUE(decoded_draw_image.image() != image);
1236 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1237 EXPECT_EQ(500, decoded_draw_image.image()->width());
1238 EXPECT_EQ(200, decoded_draw_image.image()->height());
1239
1240 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1241 controller.UnrefImage(draw_image);
1242 }
1243
1244 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_5ScaleIsHandled) {
1245 SoftwareImageDecodeController controller;
1246 bool is_decomposable = true;
1247 SkFilterQuality quality = kMedium_SkFilterQuality;
1248
1249 sk_sp<SkImage> image = CreateImage(500, 200);
1250 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1251 quality,
1252 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable));
1253
1254 scoped_refptr<TileTask> task;
1255 bool need_unref = controller.GetTaskForImageAndRef(
1256 draw_image, ImageDecodeController::TracingInfo(), &task);
1257 EXPECT_TRUE(task);
1258 EXPECT_TRUE(need_unref);
1259
1260 DecodedDrawImage decoded_draw_image =
1261 controller.GetDecodedImageForDraw(draw_image);
1262 EXPECT_TRUE(decoded_draw_image.image());
1263 // If we decoded the image and cached it, it would be stored in a different
1264 // SkImageObject.
1265 EXPECT_TRUE(decoded_draw_image.image() != image);
1266 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1267 EXPECT_EQ(500, decoded_draw_image.image()->width());
1268 EXPECT_EQ(200, decoded_draw_image.image()->height());
1269
1270 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1271 controller.UnrefImage(draw_image);
1272 }
1273
1274 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_49ScaleIsHandled) {
vmpstr 2016/04/29 19:09:41 Can you combine something like this test and the o
cblume 2016/05/01 22:51:28 Done.
1275 SoftwareImageDecodeController controller;
1276 bool is_decomposable = true;
1277 SkFilterQuality quality = kMedium_SkFilterQuality;
1278
1279 sk_sp<SkImage> image = CreateImage(500, 200);
1280 DrawImage draw_image(
1281 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1282 CreateMatrix(SkSize::Make(0.49f, 0.49f), is_decomposable));
1283
1284 scoped_refptr<TileTask> task;
1285 bool need_unref = controller.GetTaskForImageAndRef(
1286 draw_image, ImageDecodeController::TracingInfo(), &task);
1287 EXPECT_TRUE(task);
1288 EXPECT_TRUE(need_unref);
1289
1290 DecodedDrawImage decoded_draw_image =
1291 controller.GetDecodedImageForDraw(draw_image);
1292 EXPECT_TRUE(decoded_draw_image.image());
1293 // If we decoded the image and cached it, it would be stored in a different
1294 // SkImageObject.
1295 EXPECT_TRUE(decoded_draw_image.image() != image);
1296 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1297 EXPECT_EQ(250, decoded_draw_image.image()->width());
1298 EXPECT_EQ(100, decoded_draw_image.image()->height());
1299
1300 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1301 controller.UnrefImage(draw_image);
1302 }
1303
1304 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_1ScaleIsHandled) {
1305 SoftwareImageDecodeController controller;
1306 bool is_decomposable = true;
1307 SkFilterQuality quality = kMedium_SkFilterQuality;
1308
1309 sk_sp<SkImage> image = CreateImage(500, 200);
1310 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()),
1311 quality,
1312 CreateMatrix(SkSize::Make(0.1f, 0.1f), is_decomposable));
1313
1314 scoped_refptr<TileTask> task;
1315 bool need_unref = controller.GetTaskForImageAndRef(
1316 draw_image, ImageDecodeController::TracingInfo(), &task);
1317 EXPECT_TRUE(task);
1318 EXPECT_TRUE(need_unref);
1319
1320 DecodedDrawImage decoded_draw_image =
1321 controller.GetDecodedImageForDraw(draw_image);
1322 EXPECT_TRUE(decoded_draw_image.image());
1323 // If we decoded the image and cached it, it would be stored in a different
1324 // SkImageObject.
1325 EXPECT_TRUE(decoded_draw_image.image() != image);
1326 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1327 EXPECT_EQ(62, decoded_draw_image.image()->width());
1328 EXPECT_EQ(25, decoded_draw_image.image()->height());
1329
1330 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1331 controller.UnrefImage(draw_image);
1332 }
1333
1334 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_01ScaleIsHandled) {
1335 SoftwareImageDecodeController controller;
1336 bool is_decomposable = true;
1337 SkFilterQuality quality = kMedium_SkFilterQuality;
1338
1339 sk_sp<SkImage> image = CreateImage(500, 200);
1340 DrawImage draw_image(
1341 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1342 CreateMatrix(SkSize::Make(0.01f, 0.01f), is_decomposable));
1343
1344 scoped_refptr<TileTask> task;
1345 bool need_unref = controller.GetTaskForImageAndRef(
1346 draw_image, ImageDecodeController::TracingInfo(), &task);
1347 EXPECT_TRUE(task);
1348 EXPECT_TRUE(need_unref);
1349
1350 DecodedDrawImage decoded_draw_image =
1351 controller.GetDecodedImageForDraw(draw_image);
1352 EXPECT_TRUE(decoded_draw_image.image());
1353 // If we decoded the image and cached it, it would be stored in a different
1354 // SkImageObject.
1355 EXPECT_TRUE(decoded_draw_image.image() != image);
1356 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1357 EXPECT_EQ(7, decoded_draw_image.image()->width());
1358 EXPECT_EQ(3, decoded_draw_image.image()->height());
1359
1360 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1361 controller.UnrefImage(draw_image);
1362 }
1363
1364 TEST(SoftwareImageDecodeControllerTest, MediumQualityAt0_001ScaleIsHandled) {
1365 SoftwareImageDecodeController controller;
1366 bool is_decomposable = true;
1367 SkFilterQuality quality = kMedium_SkFilterQuality;
1368
1369 sk_sp<SkImage> image = CreateImage(500, 200);
1370 DrawImage draw_image(
1371 image, SkIRect::MakeWH(image->width(), image->height()), quality,
1372 CreateMatrix(SkSize::Make(0.001f, 0.001f), is_decomposable));
1373
1374 scoped_refptr<TileTask> task;
1375 bool need_unref = controller.GetTaskForImageAndRef(
1376 draw_image, ImageDecodeController::TracingInfo(), &task);
1377 EXPECT_FALSE(task);
1378 EXPECT_FALSE(need_unref);
1379
1380 DecodedDrawImage decoded_draw_image =
1381 controller.GetDecodedImageForDraw(draw_image);
1382 EXPECT_FALSE(decoded_draw_image.image());
1383
1384 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1385 }
1029 } // namespace 1386 } // namespace
1030 } // namespace cc 1387 } // namespace cc
OLDNEW
« cc/tiles/software_image_decode_controller.cc ('K') | « cc/tiles/software_image_decode_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698