| 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 "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace cc { | 10 namespace cc { |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 skia::RefPtr<SkImage> CreateImage(int width, int height) { | 13 sk_sp<SkImage> CreateImage(int width, int height) { |
| 14 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); | 14 SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); |
| 15 SkBitmap bitmap; | 15 SkBitmap bitmap; |
| 16 bitmap.allocPixels(info); | 16 bitmap.allocPixels(info); |
| 17 return skia::AdoptRef(SkImage::NewFromBitmap(bitmap)); | 17 return SkImage::MakeFromBitmap(bitmap); |
| 18 } | 18 } |
| 19 | 19 |
| 20 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { | 20 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { |
| 21 SkMatrix matrix; | 21 SkMatrix matrix; |
| 22 matrix.setScale(scale.width(), scale.height()); | 22 matrix.setScale(scale.width(), scale.height()); |
| 23 | 23 |
| 24 if (!is_decomposable) { | 24 if (!is_decomposable) { |
| 25 // Perspective is not decomposable, add it. | 25 // Perspective is not decomposable, add it. |
| 26 matrix[SkMatrix::kMPersp0] = 0.1f; | 26 matrix[SkMatrix::kMPersp0] = 0.1f; |
| 27 } | 27 } |
| 28 | 28 |
| 29 return matrix; | 29 return matrix; |
| 30 } | 30 } |
| 31 | 31 |
| 32 TEST(SoftwareImageDecodeControllerTest, ImageKeyLowQuality) { | 32 TEST(SoftwareImageDecodeControllerTest, ImageKeyLowQuality) { |
| 33 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 33 sk_sp<SkImage> image = CreateImage(100, 100); |
| 34 bool is_decomposable = true; | 34 bool is_decomposable = true; |
| 35 SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality}; | 35 SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality}; |
| 36 for (auto quality : qualities) { | 36 for (auto quality : qualities) { |
| 37 DrawImage draw_image( | 37 DrawImage draw_image( |
| 38 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 38 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 39 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); | 39 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| 40 | 40 |
| 41 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 41 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 42 EXPECT_EQ(image->uniqueID(), key.image_id()); | 42 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 43 EXPECT_EQ(quality, key.filter_quality()); | 43 EXPECT_EQ(quality, key.filter_quality()); |
| 44 EXPECT_EQ(100, key.target_size().width()); | 44 EXPECT_EQ(100, key.target_size().width()); |
| 45 EXPECT_EQ(100, key.target_size().height()); | 45 EXPECT_EQ(100, key.target_size().height()); |
| 46 EXPECT_TRUE(key.can_use_original_decode()); | 46 EXPECT_TRUE(key.can_use_original_decode()); |
| 47 // Since the original decode will be used, the locked_bytes is that of the | 47 // Since the original decode will be used, the locked_bytes is that of the |
| 48 // original image. | 48 // original image. |
| 49 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 49 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 50 } | 50 } |
| 51 } | 51 } |
| 52 | 52 |
| 53 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQuality) { | 53 TEST(SoftwareImageDecodeControllerTest, ImageKeyMediumQuality) { |
| 54 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 54 sk_sp<SkImage> image = CreateImage(100, 100); |
| 55 bool is_decomposable = true; | 55 bool is_decomposable = true; |
| 56 SkFilterQuality quality = kMedium_SkFilterQuality; | 56 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 57 | 57 |
| 58 DrawImage draw_image( | 58 DrawImage draw_image( |
| 59 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 59 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 60 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); | 60 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| 61 | 61 |
| 62 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 62 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 63 EXPECT_EQ(image->uniqueID(), key.image_id()); | 63 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 64 EXPECT_EQ(quality, key.filter_quality()); | 64 EXPECT_EQ(quality, key.filter_quality()); |
| 65 EXPECT_EQ(50, key.target_size().width()); | 65 EXPECT_EQ(50, key.target_size().width()); |
| 66 EXPECT_EQ(150, key.target_size().height()); | 66 EXPECT_EQ(150, key.target_size().height()); |
| 67 EXPECT_FALSE(key.can_use_original_decode()); | 67 EXPECT_FALSE(key.can_use_original_decode()); |
| 68 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes()); | 68 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes()); |
| 69 } | 69 } |
| 70 | 70 |
| 71 TEST(SoftwareImageDecodeControllerTest, | 71 TEST(SoftwareImageDecodeControllerTest, |
| 72 ImageKeyMediumQualityDropToLowIfEnlarging) { | 72 ImageKeyMediumQualityDropToLowIfEnlarging) { |
| 73 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 73 sk_sp<SkImage> image = CreateImage(100, 100); |
| 74 bool is_decomposable = true; | 74 bool is_decomposable = true; |
| 75 SkFilterQuality quality = kMedium_SkFilterQuality; | 75 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 76 | 76 |
| 77 DrawImage draw_image( | 77 DrawImage draw_image( |
| 78 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 78 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 79 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); | 79 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); |
| 80 | 80 |
| 81 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 81 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 82 EXPECT_EQ(image->uniqueID(), key.image_id()); | 82 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 83 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 83 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 84 EXPECT_EQ(100, key.target_size().width()); | 84 EXPECT_EQ(100, key.target_size().width()); |
| 85 EXPECT_EQ(100, key.target_size().height()); | 85 EXPECT_EQ(100, key.target_size().height()); |
| 86 EXPECT_TRUE(key.can_use_original_decode()); | 86 EXPECT_TRUE(key.can_use_original_decode()); |
| 87 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 87 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 88 } | 88 } |
| 89 | 89 |
| 90 TEST(SoftwareImageDecodeControllerTest, | 90 TEST(SoftwareImageDecodeControllerTest, |
| 91 ImageKeyMediumQualityDropToLowIfIdentity) { | 91 ImageKeyMediumQualityDropToLowIfIdentity) { |
| 92 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 92 sk_sp<SkImage> image = CreateImage(100, 100); |
| 93 bool is_decomposable = true; | 93 bool is_decomposable = true; |
| 94 SkFilterQuality quality = kMedium_SkFilterQuality; | 94 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 95 | 95 |
| 96 DrawImage draw_image( | 96 DrawImage draw_image( |
| 97 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 97 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 98 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 98 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 99 | 99 |
| 100 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 100 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 101 EXPECT_EQ(image->uniqueID(), key.image_id()); | 101 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 102 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 102 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 103 EXPECT_EQ(100, key.target_size().width()); | 103 EXPECT_EQ(100, key.target_size().width()); |
| 104 EXPECT_EQ(100, key.target_size().height()); | 104 EXPECT_EQ(100, key.target_size().height()); |
| 105 EXPECT_TRUE(key.can_use_original_decode()); | 105 EXPECT_TRUE(key.can_use_original_decode()); |
| 106 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 106 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 107 } | 107 } |
| 108 | 108 |
| 109 TEST(SoftwareImageDecodeControllerTest, | 109 TEST(SoftwareImageDecodeControllerTest, |
| 110 ImageKeyMediumQualityDropToLowIfNearlyIdentity) { | 110 ImageKeyMediumQualityDropToLowIfNearlyIdentity) { |
| 111 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 111 sk_sp<SkImage> image = CreateImage(100, 100); |
| 112 bool is_decomposable = true; | 112 bool is_decomposable = true; |
| 113 SkFilterQuality quality = kMedium_SkFilterQuality; | 113 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 114 | 114 |
| 115 DrawImage draw_image( | 115 DrawImage draw_image( |
| 116 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 116 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 117 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); | 117 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); |
| 118 | 118 |
| 119 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 119 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 120 EXPECT_EQ(image->uniqueID(), key.image_id()); | 120 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 121 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 121 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 122 EXPECT_EQ(100, key.target_size().width()); | 122 EXPECT_EQ(100, key.target_size().width()); |
| 123 EXPECT_EQ(100, key.target_size().height()); | 123 EXPECT_EQ(100, key.target_size().height()); |
| 124 EXPECT_TRUE(key.can_use_original_decode()); | 124 EXPECT_TRUE(key.can_use_original_decode()); |
| 125 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 125 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 126 } | 126 } |
| 127 | 127 |
| 128 TEST(SoftwareImageDecodeControllerTest, | 128 TEST(SoftwareImageDecodeControllerTest, |
| 129 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) { | 129 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) { |
| 130 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 130 sk_sp<SkImage> image = CreateImage(100, 100); |
| 131 bool is_decomposable = true; | 131 bool is_decomposable = true; |
| 132 SkFilterQuality quality = kMedium_SkFilterQuality; | 132 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 133 | 133 |
| 134 DrawImage draw_image( | 134 DrawImage draw_image( |
| 135 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 135 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 136 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); | 136 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); |
| 137 | 137 |
| 138 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 138 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 139 EXPECT_EQ(image->uniqueID(), key.image_id()); | 139 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 140 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 140 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 141 EXPECT_EQ(100, key.target_size().width()); | 141 EXPECT_EQ(100, key.target_size().width()); |
| 142 EXPECT_EQ(100, key.target_size().height()); | 142 EXPECT_EQ(100, key.target_size().height()); |
| 143 EXPECT_TRUE(key.can_use_original_decode()); | 143 EXPECT_TRUE(key.can_use_original_decode()); |
| 144 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 144 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 145 } | 145 } |
| 146 | 146 |
| 147 TEST(SoftwareImageDecodeControllerTest, | 147 TEST(SoftwareImageDecodeControllerTest, |
| 148 ImageKeyMediumQualityDropToLowIfNotDecomposable) { | 148 ImageKeyMediumQualityDropToLowIfNotDecomposable) { |
| 149 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 149 sk_sp<SkImage> image = CreateImage(100, 100); |
| 150 bool is_decomposable = false; | 150 bool is_decomposable = false; |
| 151 SkFilterQuality quality = kMedium_SkFilterQuality; | 151 SkFilterQuality quality = kMedium_SkFilterQuality; |
| 152 | 152 |
| 153 DrawImage draw_image( | 153 DrawImage draw_image( |
| 154 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 154 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 155 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); | 155 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| 156 | 156 |
| 157 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 157 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 158 EXPECT_EQ(image->uniqueID(), key.image_id()); | 158 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 159 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 159 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 160 EXPECT_EQ(100, key.target_size().width()); | 160 EXPECT_EQ(100, key.target_size().width()); |
| 161 EXPECT_EQ(100, key.target_size().height()); | 161 EXPECT_EQ(100, key.target_size().height()); |
| 162 EXPECT_TRUE(key.can_use_original_decode()); | 162 EXPECT_TRUE(key.can_use_original_decode()); |
| 163 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 163 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 164 } | 164 } |
| 165 | 165 |
| 166 TEST(SoftwareImageDecodeControllerTest, ImageKeyHighQuality) { | 166 TEST(SoftwareImageDecodeControllerTest, ImageKeyHighQuality) { |
| 167 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 167 sk_sp<SkImage> image = CreateImage(100, 100); |
| 168 bool is_decomposable = true; | 168 bool is_decomposable = true; |
| 169 SkFilterQuality quality = kHigh_SkFilterQuality; | 169 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 170 | 170 |
| 171 DrawImage draw_image( | 171 DrawImage draw_image( |
| 172 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 172 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 173 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); | 173 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| 174 | 174 |
| 175 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 175 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 176 EXPECT_EQ(image->uniqueID(), key.image_id()); | 176 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 177 EXPECT_EQ(quality, key.filter_quality()); | 177 EXPECT_EQ(quality, key.filter_quality()); |
| 178 EXPECT_EQ(50, key.target_size().width()); | 178 EXPECT_EQ(50, key.target_size().width()); |
| 179 EXPECT_EQ(150, key.target_size().height()); | 179 EXPECT_EQ(150, key.target_size().height()); |
| 180 EXPECT_FALSE(key.can_use_original_decode()); | 180 EXPECT_FALSE(key.can_use_original_decode()); |
| 181 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes()); | 181 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes()); |
| 182 } | 182 } |
| 183 | 183 |
| 184 TEST(SoftwareImageDecodeControllerTest, | 184 TEST(SoftwareImageDecodeControllerTest, |
| 185 ImageKeyHighQualityDropToMediumIfTooLarge) { | 185 ImageKeyHighQualityDropToMediumIfTooLarge) { |
| 186 // Just over 64MB when scaled. | 186 // Just over 64MB when scaled. |
| 187 skia::RefPtr<SkImage> image = CreateImage(4555, 2048); | 187 sk_sp<SkImage> image = CreateImage(4555, 2048); |
| 188 bool is_decomposable = true; | 188 bool is_decomposable = true; |
| 189 SkFilterQuality quality = kHigh_SkFilterQuality; | 189 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 190 | 190 |
| 191 // At least one dimension should scale down, so that medium quality doesn't | 191 // At least one dimension should scale down, so that medium quality doesn't |
| 192 // become low. | 192 // become low. |
| 193 DrawImage draw_image( | 193 DrawImage draw_image( |
| 194 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 194 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 195 CreateMatrix(SkSize::Make(0.9f, 2.f), is_decomposable)); | 195 CreateMatrix(SkSize::Make(0.9f, 2.f), is_decomposable)); |
| 196 | 196 |
| 197 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 197 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 198 EXPECT_EQ(image->uniqueID(), key.image_id()); | 198 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 199 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); | 199 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); |
| 200 EXPECT_EQ(4100, key.target_size().width()); | 200 EXPECT_EQ(4100, key.target_size().width()); |
| 201 EXPECT_EQ(4096, key.target_size().height()); | 201 EXPECT_EQ(4096, key.target_size().height()); |
| 202 EXPECT_FALSE(key.can_use_original_decode()); | 202 EXPECT_FALSE(key.can_use_original_decode()); |
| 203 EXPECT_EQ(4100u * 4096u * 4u, key.locked_bytes()); | 203 EXPECT_EQ(4100u * 4096u * 4u, key.locked_bytes()); |
| 204 } | 204 } |
| 205 | 205 |
| 206 TEST(SoftwareImageDecodeControllerTest, | 206 TEST(SoftwareImageDecodeControllerTest, |
| 207 ImageKeyHighQualityDropToLowIfNotDecomposable) { | 207 ImageKeyHighQualityDropToLowIfNotDecomposable) { |
| 208 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 208 sk_sp<SkImage> image = CreateImage(100, 100); |
| 209 bool is_decomposable = false; | 209 bool is_decomposable = false; |
| 210 SkFilterQuality quality = kHigh_SkFilterQuality; | 210 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 211 | 211 |
| 212 DrawImage draw_image( | 212 DrawImage draw_image( |
| 213 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 213 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 214 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); | 214 CreateMatrix(SkSize::Make(0.5f, 1.5f), is_decomposable)); |
| 215 | 215 |
| 216 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 216 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 217 EXPECT_EQ(image->uniqueID(), key.image_id()); | 217 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 218 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 218 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 219 EXPECT_EQ(100, key.target_size().width()); | 219 EXPECT_EQ(100, key.target_size().width()); |
| 220 EXPECT_EQ(100, key.target_size().height()); | 220 EXPECT_EQ(100, key.target_size().height()); |
| 221 EXPECT_TRUE(key.can_use_original_decode()); | 221 EXPECT_TRUE(key.can_use_original_decode()); |
| 222 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 222 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 223 } | 223 } |
| 224 | 224 |
| 225 TEST(SoftwareImageDecodeControllerTest, | 225 TEST(SoftwareImageDecodeControllerTest, |
| 226 ImageKeyHighQualityDropToLowIfIdentity) { | 226 ImageKeyHighQualityDropToLowIfIdentity) { |
| 227 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 227 sk_sp<SkImage> image = CreateImage(100, 100); |
| 228 bool is_decomposable = true; | 228 bool is_decomposable = true; |
| 229 SkFilterQuality quality = kHigh_SkFilterQuality; | 229 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 230 | 230 |
| 231 DrawImage draw_image( | 231 DrawImage draw_image( |
| 232 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 232 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 233 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 233 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 234 | 234 |
| 235 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 235 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 236 EXPECT_EQ(image->uniqueID(), key.image_id()); | 236 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 237 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 237 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 238 EXPECT_EQ(100, key.target_size().width()); | 238 EXPECT_EQ(100, key.target_size().width()); |
| 239 EXPECT_EQ(100, key.target_size().height()); | 239 EXPECT_EQ(100, key.target_size().height()); |
| 240 EXPECT_TRUE(key.can_use_original_decode()); | 240 EXPECT_TRUE(key.can_use_original_decode()); |
| 241 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 241 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 242 } | 242 } |
| 243 | 243 |
| 244 TEST(SoftwareImageDecodeControllerTest, | 244 TEST(SoftwareImageDecodeControllerTest, |
| 245 ImageKeyHighQualityDropToLowIfNearlyIdentity) { | 245 ImageKeyHighQualityDropToLowIfNearlyIdentity) { |
| 246 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 246 sk_sp<SkImage> image = CreateImage(100, 100); |
| 247 bool is_decomposable = true; | 247 bool is_decomposable = true; |
| 248 SkFilterQuality quality = kHigh_SkFilterQuality; | 248 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 249 | 249 |
| 250 DrawImage draw_image( | 250 DrawImage draw_image( |
| 251 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 251 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 252 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); | 252 CreateMatrix(SkSize::Make(1.001f, 1.001f), is_decomposable)); |
| 253 | 253 |
| 254 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 254 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 255 EXPECT_EQ(image->uniqueID(), key.image_id()); | 255 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 256 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 256 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 257 EXPECT_EQ(100, key.target_size().width()); | 257 EXPECT_EQ(100, key.target_size().width()); |
| 258 EXPECT_EQ(100, key.target_size().height()); | 258 EXPECT_EQ(100, key.target_size().height()); |
| 259 EXPECT_TRUE(key.can_use_original_decode()); | 259 EXPECT_TRUE(key.can_use_original_decode()); |
| 260 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 260 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 261 } | 261 } |
| 262 | 262 |
| 263 TEST(SoftwareImageDecodeControllerTest, | 263 TEST(SoftwareImageDecodeControllerTest, |
| 264 ImageKeyHighQualityDropToLowIfNearlyIdentity2) { | 264 ImageKeyHighQualityDropToLowIfNearlyIdentity2) { |
| 265 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 265 sk_sp<SkImage> image = CreateImage(100, 100); |
| 266 bool is_decomposable = true; | 266 bool is_decomposable = true; |
| 267 SkFilterQuality quality = kHigh_SkFilterQuality; | 267 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 268 | 268 |
| 269 DrawImage draw_image( | 269 DrawImage draw_image( |
| 270 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 270 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 271 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); | 271 CreateMatrix(SkSize::Make(0.999f, 0.999f), is_decomposable)); |
| 272 | 272 |
| 273 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 273 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 274 EXPECT_EQ(image->uniqueID(), key.image_id()); | 274 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 275 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 275 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 276 EXPECT_EQ(100, key.target_size().width()); | 276 EXPECT_EQ(100, key.target_size().width()); |
| 277 EXPECT_EQ(100, key.target_size().height()); | 277 EXPECT_EQ(100, key.target_size().height()); |
| 278 EXPECT_TRUE(key.can_use_original_decode()); | 278 EXPECT_TRUE(key.can_use_original_decode()); |
| 279 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 279 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 TEST(SoftwareImageDecodeControllerTest, OriginalDecodesAreEqual) { | 282 TEST(SoftwareImageDecodeControllerTest, OriginalDecodesAreEqual) { |
| 283 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 283 sk_sp<SkImage> image = CreateImage(100, 100); |
| 284 bool is_decomposable = true; | 284 bool is_decomposable = true; |
| 285 SkFilterQuality quality = kLow_SkFilterQuality; | 285 SkFilterQuality quality = kLow_SkFilterQuality; |
| 286 | 286 |
| 287 DrawImage draw_image( | 287 DrawImage draw_image( |
| 288 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 288 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 289 CreateMatrix(SkSize::Make(0.5f, 0.5), is_decomposable)); | 289 CreateMatrix(SkSize::Make(0.5f, 0.5), is_decomposable)); |
| 290 | 290 |
| 291 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 291 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 292 EXPECT_EQ(image->uniqueID(), key.image_id()); | 292 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 293 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 293 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 306 EXPECT_EQ(kLow_SkFilterQuality, another_key.filter_quality()); | 306 EXPECT_EQ(kLow_SkFilterQuality, another_key.filter_quality()); |
| 307 EXPECT_EQ(100, another_key.target_size().width()); | 307 EXPECT_EQ(100, another_key.target_size().width()); |
| 308 EXPECT_EQ(100, another_key.target_size().height()); | 308 EXPECT_EQ(100, another_key.target_size().height()); |
| 309 EXPECT_TRUE(another_key.can_use_original_decode()); | 309 EXPECT_TRUE(another_key.can_use_original_decode()); |
| 310 EXPECT_EQ(100u * 100u * 4u, another_key.locked_bytes()); | 310 EXPECT_EQ(100u * 100u * 4u, another_key.locked_bytes()); |
| 311 | 311 |
| 312 EXPECT_TRUE(key == another_key); | 312 EXPECT_TRUE(key == another_key); |
| 313 } | 313 } |
| 314 | 314 |
| 315 TEST(SoftwareImageDecodeControllerTest, ImageRectDoesNotContainSrcRect) { | 315 TEST(SoftwareImageDecodeControllerTest, ImageRectDoesNotContainSrcRect) { |
| 316 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 316 sk_sp<SkImage> image = CreateImage(100, 100); |
| 317 bool is_decomposable = true; | 317 bool is_decomposable = true; |
| 318 SkFilterQuality quality = kHigh_SkFilterQuality; | 318 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 319 | 319 |
| 320 DrawImage draw_image( | 320 DrawImage draw_image( |
| 321 image.get(), SkIRect::MakeXYWH(25, 35, image->width(), image->height()), | 321 image.get(), SkIRect::MakeXYWH(25, 35, image->width(), image->height()), |
| 322 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 322 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 323 | 323 |
| 324 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 324 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 325 EXPECT_EQ(image->uniqueID(), key.image_id()); | 325 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 326 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); | 326 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); |
| 327 EXPECT_EQ(100, key.target_size().width()); | 327 EXPECT_EQ(100, key.target_size().width()); |
| 328 EXPECT_EQ(100, key.target_size().height()); | 328 EXPECT_EQ(100, key.target_size().height()); |
| 329 EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect()); | 329 EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect()); |
| 330 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); | 330 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes()); |
| 331 } | 331 } |
| 332 | 332 |
| 333 TEST(SoftwareImageDecodeControllerTest, | 333 TEST(SoftwareImageDecodeControllerTest, |
| 334 ImageRectDoesNotContainSrcRectWithScale) { | 334 ImageRectDoesNotContainSrcRectWithScale) { |
| 335 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 335 sk_sp<SkImage> image = CreateImage(100, 100); |
| 336 bool is_decomposable = true; | 336 bool is_decomposable = true; |
| 337 SkFilterQuality quality = kHigh_SkFilterQuality; | 337 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 338 | 338 |
| 339 DrawImage draw_image( | 339 DrawImage draw_image( |
| 340 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), | 340 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), |
| 341 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 341 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 342 | 342 |
| 343 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); | 343 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); |
| 344 EXPECT_EQ(image->uniqueID(), key.image_id()); | 344 EXPECT_EQ(image->uniqueID(), key.image_id()); |
| 345 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); | 345 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); |
| 346 EXPECT_EQ(40, key.target_size().width()); | 346 EXPECT_EQ(40, key.target_size().width()); |
| 347 EXPECT_EQ(35, key.target_size().height()); | 347 EXPECT_EQ(35, key.target_size().height()); |
| 348 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); | 348 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); |
| 349 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); | 349 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes()); |
| 350 } | 350 } |
| 351 | 351 |
| 352 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { | 352 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImage) { |
| 353 SoftwareImageDecodeController controller; | 353 SoftwareImageDecodeController controller; |
| 354 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 354 sk_sp<SkImage> image = CreateImage(100, 100); |
| 355 bool is_decomposable = true; | 355 bool is_decomposable = true; |
| 356 SkFilterQuality quality = kHigh_SkFilterQuality; | 356 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 357 uint64_t prepare_tiles_id = 1; | 357 uint64_t prepare_tiles_id = 1; |
| 358 | 358 |
| 359 DrawImage draw_image( | 359 DrawImage draw_image( |
| 360 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 360 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 361 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 361 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 362 scoped_refptr<ImageDecodeTask> task; | 362 scoped_refptr<ImageDecodeTask> task; |
| 363 bool need_unref = | 363 bool need_unref = |
| 364 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 364 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 365 EXPECT_TRUE(need_unref); | 365 EXPECT_TRUE(need_unref); |
| 366 EXPECT_TRUE(task); | 366 EXPECT_TRUE(task); |
| 367 | 367 |
| 368 DrawImage another_draw_image( | 368 DrawImage another_draw_image( |
| 369 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 369 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 370 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 370 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 371 scoped_refptr<ImageDecodeTask> another_task; | 371 scoped_refptr<ImageDecodeTask> another_task; |
| 372 need_unref = controller.GetTaskForImageAndRef( | 372 need_unref = controller.GetTaskForImageAndRef( |
| 373 another_draw_image, prepare_tiles_id, &another_task); | 373 another_draw_image, prepare_tiles_id, &another_task); |
| 374 EXPECT_TRUE(need_unref); | 374 EXPECT_TRUE(need_unref); |
| 375 EXPECT_TRUE(task.get() == another_task.get()); | 375 EXPECT_TRUE(task.get() == another_task.get()); |
| 376 | 376 |
| 377 controller.UnrefImage(draw_image); | 377 controller.UnrefImage(draw_image); |
| 378 controller.UnrefImage(draw_image); | 378 controller.UnrefImage(draw_image); |
| 379 } | 379 } |
| 380 | 380 |
| 381 TEST(SoftwareImageDecodeControllerTest, | 381 TEST(SoftwareImageDecodeControllerTest, |
| 382 GetTaskForImageSameImageDifferentQuality) { | 382 GetTaskForImageSameImageDifferentQuality) { |
| 383 SoftwareImageDecodeController controller; | 383 SoftwareImageDecodeController controller; |
| 384 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 384 sk_sp<SkImage> image = CreateImage(100, 100); |
| 385 bool is_decomposable = true; | 385 bool is_decomposable = true; |
| 386 uint64_t prepare_tiles_id = 1; | 386 uint64_t prepare_tiles_id = 1; |
| 387 | 387 |
| 388 DrawImage high_quality_draw_image( | 388 DrawImage high_quality_draw_image( |
| 389 image.get(), SkIRect::MakeWH(image->width(), image->height()), | 389 image.get(), SkIRect::MakeWH(image->width(), image->height()), |
| 390 kHigh_SkFilterQuality, | 390 kHigh_SkFilterQuality, |
| 391 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 391 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 392 scoped_refptr<ImageDecodeTask> high_quality_task; | 392 scoped_refptr<ImageDecodeTask> high_quality_task; |
| 393 bool need_unref = controller.GetTaskForImageAndRef( | 393 bool need_unref = controller.GetTaskForImageAndRef( |
| 394 high_quality_draw_image, prepare_tiles_id, &high_quality_task); | 394 high_quality_draw_image, prepare_tiles_id, &high_quality_task); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 420 EXPECT_TRUE(low_quality_task); | 420 EXPECT_TRUE(low_quality_task); |
| 421 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); | 421 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); |
| 422 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); | 422 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); |
| 423 | 423 |
| 424 controller.UnrefImage(high_quality_draw_image); | 424 controller.UnrefImage(high_quality_draw_image); |
| 425 controller.UnrefImage(low_quality_draw_image); | 425 controller.UnrefImage(low_quality_draw_image); |
| 426 } | 426 } |
| 427 | 427 |
| 428 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { | 428 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { |
| 429 SoftwareImageDecodeController controller; | 429 SoftwareImageDecodeController controller; |
| 430 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 430 sk_sp<SkImage> image = CreateImage(100, 100); |
| 431 bool is_decomposable = true; | 431 bool is_decomposable = true; |
| 432 uint64_t prepare_tiles_id = 1; | 432 uint64_t prepare_tiles_id = 1; |
| 433 SkFilterQuality quality = kHigh_SkFilterQuality; | 433 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 434 | 434 |
| 435 DrawImage half_size_draw_image( | 435 DrawImage half_size_draw_image( |
| 436 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 436 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 437 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 437 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 438 scoped_refptr<ImageDecodeTask> half_size_task; | 438 scoped_refptr<ImageDecodeTask> half_size_task; |
| 439 bool need_unref = controller.GetTaskForImageAndRef( | 439 bool need_unref = controller.GetTaskForImageAndRef( |
| 440 half_size_draw_image, prepare_tiles_id, &half_size_task); | 440 half_size_draw_image, prepare_tiles_id, &half_size_task); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 454 controller.UnrefImage(half_size_draw_image); | 454 controller.UnrefImage(half_size_draw_image); |
| 455 controller.UnrefImage(quarter_size_draw_image); | 455 controller.UnrefImage(quarter_size_draw_image); |
| 456 } | 456 } |
| 457 | 457 |
| 458 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) { | 458 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageDifferentImage) { |
| 459 SoftwareImageDecodeController controller; | 459 SoftwareImageDecodeController controller; |
| 460 bool is_decomposable = true; | 460 bool is_decomposable = true; |
| 461 uint64_t prepare_tiles_id = 1; | 461 uint64_t prepare_tiles_id = 1; |
| 462 SkFilterQuality quality = kHigh_SkFilterQuality; | 462 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 463 | 463 |
| 464 skia::RefPtr<SkImage> first_image = CreateImage(100, 100); | 464 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 465 DrawImage first_draw_image( | 465 DrawImage first_draw_image( |
| 466 first_image.get(), | 466 first_image.get(), |
| 467 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 467 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
| 468 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 468 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 469 scoped_refptr<ImageDecodeTask> first_task; | 469 scoped_refptr<ImageDecodeTask> first_task; |
| 470 bool need_unref = controller.GetTaskForImageAndRef( | 470 bool need_unref = controller.GetTaskForImageAndRef( |
| 471 first_draw_image, prepare_tiles_id, &first_task); | 471 first_draw_image, prepare_tiles_id, &first_task); |
| 472 EXPECT_TRUE(need_unref); | 472 EXPECT_TRUE(need_unref); |
| 473 EXPECT_TRUE(first_task); | 473 EXPECT_TRUE(first_task); |
| 474 | 474 |
| 475 skia::RefPtr<SkImage> second_image = CreateImage(100, 100); | 475 sk_sp<SkImage> second_image = CreateImage(100, 100); |
| 476 DrawImage second_draw_image( | 476 DrawImage second_draw_image( |
| 477 second_image.get(), | 477 second_image.get(), |
| 478 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, | 478 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, |
| 479 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); | 479 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); |
| 480 scoped_refptr<ImageDecodeTask> second_task; | 480 scoped_refptr<ImageDecodeTask> second_task; |
| 481 need_unref = controller.GetTaskForImageAndRef(second_draw_image, | 481 need_unref = controller.GetTaskForImageAndRef(second_draw_image, |
| 482 prepare_tiles_id, &second_task); | 482 prepare_tiles_id, &second_task); |
| 483 EXPECT_TRUE(need_unref); | 483 EXPECT_TRUE(need_unref); |
| 484 EXPECT_TRUE(second_task); | 484 EXPECT_TRUE(second_task); |
| 485 EXPECT_TRUE(first_task.get() != second_task.get()); | 485 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 486 | 486 |
| 487 controller.UnrefImage(first_draw_image); | 487 controller.UnrefImage(first_draw_image); |
| 488 controller.UnrefImage(second_draw_image); | 488 controller.UnrefImage(second_draw_image); |
| 489 } | 489 } |
| 490 | 490 |
| 491 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) { | 491 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyDecoded) { |
| 492 SoftwareImageDecodeController controller; | 492 SoftwareImageDecodeController controller; |
| 493 bool is_decomposable = true; | 493 bool is_decomposable = true; |
| 494 uint64_t prepare_tiles_id = 1; | 494 uint64_t prepare_tiles_id = 1; |
| 495 SkFilterQuality quality = kHigh_SkFilterQuality; | 495 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 496 | 496 |
| 497 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 497 sk_sp<SkImage> image = CreateImage(100, 100); |
| 498 DrawImage draw_image( | 498 DrawImage draw_image( |
| 499 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 499 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 500 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 500 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 501 scoped_refptr<ImageDecodeTask> task; | 501 scoped_refptr<ImageDecodeTask> task; |
| 502 bool need_unref = | 502 bool need_unref = |
| 503 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 503 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 504 EXPECT_TRUE(need_unref); | 504 EXPECT_TRUE(need_unref); |
| 505 EXPECT_TRUE(task); | 505 EXPECT_TRUE(task); |
| 506 | 506 |
| 507 task->WillSchedule(); | 507 task->WillSchedule(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 522 controller.UnrefImage(draw_image); | 522 controller.UnrefImage(draw_image); |
| 523 controller.UnrefImage(draw_image); | 523 controller.UnrefImage(draw_image); |
| 524 } | 524 } |
| 525 | 525 |
| 526 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) { | 526 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageAlreadyPrerolled) { |
| 527 SoftwareImageDecodeController controller; | 527 SoftwareImageDecodeController controller; |
| 528 bool is_decomposable = true; | 528 bool is_decomposable = true; |
| 529 uint64_t prepare_tiles_id = 1; | 529 uint64_t prepare_tiles_id = 1; |
| 530 SkFilterQuality quality = kLow_SkFilterQuality; | 530 SkFilterQuality quality = kLow_SkFilterQuality; |
| 531 | 531 |
| 532 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 532 sk_sp<SkImage> image = CreateImage(100, 100); |
| 533 DrawImage draw_image( | 533 DrawImage draw_image( |
| 534 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 534 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 535 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 535 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 536 scoped_refptr<ImageDecodeTask> task; | 536 scoped_refptr<ImageDecodeTask> task; |
| 537 bool need_unref = | 537 bool need_unref = |
| 538 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 538 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 539 EXPECT_TRUE(need_unref); | 539 EXPECT_TRUE(need_unref); |
| 540 EXPECT_TRUE(task); | 540 EXPECT_TRUE(task); |
| 541 | 541 |
| 542 task->WillSchedule(); | 542 task->WillSchedule(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 564 controller.UnrefImage(draw_image); | 564 controller.UnrefImage(draw_image); |
| 565 controller.UnrefImage(draw_image); | 565 controller.UnrefImage(draw_image); |
| 566 } | 566 } |
| 567 | 567 |
| 568 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { | 568 TEST(SoftwareImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { |
| 569 SoftwareImageDecodeController controller; | 569 SoftwareImageDecodeController controller; |
| 570 bool is_decomposable = true; | 570 bool is_decomposable = true; |
| 571 uint64_t prepare_tiles_id = 1; | 571 uint64_t prepare_tiles_id = 1; |
| 572 SkFilterQuality quality = kHigh_SkFilterQuality; | 572 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 573 | 573 |
| 574 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 574 sk_sp<SkImage> image = CreateImage(100, 100); |
| 575 DrawImage draw_image( | 575 DrawImage draw_image( |
| 576 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 576 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 577 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 577 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 578 scoped_refptr<ImageDecodeTask> task; | 578 scoped_refptr<ImageDecodeTask> task; |
| 579 bool need_unref = | 579 bool need_unref = |
| 580 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 580 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 581 EXPECT_TRUE(need_unref); | 581 EXPECT_TRUE(need_unref); |
| 582 EXPECT_TRUE(task); | 582 EXPECT_TRUE(task); |
| 583 | 583 |
| 584 task->WillSchedule(); | 584 task->WillSchedule(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 611 controller.UnrefImage(draw_image); | 611 controller.UnrefImage(draw_image); |
| 612 } | 612 } |
| 613 | 613 |
| 614 TEST(SoftwareImageDecodeControllerTest, | 614 TEST(SoftwareImageDecodeControllerTest, |
| 615 GetTaskForImageCanceledWhileReffedGetsNewTask) { | 615 GetTaskForImageCanceledWhileReffedGetsNewTask) { |
| 616 SoftwareImageDecodeController controller; | 616 SoftwareImageDecodeController controller; |
| 617 bool is_decomposable = true; | 617 bool is_decomposable = true; |
| 618 uint64_t prepare_tiles_id = 1; | 618 uint64_t prepare_tiles_id = 1; |
| 619 SkFilterQuality quality = kHigh_SkFilterQuality; | 619 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 620 | 620 |
| 621 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 621 sk_sp<SkImage> image = CreateImage(100, 100); |
| 622 DrawImage draw_image( | 622 DrawImage draw_image( |
| 623 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 623 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 624 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 624 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 625 scoped_refptr<ImageDecodeTask> task; | 625 scoped_refptr<ImageDecodeTask> task; |
| 626 bool need_unref = | 626 bool need_unref = |
| 627 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 627 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 628 EXPECT_TRUE(need_unref); | 628 EXPECT_TRUE(need_unref); |
| 629 EXPECT_TRUE(task); | 629 EXPECT_TRUE(task); |
| 630 | 630 |
| 631 task->WillSchedule(); | 631 task->WillSchedule(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 657 controller.UnrefImage(draw_image); | 657 controller.UnrefImage(draw_image); |
| 658 controller.UnrefImage(draw_image); | 658 controller.UnrefImage(draw_image); |
| 659 } | 659 } |
| 660 | 660 |
| 661 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) { | 661 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDraw) { |
| 662 SoftwareImageDecodeController controller; | 662 SoftwareImageDecodeController controller; |
| 663 bool is_decomposable = true; | 663 bool is_decomposable = true; |
| 664 uint64_t prepare_tiles_id = 1; | 664 uint64_t prepare_tiles_id = 1; |
| 665 SkFilterQuality quality = kHigh_SkFilterQuality; | 665 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 666 | 666 |
| 667 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 667 sk_sp<SkImage> image = CreateImage(100, 100); |
| 668 DrawImage draw_image( | 668 DrawImage draw_image( |
| 669 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 669 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 670 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 670 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 671 scoped_refptr<ImageDecodeTask> task; | 671 scoped_refptr<ImageDecodeTask> task; |
| 672 bool need_unref = | 672 bool need_unref = |
| 673 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 673 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 674 EXPECT_TRUE(need_unref); | 674 EXPECT_TRUE(need_unref); |
| 675 EXPECT_TRUE(task); | 675 EXPECT_TRUE(task); |
| 676 | 676 |
| 677 task->WillSchedule(); | 677 task->WillSchedule(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 699 controller.UnrefImage(draw_image); | 699 controller.UnrefImage(draw_image); |
| 700 } | 700 } |
| 701 | 701 |
| 702 TEST(SoftwareImageDecodeControllerTest, | 702 TEST(SoftwareImageDecodeControllerTest, |
| 703 GetDecodedImageForDrawWithNonContainedSrcRect) { | 703 GetDecodedImageForDrawWithNonContainedSrcRect) { |
| 704 SoftwareImageDecodeController controller; | 704 SoftwareImageDecodeController controller; |
| 705 bool is_decomposable = true; | 705 bool is_decomposable = true; |
| 706 uint64_t prepare_tiles_id = 1; | 706 uint64_t prepare_tiles_id = 1; |
| 707 SkFilterQuality quality = kHigh_SkFilterQuality; | 707 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 708 | 708 |
| 709 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 709 sk_sp<SkImage> image = CreateImage(100, 100); |
| 710 DrawImage draw_image( | 710 DrawImage draw_image( |
| 711 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), | 711 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), |
| 712 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 712 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 713 scoped_refptr<ImageDecodeTask> task; | 713 scoped_refptr<ImageDecodeTask> task; |
| 714 bool need_unref = | 714 bool need_unref = |
| 715 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 715 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 716 EXPECT_TRUE(need_unref); | 716 EXPECT_TRUE(need_unref); |
| 717 EXPECT_TRUE(task); | 717 EXPECT_TRUE(task); |
| 718 | 718 |
| 719 task->WillSchedule(); | 719 task->WillSchedule(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 739 | 739 |
| 740 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 740 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 741 controller.UnrefImage(draw_image); | 741 controller.UnrefImage(draw_image); |
| 742 } | 742 } |
| 743 | 743 |
| 744 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { | 744 TEST(SoftwareImageDecodeControllerTest, GetDecodedImageForDrawAtRasterDecode) { |
| 745 SoftwareImageDecodeController controller; | 745 SoftwareImageDecodeController controller; |
| 746 bool is_decomposable = true; | 746 bool is_decomposable = true; |
| 747 SkFilterQuality quality = kHigh_SkFilterQuality; | 747 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 748 | 748 |
| 749 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 749 sk_sp<SkImage> image = CreateImage(100, 100); |
| 750 DrawImage draw_image( | 750 DrawImage draw_image( |
| 751 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 751 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 752 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 752 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 753 | 753 |
| 754 DecodedDrawImage decoded_draw_image = | 754 DecodedDrawImage decoded_draw_image = |
| 755 controller.GetDecodedImageForDraw(draw_image); | 755 controller.GetDecodedImageForDraw(draw_image); |
| 756 EXPECT_TRUE(decoded_draw_image.image()); | 756 EXPECT_TRUE(decoded_draw_image.image()); |
| 757 EXPECT_EQ(50, decoded_draw_image.image()->width()); | 757 EXPECT_EQ(50, decoded_draw_image.image()->width()); |
| 758 EXPECT_EQ(50, decoded_draw_image.image()->height()); | 758 EXPECT_EQ(50, decoded_draw_image.image()->height()); |
| 759 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 759 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| 760 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); | 760 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().height()); |
| 761 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 761 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 762 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); | 762 EXPECT_FALSE(decoded_draw_image.is_scale_adjustment_identity()); |
| 763 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); | 763 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); |
| 764 | 764 |
| 765 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 765 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 766 } | 766 } |
| 767 | 767 |
| 768 TEST(SoftwareImageDecodeControllerTest, | 768 TEST(SoftwareImageDecodeControllerTest, |
| 769 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { | 769 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { |
| 770 SoftwareImageDecodeController controller; | 770 SoftwareImageDecodeController controller; |
| 771 bool is_decomposable = true; | 771 bool is_decomposable = true; |
| 772 SkFilterQuality quality = kHigh_SkFilterQuality; | 772 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 773 | 773 |
| 774 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 774 sk_sp<SkImage> image = CreateImage(100, 100); |
| 775 DrawImage draw_image( | 775 DrawImage draw_image( |
| 776 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 776 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 777 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 777 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 778 | 778 |
| 779 DecodedDrawImage decoded_draw_image = | 779 DecodedDrawImage decoded_draw_image = |
| 780 controller.GetDecodedImageForDraw(draw_image); | 780 controller.GetDecodedImageForDraw(draw_image); |
| 781 EXPECT_TRUE(decoded_draw_image.image()); | 781 EXPECT_TRUE(decoded_draw_image.image()); |
| 782 EXPECT_EQ(50, decoded_draw_image.image()->width()); | 782 EXPECT_EQ(50, decoded_draw_image.image()->width()); |
| 783 EXPECT_EQ(50, decoded_draw_image.image()->height()); | 783 EXPECT_EQ(50, decoded_draw_image.image()->height()); |
| 784 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 784 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 796 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); | 796 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); |
| 797 } | 797 } |
| 798 | 798 |
| 799 TEST(SoftwareImageDecodeControllerTest, | 799 TEST(SoftwareImageDecodeControllerTest, |
| 800 GetDecodedImageForDrawAtRasterDecodeDoesNotPreventTasks) { | 800 GetDecodedImageForDrawAtRasterDecodeDoesNotPreventTasks) { |
| 801 SoftwareImageDecodeController controller; | 801 SoftwareImageDecodeController controller; |
| 802 bool is_decomposable = true; | 802 bool is_decomposable = true; |
| 803 uint64_t prepare_tiles_id = 1; | 803 uint64_t prepare_tiles_id = 1; |
| 804 SkFilterQuality quality = kHigh_SkFilterQuality; | 804 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 805 | 805 |
| 806 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 806 sk_sp<SkImage> image = CreateImage(100, 100); |
| 807 DrawImage draw_image( | 807 DrawImage draw_image( |
| 808 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 808 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 809 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 809 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 810 | 810 |
| 811 DecodedDrawImage decoded_draw_image = | 811 DecodedDrawImage decoded_draw_image = |
| 812 controller.GetDecodedImageForDraw(draw_image); | 812 controller.GetDecodedImageForDraw(draw_image); |
| 813 EXPECT_TRUE(decoded_draw_image.image()); | 813 EXPECT_TRUE(decoded_draw_image.image()); |
| 814 EXPECT_EQ(50, decoded_draw_image.image()->width()); | 814 EXPECT_EQ(50, decoded_draw_image.image()->width()); |
| 815 EXPECT_EQ(50, decoded_draw_image.image()->height()); | 815 EXPECT_EQ(50, decoded_draw_image.image()->height()); |
| 816 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 816 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 controller.UnrefImage(draw_image); | 850 controller.UnrefImage(draw_image); |
| 851 } | 851 } |
| 852 | 852 |
| 853 TEST(SoftwareImageDecodeControllerTest, | 853 TEST(SoftwareImageDecodeControllerTest, |
| 854 GetDecodedImageForDrawAtRasterDecodeIsUsedForLockedCache) { | 854 GetDecodedImageForDrawAtRasterDecodeIsUsedForLockedCache) { |
| 855 SoftwareImageDecodeController controller; | 855 SoftwareImageDecodeController controller; |
| 856 bool is_decomposable = true; | 856 bool is_decomposable = true; |
| 857 uint64_t prepare_tiles_id = 1; | 857 uint64_t prepare_tiles_id = 1; |
| 858 SkFilterQuality quality = kHigh_SkFilterQuality; | 858 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 859 | 859 |
| 860 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 860 sk_sp<SkImage> image = CreateImage(100, 100); |
| 861 DrawImage draw_image( | 861 DrawImage draw_image( |
| 862 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 862 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 863 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 863 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 864 | 864 |
| 865 DecodedDrawImage decoded_draw_image = | 865 DecodedDrawImage decoded_draw_image = |
| 866 controller.GetDecodedImageForDraw(draw_image); | 866 controller.GetDecodedImageForDraw(draw_image); |
| 867 EXPECT_TRUE(decoded_draw_image.image()); | 867 EXPECT_TRUE(decoded_draw_image.image()); |
| 868 EXPECT_EQ(50, decoded_draw_image.image()->width()); | 868 EXPECT_EQ(50, decoded_draw_image.image()->width()); |
| 869 EXPECT_EQ(50, decoded_draw_image.image()->height()); | 869 EXPECT_EQ(50, decoded_draw_image.image()->height()); |
| 870 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); | 870 EXPECT_FLOAT_EQ(0.5f, decoded_draw_image.scale_adjustment().width()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); | 904 controller.DrawWithImageFinished(draw_image, another_decoded_draw_image); |
| 905 controller.UnrefImage(draw_image); | 905 controller.UnrefImage(draw_image); |
| 906 } | 906 } |
| 907 | 907 |
| 908 TEST(SoftwareImageDecodeControllerTest, ZeroSizedImagesAreSkipped) { | 908 TEST(SoftwareImageDecodeControllerTest, ZeroSizedImagesAreSkipped) { |
| 909 SoftwareImageDecodeController controller; | 909 SoftwareImageDecodeController controller; |
| 910 bool is_decomposable = true; | 910 bool is_decomposable = true; |
| 911 uint64_t prepare_tiles_id = 1; | 911 uint64_t prepare_tiles_id = 1; |
| 912 SkFilterQuality quality = kHigh_SkFilterQuality; | 912 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 913 | 913 |
| 914 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 914 sk_sp<SkImage> image = CreateImage(100, 100); |
| 915 DrawImage draw_image( | 915 DrawImage draw_image( |
| 916 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 916 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 917 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); | 917 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); |
| 918 | 918 |
| 919 scoped_refptr<ImageDecodeTask> task; | 919 scoped_refptr<ImageDecodeTask> task; |
| 920 bool need_unref = | 920 bool need_unref = |
| 921 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 921 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 922 EXPECT_FALSE(task); | 922 EXPECT_FALSE(task); |
| 923 EXPECT_FALSE(need_unref); | 923 EXPECT_FALSE(need_unref); |
| 924 | 924 |
| 925 DecodedDrawImage decoded_draw_image = | 925 DecodedDrawImage decoded_draw_image = |
| 926 controller.GetDecodedImageForDraw(draw_image); | 926 controller.GetDecodedImageForDraw(draw_image); |
| 927 EXPECT_FALSE(decoded_draw_image.image()); | 927 EXPECT_FALSE(decoded_draw_image.image()); |
| 928 | 928 |
| 929 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 929 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 930 } | 930 } |
| 931 | 931 |
| 932 TEST(SoftwareImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { | 932 TEST(SoftwareImageDecodeControllerTest, NonOverlappingSrcRectImagesAreSkipped) { |
| 933 SoftwareImageDecodeController controller; | 933 SoftwareImageDecodeController controller; |
| 934 bool is_decomposable = true; | 934 bool is_decomposable = true; |
| 935 uint64_t prepare_tiles_id = 1; | 935 uint64_t prepare_tiles_id = 1; |
| 936 SkFilterQuality quality = kHigh_SkFilterQuality; | 936 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 937 | 937 |
| 938 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 938 sk_sp<SkImage> image = CreateImage(100, 100); |
| 939 DrawImage draw_image( | 939 DrawImage draw_image( |
| 940 image.get(), SkIRect::MakeXYWH(150, 150, image->width(), image->height()), | 940 image.get(), SkIRect::MakeXYWH(150, 150, image->width(), image->height()), |
| 941 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 941 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 942 | 942 |
| 943 scoped_refptr<ImageDecodeTask> task; | 943 scoped_refptr<ImageDecodeTask> task; |
| 944 bool need_unref = | 944 bool need_unref = |
| 945 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 945 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 946 EXPECT_FALSE(task); | 946 EXPECT_FALSE(task); |
| 947 EXPECT_FALSE(need_unref); | 947 EXPECT_FALSE(need_unref); |
| 948 | 948 |
| 949 DecodedDrawImage decoded_draw_image = | 949 DecodedDrawImage decoded_draw_image = |
| 950 controller.GetDecodedImageForDraw(draw_image); | 950 controller.GetDecodedImageForDraw(draw_image); |
| 951 EXPECT_FALSE(decoded_draw_image.image()); | 951 EXPECT_FALSE(decoded_draw_image.image()); |
| 952 | 952 |
| 953 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 953 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 954 } | 954 } |
| 955 | 955 |
| 956 TEST(SoftwareImageDecodeControllerTest, LowQualityFilterIsHandled) { | 956 TEST(SoftwareImageDecodeControllerTest, LowQualityFilterIsHandled) { |
| 957 SoftwareImageDecodeController controller; | 957 SoftwareImageDecodeController controller; |
| 958 bool is_decomposable = true; | 958 bool is_decomposable = true; |
| 959 uint64_t prepare_tiles_id = 1; | 959 uint64_t prepare_tiles_id = 1; |
| 960 SkFilterQuality quality = kLow_SkFilterQuality; | 960 SkFilterQuality quality = kLow_SkFilterQuality; |
| 961 | 961 |
| 962 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 962 sk_sp<SkImage> image = CreateImage(100, 100); |
| 963 DrawImage draw_image( | 963 DrawImage draw_image( |
| 964 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, | 964 image.get(), SkIRect::MakeWH(image->width(), image->height()), quality, |
| 965 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 965 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); |
| 966 | 966 |
| 967 scoped_refptr<ImageDecodeTask> task; | 967 scoped_refptr<ImageDecodeTask> task; |
| 968 bool need_unref = | 968 bool need_unref = |
| 969 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 969 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 970 EXPECT_TRUE(task); | 970 EXPECT_TRUE(task); |
| 971 EXPECT_TRUE(need_unref); | 971 EXPECT_TRUE(need_unref); |
| 972 | 972 |
| 973 DecodedDrawImage decoded_draw_image = | 973 DecodedDrawImage decoded_draw_image = |
| 974 controller.GetDecodedImageForDraw(draw_image); | 974 controller.GetDecodedImageForDraw(draw_image); |
| 975 EXPECT_TRUE(decoded_draw_image.image()); | 975 EXPECT_TRUE(decoded_draw_image.image()); |
| 976 // If we decoded the image and cached it, it would be stored in a different | 976 // If we decoded the image and cached it, it would be stored in a different |
| 977 // SkImage object. | 977 // SkImage object. |
| 978 EXPECT_TRUE(decoded_draw_image.image() != image.get()); | 978 EXPECT_TRUE(decoded_draw_image.image() != image.get()); |
| 979 | 979 |
| 980 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 980 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 981 controller.UnrefImage(draw_image); | 981 controller.UnrefImage(draw_image); |
| 982 } | 982 } |
| 983 | 983 |
| 984 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) { | 984 TEST(SoftwareImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) { |
| 985 SoftwareImageDecodeController controller; | 985 SoftwareImageDecodeController controller; |
| 986 bool is_decomposable = true; | 986 bool is_decomposable = true; |
| 987 uint64_t prepare_tiles_id = 1; | 987 uint64_t prepare_tiles_id = 1; |
| 988 SkFilterQuality quality = kLow_SkFilterQuality; | 988 SkFilterQuality quality = kLow_SkFilterQuality; |
| 989 | 989 |
| 990 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 990 sk_sp<SkImage> image = CreateImage(100, 100); |
| 991 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, | 991 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| 992 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 992 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 993 | 993 |
| 994 scoped_refptr<ImageDecodeTask> task; | 994 scoped_refptr<ImageDecodeTask> task; |
| 995 bool need_unref = | 995 bool need_unref = |
| 996 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 996 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 997 EXPECT_TRUE(task); | 997 EXPECT_TRUE(task); |
| 998 EXPECT_TRUE(need_unref); | 998 EXPECT_TRUE(need_unref); |
| 999 | 999 |
| 1000 DecodedDrawImage decoded_draw_image = | 1000 DecodedDrawImage decoded_draw_image = |
| 1001 controller.GetDecodedImageForDraw(draw_image); | 1001 controller.GetDecodedImageForDraw(draw_image); |
| 1002 EXPECT_TRUE(decoded_draw_image.image()); | 1002 EXPECT_TRUE(decoded_draw_image.image()); |
| 1003 // If we decoded the image and cached it, it would be stored in a different | 1003 // If we decoded the image and cached it, it would be stored in a different |
| 1004 // SkImage object. | 1004 // SkImage object. |
| 1005 EXPECT_TRUE(decoded_draw_image.image() != image.get()); | 1005 EXPECT_TRUE(decoded_draw_image.image() != image.get()); |
| 1006 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); | 1006 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1007 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); | 1007 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); |
| 1008 | 1008 |
| 1009 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1009 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1010 controller.UnrefImage(draw_image); | 1010 controller.UnrefImage(draw_image); |
| 1011 } | 1011 } |
| 1012 | 1012 |
| 1013 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) { | 1013 TEST(SoftwareImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) { |
| 1014 SoftwareImageDecodeController controller; | 1014 SoftwareImageDecodeController controller; |
| 1015 bool is_decomposable = true; | 1015 bool is_decomposable = true; |
| 1016 uint64_t prepare_tiles_id = 1; | 1016 uint64_t prepare_tiles_id = 1; |
| 1017 SkFilterQuality quality = kNone_SkFilterQuality; | 1017 SkFilterQuality quality = kNone_SkFilterQuality; |
| 1018 | 1018 |
| 1019 skia::RefPtr<SkImage> image = CreateImage(100, 100); | 1019 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1020 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, | 1020 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80), quality, |
| 1021 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1021 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); |
| 1022 | 1022 |
| 1023 scoped_refptr<ImageDecodeTask> task; | 1023 scoped_refptr<ImageDecodeTask> task; |
| 1024 bool need_unref = | 1024 bool need_unref = |
| 1025 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); | 1025 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); |
| 1026 EXPECT_TRUE(task); | 1026 EXPECT_TRUE(task); |
| 1027 EXPECT_TRUE(need_unref); | 1027 EXPECT_TRUE(need_unref); |
| 1028 | 1028 |
| 1029 DecodedDrawImage decoded_draw_image = | 1029 DecodedDrawImage decoded_draw_image = |
| 1030 controller.GetDecodedImageForDraw(draw_image); | 1030 controller.GetDecodedImageForDraw(draw_image); |
| 1031 EXPECT_TRUE(decoded_draw_image.image()); | 1031 EXPECT_TRUE(decoded_draw_image.image()); |
| 1032 // If we decoded the image and cached it, it would be stored in a different | 1032 // If we decoded the image and cached it, it would be stored in a different |
| 1033 // SkImage object. | 1033 // SkImage object. |
| 1034 EXPECT_TRUE(decoded_draw_image.image() != image.get()); | 1034 EXPECT_TRUE(decoded_draw_image.image() != image.get()); |
| 1035 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); | 1035 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality()); |
| 1036 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); | 1036 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity()); |
| 1037 | 1037 |
| 1038 controller.DrawWithImageFinished(draw_image, decoded_draw_image); | 1038 controller.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1039 controller.UnrefImage(draw_image); | 1039 controller.UnrefImage(draw_image); |
| 1040 } | 1040 } |
| 1041 } // namespace | 1041 } // namespace |
| 1042 } // namespace cc | 1042 } // namespace cc |
| OLD | NEW |