| Index: cc/tiles/image_decode_controller_unittest.cc
|
| diff --git a/cc/tiles/image_decode_controller_unittest.cc b/cc/tiles/image_decode_controller_unittest.cc
|
| index 4ecaf4446f3e7775d493568f2294d7201e0615ba..75bf7d02bbfcc641b4bbecdfe252b8b38586201b 100644
|
| --- a/cc/tiles/image_decode_controller_unittest.cc
|
| +++ b/cc/tiles/image_decode_controller_unittest.cc
|
| @@ -295,6 +295,44 @@ TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity2) {
|
| EXPECT_EQ(100u * 100u * 4u, key.target_bytes());
|
| }
|
|
|
| +TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRect) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(
|
| + image.get(), SkIRect::MakeXYWH(25, 35, image->width(), image->height()),
|
| + SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(75, key.target_size().width());
|
| + EXPECT_EQ(65, key.target_size().height());
|
| + EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect());
|
| + EXPECT_EQ(75u * 65u * 4u, key.target_bytes());
|
| +}
|
| +
|
| +TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRectWithScale) {
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + DrawImage draw_image(
|
| + image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()),
|
| + SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable);
|
| +
|
| + auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
|
| + EXPECT_EQ(image->uniqueID(), key.image_id());
|
| + EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality());
|
| + EXPECT_EQ(40, key.target_size().width());
|
| + EXPECT_EQ(35, key.target_size().height());
|
| + EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect());
|
| + EXPECT_EQ(40u * 35u * 4u, key.target_bytes());
|
| +}
|
| +
|
| TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) {
|
| ImageDecodeController controller;
|
| skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| @@ -650,6 +688,48 @@ TEST(ImageDecodeControllerTest, GetDecodedImageForDraw) {
|
| controller.UnrefImage(draw_image);
|
| }
|
|
|
| +TEST(ImageDecodeControllerTest, GetDecodedImageForDrawWithNonContainedSrcRect) {
|
| + ImageDecodeController controller;
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + uint64_t prepare_tiles_id = 1;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + DrawImage draw_image(
|
| + image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()),
|
| + SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable);
|
| + scoped_refptr<ImageDecodeTask> task;
|
| + bool need_unref =
|
| + controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
|
| + EXPECT_TRUE(need_unref);
|
| + EXPECT_TRUE(task);
|
| +
|
| + task->WillSchedule();
|
| + task->ScheduleOnOriginThread(nullptr);
|
| + task->DidSchedule();
|
| +
|
| + task->RunOnWorkerThread();
|
| +
|
| + task->WillComplete();
|
| + task->CompleteOnOriginThread(nullptr);
|
| + task->DidComplete();
|
| +
|
| + DecodedDrawImage decoded_draw_image =
|
| + controller.GetDecodedImageForDraw(draw_image);
|
| + EXPECT_TRUE(decoded_draw_image.image());
|
| + EXPECT_EQ(40, decoded_draw_image.image()->width());
|
| + EXPECT_EQ(35, decoded_draw_image.image()->height());
|
| + EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width());
|
| + EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height());
|
| + EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
|
| + EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity());
|
| + EXPECT_FALSE(decoded_draw_image.is_at_raster_decode());
|
| +
|
| + controller.DrawWithImageFinished(draw_image, decoded_draw_image);
|
| + controller.UnrefImage(draw_image);
|
| +}
|
| +
|
| TEST(ImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) {
|
| ImageDecodeController controller;
|
| bool has_perspective = false;
|
| @@ -843,5 +923,30 @@ TEST(ImageDecodeControllerTest, ZeroSizedImagesAreSkipped) {
|
| controller.DrawWithImageFinished(draw_image, decoded_draw_image);
|
| }
|
|
|
| +TEST(ImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) {
|
| + ImageDecodeController controller;
|
| + bool has_perspective = false;
|
| + bool is_decomposable = true;
|
| + uint64_t prepare_tiles_id = 1;
|
| + SkFilterQuality quality = kHigh_SkFilterQuality;
|
| +
|
| + skia::RefPtr<SkImage> image = CreateImage(100, 100);
|
| + DrawImage draw_image(
|
| + image.get(), SkIRect::MakeXYWH(150, 150, image->width(), image->height()),
|
| + SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
|
| +
|
| + scoped_refptr<ImageDecodeTask> task;
|
| + bool need_unref =
|
| + controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
|
| + EXPECT_FALSE(task);
|
| + EXPECT_FALSE(need_unref);
|
| +
|
| + DecodedDrawImage decoded_draw_image =
|
| + controller.GetDecodedImageForDraw(draw_image);
|
| + EXPECT_FALSE(decoded_draw_image.image());
|
| +
|
| + controller.DrawWithImageFinished(draw_image, decoded_draw_image);
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|