Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |