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

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

Issue 1682803003: cc: ImageDecodes: handle low quality filters. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove old code Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/tiles/image_decode_controller.h" 5 #include "cc/tiles/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 {
(...skipping 14 matching lines...) Expand all
25 for (auto quality : qualities) { 25 for (auto quality : qualities) {
26 DrawImage draw_image( 26 DrawImage draw_image(
27 image.get(), SkIRect::MakeWH(image->width(), image->height()), 27 image.get(), SkIRect::MakeWH(image->width(), image->height()),
28 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 28 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
29 29
30 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 30 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
31 EXPECT_EQ(image->uniqueID(), key.image_id()); 31 EXPECT_EQ(image->uniqueID(), key.image_id());
32 EXPECT_EQ(quality, key.filter_quality()); 32 EXPECT_EQ(quality, key.filter_quality());
33 EXPECT_EQ(50, key.target_size().width()); 33 EXPECT_EQ(50, key.target_size().width());
34 EXPECT_EQ(150, key.target_size().height()); 34 EXPECT_EQ(150, key.target_size().height());
35 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 35 EXPECT_TRUE(key.can_use_original_decode());
36 // Since the original decode will be used, the locked_bytes is that of the
37 // original image.
38 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
36 } 39 }
37 } 40 }
38 41
39 TEST(ImageDecodeControllerTest, ImageKeyMediumQuality) { 42 TEST(ImageDecodeControllerTest, ImageKeyMediumQuality) {
40 skia::RefPtr<SkImage> image = CreateImage(100, 100); 43 skia::RefPtr<SkImage> image = CreateImage(100, 100);
41 bool has_perspective = false; 44 bool has_perspective = false;
42 bool is_decomposable = true; 45 bool is_decomposable = true;
43 SkFilterQuality quality = kMedium_SkFilterQuality; 46 SkFilterQuality quality = kMedium_SkFilterQuality;
44 47
45 DrawImage draw_image( 48 DrawImage draw_image(
46 image.get(), SkIRect::MakeWH(image->width(), image->height()), 49 image.get(), SkIRect::MakeWH(image->width(), image->height()),
47 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 50 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
48 51
49 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 52 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
50 EXPECT_EQ(image->uniqueID(), key.image_id()); 53 EXPECT_EQ(image->uniqueID(), key.image_id());
51 EXPECT_EQ(quality, key.filter_quality()); 54 EXPECT_EQ(quality, key.filter_quality());
52 EXPECT_EQ(50, key.target_size().width()); 55 EXPECT_EQ(50, key.target_size().width());
53 EXPECT_EQ(150, key.target_size().height()); 56 EXPECT_EQ(150, key.target_size().height());
54 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 57 EXPECT_FALSE(key.can_use_original_decode());
58 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
55 } 59 }
56 60
57 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityEvenWithPerspective) { 61 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityEvenWithPerspective) {
58 skia::RefPtr<SkImage> image = CreateImage(100, 100); 62 skia::RefPtr<SkImage> image = CreateImage(100, 100);
59 bool has_perspective = true; 63 bool has_perspective = true;
60 bool is_decomposable = true; 64 bool is_decomposable = true;
61 SkFilterQuality quality = kMedium_SkFilterQuality; 65 SkFilterQuality quality = kMedium_SkFilterQuality;
62 66
63 DrawImage draw_image( 67 DrawImage draw_image(
64 image.get(), SkIRect::MakeWH(image->width(), image->height()), 68 image.get(), SkIRect::MakeWH(image->width(), image->height()),
65 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 69 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
66 70
67 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 71 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
68 EXPECT_EQ(image->uniqueID(), key.image_id()); 72 EXPECT_EQ(image->uniqueID(), key.image_id());
69 EXPECT_EQ(quality, key.filter_quality()); 73 EXPECT_EQ(quality, key.filter_quality());
70 EXPECT_EQ(50, key.target_size().width()); 74 EXPECT_EQ(50, key.target_size().width());
71 EXPECT_EQ(150, key.target_size().height()); 75 EXPECT_EQ(150, key.target_size().height());
72 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 76 EXPECT_FALSE(key.can_use_original_decode());
77 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
73 } 78 }
74 79
75 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfEnlarging) { 80 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfEnlarging) {
76 skia::RefPtr<SkImage> image = CreateImage(100, 100); 81 skia::RefPtr<SkImage> image = CreateImage(100, 100);
77 bool has_perspective = false; 82 bool has_perspective = false;
78 bool is_decomposable = true; 83 bool is_decomposable = true;
79 SkFilterQuality quality = kMedium_SkFilterQuality; 84 SkFilterQuality quality = kMedium_SkFilterQuality;
80 85
81 DrawImage draw_image( 86 DrawImage draw_image(
82 image.get(), SkIRect::MakeWH(image->width(), image->height()), 87 image.get(), SkIRect::MakeWH(image->width(), image->height()),
83 SkSize::Make(1.5f, 1.5f), quality, has_perspective, is_decomposable); 88 SkSize::Make(1.5f, 1.5f), quality, has_perspective, is_decomposable);
84 89
85 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 90 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
86 EXPECT_EQ(image->uniqueID(), key.image_id()); 91 EXPECT_EQ(image->uniqueID(), key.image_id());
87 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 92 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
88 EXPECT_EQ(150, key.target_size().width()); 93 EXPECT_EQ(150, key.target_size().width());
89 EXPECT_EQ(150, key.target_size().height()); 94 EXPECT_EQ(150, key.target_size().height());
90 EXPECT_EQ(150u * 150u * 4u, key.target_bytes()); 95 EXPECT_TRUE(key.can_use_original_decode());
96 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
91 } 97 }
92 98
93 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfIdentity) { 99 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfIdentity) {
94 skia::RefPtr<SkImage> image = CreateImage(100, 100); 100 skia::RefPtr<SkImage> image = CreateImage(100, 100);
95 bool has_perspective = false; 101 bool has_perspective = false;
96 bool is_decomposable = true; 102 bool is_decomposable = true;
97 SkFilterQuality quality = kMedium_SkFilterQuality; 103 SkFilterQuality quality = kMedium_SkFilterQuality;
98 104
99 DrawImage draw_image( 105 DrawImage draw_image(
100 image.get(), SkIRect::MakeWH(image->width(), image->height()), 106 image.get(), SkIRect::MakeWH(image->width(), image->height()),
101 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); 107 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
102 108
103 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 109 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
104 EXPECT_EQ(image->uniqueID(), key.image_id()); 110 EXPECT_EQ(image->uniqueID(), key.image_id());
105 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 111 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
106 EXPECT_EQ(100, key.target_size().width()); 112 EXPECT_EQ(100, key.target_size().width());
107 EXPECT_EQ(100, key.target_size().height()); 113 EXPECT_EQ(100, key.target_size().height());
108 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 114 EXPECT_TRUE(key.can_use_original_decode());
115 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
109 } 116 }
110 117
111 TEST(ImageDecodeControllerTest, 118 TEST(ImageDecodeControllerTest,
112 ImageKeyMediumQualityDropToLowIfNearlyIdentity) { 119 ImageKeyMediumQualityDropToLowIfNearlyIdentity) {
113 skia::RefPtr<SkImage> image = CreateImage(100, 100); 120 skia::RefPtr<SkImage> image = CreateImage(100, 100);
114 bool has_perspective = false; 121 bool has_perspective = false;
115 bool is_decomposable = true; 122 bool is_decomposable = true;
116 SkFilterQuality quality = kMedium_SkFilterQuality; 123 SkFilterQuality quality = kMedium_SkFilterQuality;
117 124
118 DrawImage draw_image( 125 DrawImage draw_image(
119 image.get(), SkIRect::MakeWH(image->width(), image->height()), 126 image.get(), SkIRect::MakeWH(image->width(), image->height()),
120 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable); 127 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable);
121 128
122 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 129 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
123 EXPECT_EQ(image->uniqueID(), key.image_id()); 130 EXPECT_EQ(image->uniqueID(), key.image_id());
124 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 131 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
125 EXPECT_EQ(100, key.target_size().width()); 132 EXPECT_EQ(100, key.target_size().width());
126 EXPECT_EQ(100, key.target_size().height()); 133 EXPECT_EQ(100, key.target_size().height());
127 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 134 EXPECT_TRUE(key.can_use_original_decode());
135 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
128 } 136 }
129 137
130 TEST(ImageDecodeControllerTest, 138 TEST(ImageDecodeControllerTest,
131 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) { 139 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) {
132 skia::RefPtr<SkImage> image = CreateImage(100, 100); 140 skia::RefPtr<SkImage> image = CreateImage(100, 100);
133 bool has_perspective = false; 141 bool has_perspective = false;
134 bool is_decomposable = true; 142 bool is_decomposable = true;
135 SkFilterQuality quality = kMedium_SkFilterQuality; 143 SkFilterQuality quality = kMedium_SkFilterQuality;
136 144
137 DrawImage draw_image( 145 DrawImage draw_image(
138 image.get(), SkIRect::MakeWH(image->width(), image->height()), 146 image.get(), SkIRect::MakeWH(image->width(), image->height()),
139 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable); 147 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable);
140 148
141 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 149 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
142 EXPECT_EQ(image->uniqueID(), key.image_id()); 150 EXPECT_EQ(image->uniqueID(), key.image_id());
143 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 151 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
144 EXPECT_EQ(100, key.target_size().width()); 152 EXPECT_EQ(100, key.target_size().width());
145 EXPECT_EQ(100, key.target_size().height()); 153 EXPECT_EQ(100, key.target_size().height());
146 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 154 EXPECT_TRUE(key.can_use_original_decode());
155 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
147 } 156 }
148 157
149 TEST(ImageDecodeControllerTest, 158 TEST(ImageDecodeControllerTest,
150 ImageKeyMediumQualityDropToLowIfNotDecomposable) { 159 ImageKeyMediumQualityDropToLowIfNotDecomposable) {
151 skia::RefPtr<SkImage> image = CreateImage(100, 100); 160 skia::RefPtr<SkImage> image = CreateImage(100, 100);
152 bool has_perspective = false; 161 bool has_perspective = false;
153 bool is_decomposable = false; 162 bool is_decomposable = false;
154 SkFilterQuality quality = kMedium_SkFilterQuality; 163 SkFilterQuality quality = kMedium_SkFilterQuality;
155 164
156 DrawImage draw_image( 165 DrawImage draw_image(
157 image.get(), SkIRect::MakeWH(image->width(), image->height()), 166 image.get(), SkIRect::MakeWH(image->width(), image->height()),
158 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 167 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
159 168
160 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 169 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
161 EXPECT_EQ(image->uniqueID(), key.image_id()); 170 EXPECT_EQ(image->uniqueID(), key.image_id());
162 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 171 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
163 EXPECT_EQ(50, key.target_size().width()); 172 EXPECT_EQ(50, key.target_size().width());
164 EXPECT_EQ(150, key.target_size().height()); 173 EXPECT_EQ(150, key.target_size().height());
165 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 174 EXPECT_TRUE(key.can_use_original_decode());
175 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
166 } 176 }
167 177
168 TEST(ImageDecodeControllerTest, ImageKeyHighQuality) { 178 TEST(ImageDecodeControllerTest, ImageKeyHighQuality) {
169 skia::RefPtr<SkImage> image = CreateImage(100, 100); 179 skia::RefPtr<SkImage> image = CreateImage(100, 100);
170 bool has_perspective = false; 180 bool has_perspective = false;
171 bool is_decomposable = true; 181 bool is_decomposable = true;
172 SkFilterQuality quality = kHigh_SkFilterQuality; 182 SkFilterQuality quality = kHigh_SkFilterQuality;
173 183
174 DrawImage draw_image( 184 DrawImage draw_image(
175 image.get(), SkIRect::MakeWH(image->width(), image->height()), 185 image.get(), SkIRect::MakeWH(image->width(), image->height()),
176 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 186 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
177 187
178 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 188 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
179 EXPECT_EQ(image->uniqueID(), key.image_id()); 189 EXPECT_EQ(image->uniqueID(), key.image_id());
180 EXPECT_EQ(quality, key.filter_quality()); 190 EXPECT_EQ(quality, key.filter_quality());
181 EXPECT_EQ(50, key.target_size().width()); 191 EXPECT_EQ(50, key.target_size().width());
182 EXPECT_EQ(150, key.target_size().height()); 192 EXPECT_EQ(150, key.target_size().height());
183 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 193 EXPECT_FALSE(key.can_use_original_decode());
194 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
184 } 195 }
185 196
186 TEST(ImageDecodeControllerTest, 197 TEST(ImageDecodeControllerTest,
187 ImageKeyHighQualityDropToMediumWithPerspective) { 198 ImageKeyHighQualityDropToMediumWithPerspective) {
188 skia::RefPtr<SkImage> image = CreateImage(100, 100); 199 skia::RefPtr<SkImage> image = CreateImage(100, 100);
189 bool has_perspective = true; 200 bool has_perspective = true;
190 bool is_decomposable = true; 201 bool is_decomposable = true;
191 SkFilterQuality quality = kHigh_SkFilterQuality; 202 SkFilterQuality quality = kHigh_SkFilterQuality;
192 203
193 DrawImage draw_image( 204 DrawImage draw_image(
194 image.get(), SkIRect::MakeWH(image->width(), image->height()), 205 image.get(), SkIRect::MakeWH(image->width(), image->height()),
195 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 206 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
196 207
197 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 208 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
198 EXPECT_EQ(image->uniqueID(), key.image_id()); 209 EXPECT_EQ(image->uniqueID(), key.image_id());
199 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 210 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
200 EXPECT_EQ(50, key.target_size().width()); 211 EXPECT_EQ(50, key.target_size().width());
201 EXPECT_EQ(150, key.target_size().height()); 212 EXPECT_EQ(150, key.target_size().height());
202 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 213 EXPECT_FALSE(key.can_use_original_decode());
214 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
203 } 215 }
204 216
205 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToMediumIfTooLarge) { 217 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToMediumIfTooLarge) {
206 // Just over 64MB when scaled. 218 // Just over 64MB when scaled.
207 skia::RefPtr<SkImage> image = CreateImage(4555, 2048); 219 skia::RefPtr<SkImage> image = CreateImage(4555, 2048);
208 bool has_perspective = false; 220 bool has_perspective = false;
209 bool is_decomposable = true; 221 bool is_decomposable = true;
210 SkFilterQuality quality = kHigh_SkFilterQuality; 222 SkFilterQuality quality = kHigh_SkFilterQuality;
211 223
212 // At least one dimension should scale down, so that medium quality doesn't 224 // At least one dimension should scale down, so that medium quality doesn't
213 // become low. 225 // become low.
214 DrawImage draw_image( 226 DrawImage draw_image(
215 image.get(), SkIRect::MakeWH(image->width(), image->height()), 227 image.get(), SkIRect::MakeWH(image->width(), image->height()),
216 SkSize::Make(0.9f, 2.f), quality, has_perspective, is_decomposable); 228 SkSize::Make(0.9f, 2.f), quality, has_perspective, is_decomposable);
217 229
218 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 230 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
219 EXPECT_EQ(image->uniqueID(), key.image_id()); 231 EXPECT_EQ(image->uniqueID(), key.image_id());
220 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 232 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
221 EXPECT_EQ(4100, key.target_size().width()); 233 EXPECT_EQ(4100, key.target_size().width());
222 EXPECT_EQ(4096, key.target_size().height()); 234 EXPECT_EQ(4096, key.target_size().height());
223 EXPECT_EQ(4100u * 4096u * 4u, key.target_bytes()); 235 EXPECT_FALSE(key.can_use_original_decode());
236 EXPECT_EQ(4100u * 4096u * 4u, key.locked_bytes());
224 } 237 }
225 238
226 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNotDecomposable) { 239 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNotDecomposable) {
227 skia::RefPtr<SkImage> image = CreateImage(100, 100); 240 skia::RefPtr<SkImage> image = CreateImage(100, 100);
228 bool has_perspective = false; 241 bool has_perspective = false;
229 bool is_decomposable = false; 242 bool is_decomposable = false;
230 SkFilterQuality quality = kHigh_SkFilterQuality; 243 SkFilterQuality quality = kHigh_SkFilterQuality;
231 244
232 DrawImage draw_image( 245 DrawImage draw_image(
233 image.get(), SkIRect::MakeWH(image->width(), image->height()), 246 image.get(), SkIRect::MakeWH(image->width(), image->height()),
234 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 247 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
235 248
236 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 249 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
237 EXPECT_EQ(image->uniqueID(), key.image_id()); 250 EXPECT_EQ(image->uniqueID(), key.image_id());
238 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 251 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
239 EXPECT_EQ(50, key.target_size().width()); 252 EXPECT_EQ(50, key.target_size().width());
240 EXPECT_EQ(150, key.target_size().height()); 253 EXPECT_EQ(150, key.target_size().height());
241 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 254 EXPECT_TRUE(key.can_use_original_decode());
255 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
242 } 256 }
243 257
244 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfIdentity) { 258 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfIdentity) {
245 skia::RefPtr<SkImage> image = CreateImage(100, 100); 259 skia::RefPtr<SkImage> image = CreateImage(100, 100);
246 bool has_perspective = false; 260 bool has_perspective = false;
247 bool is_decomposable = true; 261 bool is_decomposable = true;
248 SkFilterQuality quality = kHigh_SkFilterQuality; 262 SkFilterQuality quality = kHigh_SkFilterQuality;
249 263
250 DrawImage draw_image( 264 DrawImage draw_image(
251 image.get(), SkIRect::MakeWH(image->width(), image->height()), 265 image.get(), SkIRect::MakeWH(image->width(), image->height()),
252 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); 266 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
253 267
254 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 268 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
255 EXPECT_EQ(image->uniqueID(), key.image_id()); 269 EXPECT_EQ(image->uniqueID(), key.image_id());
256 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 270 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
257 EXPECT_EQ(100, key.target_size().width()); 271 EXPECT_EQ(100, key.target_size().width());
258 EXPECT_EQ(100, key.target_size().height()); 272 EXPECT_EQ(100, key.target_size().height());
259 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 273 EXPECT_TRUE(key.can_use_original_decode());
274 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
260 } 275 }
261 276
262 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity) { 277 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity) {
263 skia::RefPtr<SkImage> image = CreateImage(100, 100); 278 skia::RefPtr<SkImage> image = CreateImage(100, 100);
264 bool has_perspective = false; 279 bool has_perspective = false;
265 bool is_decomposable = true; 280 bool is_decomposable = true;
266 SkFilterQuality quality = kHigh_SkFilterQuality; 281 SkFilterQuality quality = kHigh_SkFilterQuality;
267 282
268 DrawImage draw_image( 283 DrawImage draw_image(
269 image.get(), SkIRect::MakeWH(image->width(), image->height()), 284 image.get(), SkIRect::MakeWH(image->width(), image->height()),
270 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable); 285 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable);
271 286
272 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 287 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
273 EXPECT_EQ(image->uniqueID(), key.image_id()); 288 EXPECT_EQ(image->uniqueID(), key.image_id());
274 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 289 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
275 EXPECT_EQ(100, key.target_size().width()); 290 EXPECT_EQ(100, key.target_size().width());
276 EXPECT_EQ(100, key.target_size().height()); 291 EXPECT_EQ(100, key.target_size().height());
277 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 292 EXPECT_TRUE(key.can_use_original_decode());
293 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
278 } 294 }
279 295
280 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity2) { 296 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity2) {
281 skia::RefPtr<SkImage> image = CreateImage(100, 100); 297 skia::RefPtr<SkImage> image = CreateImage(100, 100);
282 bool has_perspective = false; 298 bool has_perspective = false;
283 bool is_decomposable = true; 299 bool is_decomposable = true;
284 SkFilterQuality quality = kHigh_SkFilterQuality; 300 SkFilterQuality quality = kHigh_SkFilterQuality;
285 301
286 DrawImage draw_image( 302 DrawImage draw_image(
287 image.get(), SkIRect::MakeWH(image->width(), image->height()), 303 image.get(), SkIRect::MakeWH(image->width(), image->height()),
288 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable); 304 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable);
289 305
290 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 306 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
291 EXPECT_EQ(image->uniqueID(), key.image_id()); 307 EXPECT_EQ(image->uniqueID(), key.image_id());
292 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 308 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
293 EXPECT_EQ(100, key.target_size().width()); 309 EXPECT_EQ(100, key.target_size().width());
294 EXPECT_EQ(100, key.target_size().height()); 310 EXPECT_EQ(100, key.target_size().height());
295 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 311 EXPECT_TRUE(key.can_use_original_decode());
312 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
313 }
314
315 TEST(ImageDecodeControllerTest, OriginalDecodesAreEqual) {
316 skia::RefPtr<SkImage> image = CreateImage(100, 100);
317 bool has_perspective = false;
318 bool is_decomposable = true;
319 SkFilterQuality quality = kLow_SkFilterQuality;
320
321 DrawImage draw_image(
322 image.get(), SkIRect::MakeWH(image->width(), image->height()),
323 SkSize::Make(0.5f, 0.5), quality, has_perspective, is_decomposable);
324
325 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
326 EXPECT_EQ(image->uniqueID(), key.image_id());
327 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
328 EXPECT_EQ(50, key.target_size().width());
329 EXPECT_EQ(50, key.target_size().height());
330 EXPECT_TRUE(key.can_use_original_decode());
331 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
332
333 DrawImage another_draw_image(
334 image.get(), SkIRect::MakeWH(image->width(), image->height()),
335 SkSize::Make(1.5f, 1.5), quality, has_perspective, is_decomposable);
336
337 auto another_key =
338 ImageDecodeControllerKey::FromDrawImage(another_draw_image);
339 EXPECT_EQ(image->uniqueID(), another_key.image_id());
340 EXPECT_EQ(kLow_SkFilterQuality, another_key.filter_quality());
341 EXPECT_EQ(150, another_key.target_size().width());
342 EXPECT_EQ(150, another_key.target_size().height());
343 EXPECT_TRUE(another_key.can_use_original_decode());
344 EXPECT_EQ(100u * 100u * 4u, another_key.locked_bytes());
345
346 EXPECT_TRUE(key == another_key);
296 } 347 }
297 348
298 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) { 349 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) {
299 ImageDecodeController controller; 350 ImageDecodeController controller;
300 skia::RefPtr<SkImage> image = CreateImage(100, 100); 351 skia::RefPtr<SkImage> image = CreateImage(100, 100);
301 bool has_perspective = false; 352 bool has_perspective = false;
302 bool is_decomposable = true; 353 bool is_decomposable = true;
303 SkFilterQuality quality = kHigh_SkFilterQuality; 354 SkFilterQuality quality = kHigh_SkFilterQuality;
304 uint64_t prepare_tiles_id = 1; 355 uint64_t prepare_tiles_id = 1;
305 356
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 EXPECT_TRUE(medium_quality_task); 407 EXPECT_TRUE(medium_quality_task);
357 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get()); 408 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get());
358 409
359 DrawImage low_quality_draw_image( 410 DrawImage low_quality_draw_image(
360 image.get(), SkIRect::MakeWH(image->width(), image->height()), 411 image.get(), SkIRect::MakeWH(image->width(), image->height()),
361 SkSize::Make(0.5f, 0.5f), kLow_SkFilterQuality, has_perspective, 412 SkSize::Make(0.5f, 0.5f), kLow_SkFilterQuality, has_perspective,
362 is_decomposable); 413 is_decomposable);
363 scoped_refptr<ImageDecodeTask> low_quality_task; 414 scoped_refptr<ImageDecodeTask> low_quality_task;
364 need_unref = controller.GetTaskForImageAndRef( 415 need_unref = controller.GetTaskForImageAndRef(
365 low_quality_draw_image, prepare_tiles_id, &low_quality_task); 416 low_quality_draw_image, prepare_tiles_id, &low_quality_task);
366 // Note that when we pin the original decode, we might ref low quality images 417 EXPECT_TRUE(need_unref);
367 // too, but we don't support that right now.
368 EXPECT_FALSE(need_unref);
369 EXPECT_TRUE(low_quality_task); 418 EXPECT_TRUE(low_quality_task);
370 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); 419 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get());
371 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); 420 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get());
372 421
373 controller.UnrefImage(high_quality_draw_image); 422 controller.UnrefImage(high_quality_draw_image);
423 controller.UnrefImage(low_quality_draw_image);
374 } 424 }
375 425
376 TEST(ImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { 426 TEST(ImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) {
377 ImageDecodeController controller; 427 ImageDecodeController controller;
378 skia::RefPtr<SkImage> image = CreateImage(100, 100); 428 skia::RefPtr<SkImage> image = CreateImage(100, 100);
379 bool has_perspective = false; 429 bool has_perspective = false;
380 bool is_decomposable = true; 430 bool is_decomposable = true;
381 uint64_t prepare_tiles_id = 1; 431 uint64_t prepare_tiles_id = 1;
382 SkFilterQuality quality = kHigh_SkFilterQuality; 432 SkFilterQuality quality = kHigh_SkFilterQuality;
383 433
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 uint64_t prepare_tiles_id = 1; 531 uint64_t prepare_tiles_id = 1;
482 SkFilterQuality quality = kLow_SkFilterQuality; 532 SkFilterQuality quality = kLow_SkFilterQuality;
483 533
484 skia::RefPtr<SkImage> image = CreateImage(100, 100); 534 skia::RefPtr<SkImage> image = CreateImage(100, 100);
485 DrawImage draw_image( 535 DrawImage draw_image(
486 image.get(), SkIRect::MakeWH(image->width(), image->height()), 536 image.get(), SkIRect::MakeWH(image->width(), image->height()),
487 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); 537 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
488 scoped_refptr<ImageDecodeTask> task; 538 scoped_refptr<ImageDecodeTask> task;
489 bool need_unref = 539 bool need_unref =
490 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); 540 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
491 // We're not currently locking original scale or low quality images. 541 EXPECT_TRUE(need_unref);
492 EXPECT_FALSE(need_unref);
493 EXPECT_TRUE(task); 542 EXPECT_TRUE(task);
494 543
495 task->WillSchedule(); 544 task->WillSchedule();
496 task->ScheduleOnOriginThread(nullptr); 545 task->ScheduleOnOriginThread(nullptr);
497 task->DidSchedule(); 546 task->DidSchedule();
498 task->RunOnWorkerThread(); 547 task->RunOnWorkerThread();
499 548
500 scoped_refptr<ImageDecodeTask> another_task; 549 scoped_refptr<ImageDecodeTask> another_task;
501 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, 550 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id,
502 &another_task); 551 &another_task);
503 EXPECT_FALSE(need_unref); 552 EXPECT_TRUE(need_unref);
504 EXPECT_FALSE(another_task); 553 EXPECT_FALSE(another_task);
505 554
506 task->WillComplete(); 555 task->WillComplete();
507 task->CompleteOnOriginThread(nullptr); 556 task->CompleteOnOriginThread(nullptr);
508 task->DidComplete(); 557 task->DidComplete();
509 558
510 scoped_refptr<ImageDecodeTask> third_task; 559 scoped_refptr<ImageDecodeTask> third_task;
511 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, 560 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id,
512 &third_task); 561 &third_task);
513 EXPECT_FALSE(need_unref); 562 EXPECT_TRUE(need_unref);
514 EXPECT_FALSE(third_task); 563 EXPECT_FALSE(third_task);
564
565 controller.UnrefImage(draw_image);
566 controller.UnrefImage(draw_image);
567 controller.UnrefImage(draw_image);
515 } 568 }
516 569
517 TEST(ImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { 570 TEST(ImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) {
518 ImageDecodeController controller; 571 ImageDecodeController controller;
519 bool has_perspective = false; 572 bool has_perspective = false;
520 bool is_decomposable = true; 573 bool is_decomposable = true;
521 uint64_t prepare_tiles_id = 1; 574 uint64_t prepare_tiles_id = 1;
522 SkFilterQuality quality = kHigh_SkFilterQuality; 575 SkFilterQuality quality = kHigh_SkFilterQuality;
523 576
524 skia::RefPtr<SkImage> image = CreateImage(100, 100); 577 skia::RefPtr<SkImage> image = CreateImage(100, 100);
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 EXPECT_FALSE(task); 889 EXPECT_FALSE(task);
837 EXPECT_FALSE(need_unref); 890 EXPECT_FALSE(need_unref);
838 891
839 DecodedDrawImage decoded_draw_image = 892 DecodedDrawImage decoded_draw_image =
840 controller.GetDecodedImageForDraw(draw_image); 893 controller.GetDecodedImageForDraw(draw_image);
841 EXPECT_FALSE(decoded_draw_image.image()); 894 EXPECT_FALSE(decoded_draw_image.image());
842 895
843 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 896 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
844 } 897 }
845 898
899 TEST(ImageDecodeControllerTest, LowQualityFilterIsHandled) {
900 ImageDecodeController controller;
901 bool has_perspective = false;
902 bool is_decomposable = true;
903 uint64_t prepare_tiles_id = 1;
904 SkFilterQuality quality = kLow_SkFilterQuality;
905
906 skia::RefPtr<SkImage> image = CreateImage(100, 100);
907 DrawImage draw_image(
908 image.get(), SkIRect::MakeWH(image->width(), image->height()),
909 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
910
911 scoped_refptr<ImageDecodeTask> task;
912 bool need_unref =
913 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
914 EXPECT_TRUE(task);
915 EXPECT_TRUE(need_unref);
916
917 DecodedDrawImage decoded_draw_image =
918 controller.GetDecodedImageForDraw(draw_image);
919 EXPECT_TRUE(decoded_draw_image.image());
920 // If we decoded the image and cached it, it would be stored in a different
921 // SkImage object.
922 EXPECT_TRUE(decoded_draw_image.image() != image.get());
923
924 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
925 controller.UnrefImage(draw_image);
926 }
927
846 } // namespace 928 } // namespace
847 } // namespace cc 929 } // namespace cc
OLDNEW
« cc/tiles/image_decode_controller.cc ('K') | « cc/tiles/image_decode_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698