| 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/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" |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 | 292 |
| 293 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 293 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 294 EXPECT_EQ(image->uniqueID(), key.image_id()); | 294 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 295 EXPECT_EQ(quality, key.filter_quality()); | 295 EXPECT_EQ(quality, key.filter_quality()); |
| 296 EXPECT_EQ(7, key.target_size().width()); | 296 EXPECT_EQ(7, key.target_size().width()); |
| 297 EXPECT_EQ(3, key.target_size().height()); | 297 EXPECT_EQ(3, key.target_size().height()); |
| 298 EXPECT_FALSE(key.can_use_original_decode()); | 298 EXPECT_FALSE(key.can_use_original_decode()); |
| 299 EXPECT_EQ(7u * 3u * 4u, key.locked_bytes()); | 299 EXPECT_EQ(7u * 3u * 4u, key.locked_bytes()); |
| 300 } | 300 } |
| 301 | 301 |
| 302 TEST(SoftwareImageDecodeControllerTest, ImageKeyHighQuality) { | 302 TEST(SoftwareImageDecodeControllerTest, |
| 303 ImageKeyPartialDowscalesDropsHighQualityToMedium) { |
| 303 sk_sp<SkImage> image = CreateImage(100, 100); | 304 sk_sp<SkImage> image = CreateImage(100, 100); |
| 304 bool is_decomposable = true; | 305 bool is_decomposable = true; |
| 305 SkFilterQuality quality = kHigh_SkFilterQuality; | 306 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 306 | 307 |
| 307 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 308 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 308 quality, | 309 quality, |
| 309 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); | 310 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| 310 | 311 |
| 311 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 312 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 312 EXPECT_EQ(image->uniqueID(), key.image_id()); | 313 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 314 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); |
| 315 EXPECT_EQ(100, key.target_size().width()); |
| 316 EXPECT_EQ(100, key.target_size().height()); |
| 317 EXPECT_FALSE(key.can_use_original_decode()); |
| 318 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 319 } |
| 320 |
| 321 TEST(SoftwareImageDecodeControllerTest, |
| 322 ImageKeyFullDowscalesDropsHighQualityToMedium) { |
| 323 sk_sp<SkImage> image = CreateImage(100, 100); |
| 324 bool is_decomposable = true; |
| 325 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 326 |
| 327 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 328 quality, |
| 329 CreateMatrix(SkSize::Make(0.5f, 0.2f), is_decomposable)); |
| 330 |
| 331 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 332 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 333 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); |
| 334 EXPECT_EQ(50, key.target_size().width()); |
| 335 EXPECT_EQ(50, key.target_size().height()); |
| 336 EXPECT_FALSE(key.can_use_original_decode()); |
| 337 EXPECT_EQ(50u * 50u * 4u, key.locked_bytes()); |
| 338 } |
| 339 |
| 340 TEST(SoftwareImageDecodeControllerTest, ImageKeyDowscalesHighQuality) { |
| 341 sk_sp<SkImage> image = CreateImage(100, 100); |
| 342 bool is_decomposable = true; |
| 343 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 344 |
| 345 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 346 quality, |
| 347 CreateMatrix(SkSize::Make(2.5f, 1.5f), is_decomposable)); |
| 348 |
| 349 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 350 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 313 EXPECT_EQ(quality, key.filter_quality()); | 351 EXPECT_EQ(quality, key.filter_quality()); |
| 314 EXPECT_EQ(50, key.target_size().width()); | 352 EXPECT_EQ(250, key.target_size().width()); |
| 315 EXPECT_EQ(150, key.target_size().height()); | 353 EXPECT_EQ(150, key.target_size().height()); |
| 316 EXPECT_FALSE(key.can_use_original_decode()); | 354 EXPECT_FALSE(key.can_use_original_decode()); |
| 317 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes()); | 355 EXPECT_EQ(250u * 150u * 4u, key.locked_bytes()); |
| 318 } | 356 } |
| 319 | 357 |
| 320 TEST(SoftwareImageDecodeControllerTest, | 358 TEST(SoftwareImageDecodeControllerTest, |
| 321 ImageKeyHighQualityDropToMediumIfTooLarge) { | 359 ImageKeyHighQualityDropToMediumIfTooLarge) { |
| 322 // Just over 64MB when scaled. | 360 // Just over 64MB when scaled. |
| 323 sk_sp<SkImage> image = CreateImage(4555, 2048); | 361 sk_sp<SkImage> image = CreateImage(4555, 2048); |
| 324 bool is_decomposable = true; | 362 bool is_decomposable = true; |
| 325 SkFilterQuality quality = kHigh_SkFilterQuality; | 363 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 326 | 364 |
| 327 // At least one dimension should scale down, so that medium quality doesn't | 365 // At least one dimension should scale down, so that medium quality doesn't |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 sk_sp<SkImage> image = CreateImage(100, 100); | 509 sk_sp<SkImage> image = CreateImage(100, 100); |
| 472 bool is_decomposable = true; | 510 bool is_decomposable = true; |
| 473 SkFilterQuality quality = kHigh_SkFilterQuality; | 511 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 474 | 512 |
| 475 DrawImage draw_image( | 513 DrawImage draw_image( |
| 476 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), | 514 image, SkIRect::MakeXYWH(20, 30, image->width(), image->height()), |
| 477 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 515 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 478 | 516 |
| 479 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 517 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 480 EXPECT_EQ(image->uniqueID(), key.image_id()); | 518 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 481 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); | 519 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); |
| 482 EXPECT_EQ(40, key.target_size().width()); | 520 EXPECT_EQ(40, key.target_size().width()); |
| 483 EXPECT_EQ(35, key.target_size().height()); | 521 EXPECT_EQ(35, key.target_size().height()); |
| 484 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); | 522 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); |
| 485 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); | 523 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); |
| 486 } | 524 } |
| 487 | 525 |
| 488 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { | 526 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { |
| 489 TestSoftwareImageDecodeController controller; | 527 TestSoftwareImageDecodeController controller; |
| 490 sk_sp<SkImage> image = CreateImage(100, 100); | 528 sk_sp<SkImage> image = CreateImage(100, 100); |
| 491 bool is_decomposable = true; | 529 bool is_decomposable = true; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 image, SkIRect::MakeWH(image->width(), image->height()), | 563 image, SkIRect::MakeWH(image->width(), image->height()), |
| 526 kHigh_SkFilterQuality, | 564 kHigh_SkFilterQuality, |
| 527 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 565 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 528 scoped_refptr<TileTask> high_quality_task; | 566 scoped_refptr<TileTask> high_quality_task; |
| 529 bool need_unref = controller.GetTaskForImageAndRef( | 567 bool need_unref = controller.GetTaskForImageAndRef( |
| 530 high_quality_draw_image, ImageDecodeController::TracingInfo(), | 568 high_quality_draw_image, ImageDecodeController::TracingInfo(), |
| 531 &high_quality_task); | 569 &high_quality_task); |
| 532 EXPECT_TRUE(need_unref); | 570 EXPECT_TRUE(need_unref); |
| 533 EXPECT_TRUE(high_quality_task); | 571 EXPECT_TRUE(high_quality_task); |
| 534 | 572 |
| 535 DrawImage medium_quality_draw_image( | |
| 536 image, SkIRect::MakeWH(image->width(), image->height()), | |
| 537 kMedium_SkFilterQuality, | |
| 538 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | |
| 539 scoped_refptr<TileTask> medium_quality_task; | |
| 540 need_unref = controller.GetTaskForImageAndRef( | |
| 541 medium_quality_draw_image, ImageDecodeController::TracingInfo(), | |
| 542 &medium_quality_task); | |
| 543 EXPECT_TRUE(need_unref); | |
| 544 EXPECT_TRUE(medium_quality_task); | |
| 545 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get()); | |
| 546 | |
| 547 DrawImage low_quality_draw_image( | 573 DrawImage low_quality_draw_image( |
| 548 image, SkIRect::MakeWH(image->width(), image->height()), | 574 image, SkIRect::MakeWH(image->width(), image->height()), |
| 549 kLow_SkFilterQuality, | 575 kLow_SkFilterQuality, |
| 550 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 576 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 551 scoped_refptr<TileTask> low_quality_task; | 577 scoped_refptr<TileTask> low_quality_task; |
| 552 need_unref = controller.GetTaskForImageAndRef( | 578 need_unref = controller.GetTaskForImageAndRef( |
| 553 low_quality_draw_image, ImageDecodeController::TracingInfo(), | 579 low_quality_draw_image, ImageDecodeController::TracingInfo(), |
| 554 &low_quality_task); | 580 &low_quality_task); |
| 555 EXPECT_TRUE(need_unref); | 581 EXPECT_TRUE(need_unref); |
| 556 EXPECT_TRUE(low_quality_task); | 582 EXPECT_TRUE(low_quality_task); |
| 557 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); | 583 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); |
| 558 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); | |
| 559 | 584 |
| 560 TestTileTaskRunner::ProcessTask(high_quality_task.get()); | 585 TestTileTaskRunner::ProcessTask(high_quality_task.get()); |
| 561 TestTileTaskRunner::ProcessTask(medium_quality_task.get()); | |
| 562 TestTileTaskRunner::ProcessTask(low_quality_task.get()); | 586 TestTileTaskRunner::ProcessTask(low_quality_task.get()); |
| 563 | 587 |
| 564 controller.UnrefImage(high_quality_draw_image); | 588 controller.UnrefImage(high_quality_draw_image); |
| 565 controller.UnrefImage(medium_quality_draw_image); | |
| 566 controller.UnrefImage(low_quality_draw_image); | 589 controller.UnrefImage(low_quality_draw_image); |
| 567 } | 590 } |
| 568 | 591 |
| 569 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { | 592 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { |
| 570 TestSoftwareImageDecodeController controller; | 593 TestSoftwareImageDecodeController controller; |
| 571 sk_sp<SkImage> image = CreateImage(100, 100); | 594 sk_sp<SkImage> image = CreateImage(100, 100); |
| 572 bool is_decomposable = true; | 595 bool is_decomposable = true; |
| 573 SkFilterQuality quality = kHigh_SkFilterQuality; | 596 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 574 | 597 |
| 575 DrawImage half_size_draw_image( | 598 DrawImage half_size_draw_image( |
| (...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1426 EXPECT_EQ(decoded_draw_image_50.image(), decoded_draw_image_49.image()); | 1449 EXPECT_EQ(decoded_draw_image_50.image(), decoded_draw_image_49.image()); |
| 1427 | 1450 |
| 1428 controller.DrawWithImageFinished(draw_image_50, decoded_draw_image_50); | 1451 controller.DrawWithImageFinished(draw_image_50, decoded_draw_image_50); |
| 1429 controller.UnrefImage(draw_image_50); | 1452 controller.UnrefImage(draw_image_50); |
| 1430 controller.DrawWithImageFinished(draw_image_49, decoded_draw_image_49); | 1453 controller.DrawWithImageFinished(draw_image_49, decoded_draw_image_49); |
| 1431 controller.UnrefImage(draw_image_49); | 1454 controller.UnrefImage(draw_image_49); |
| 1432 } | 1455 } |
| 1433 | 1456 |
| 1434 } // namespace | 1457 } // namespace |
| 1435 } // namespace cc | 1458 } // namespace cc |
| OLD | NEW |