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

Side by Side Diff: cc/trees/layer_tree_host_pixeltest_readback.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "build/build_config.h" 5 #include "build/build_config.h"
6 #include "cc/layers/solid_color_layer.h" 6 #include "cc/layers/solid_color_layer.h"
7 #include "cc/layers/texture_layer.h" 7 #include "cc/layers/texture_layer.h"
8 #include "cc/output/copy_output_request.h" 8 #include "cc/output/copy_output_request.h"
9 #include "cc/output/copy_output_result.h" 9 #include "cc/output/copy_output_result.h"
10 #include "cc/test/fake_picture_layer.h" 10 #include "cc/test/fake_picture_layer.h"
11 #include "cc/test/fake_picture_layer_impl.h" 11 #include "cc/test/fake_picture_layer_impl.h"
12 #include "cc/test/layer_tree_pixel_test.h" 12 #include "cc/test/layer_tree_pixel_test.h"
13 #include "cc/test/paths.h" 13 #include "cc/test/paths.h"
14 #include "cc/test/solid_color_content_layer_client.h" 14 #include "cc/test/solid_color_content_layer_client.h"
15 #include "cc/trees/layer_tree_impl.h" 15 #include "cc/trees/layer_tree_impl.h"
16 16
17 #if !defined(OS_ANDROID) 17 #if !defined(OS_ANDROID)
18 18
19 namespace cc { 19 namespace cc {
20 namespace { 20 namespace {
21 21
22 class LayerTreeHostReadbackPixelTest : public LayerTreePixelTest { 22 // Can't templatize a class on its own members, so ReadbackType and
23 // ReadbackTestConfig are declared here, before LayerTreeHostReadbackPixelTest.
24 enum ReadbackType {
25 READBACK_INVALID,
26 READBACK_DEFAULT,
27 READBACK_BITMAP,
28 };
29
30 struct ReadbackTestConfig {
31 ReadbackTestConfig(LayerTreePixelTest::PixelTestType pixel_test_type_,
32 ReadbackType readback_type_)
33 : pixel_test_type(pixel_test_type_), readback_type(readback_type_) {}
34 LayerTreePixelTest::PixelTestType pixel_test_type;
35 ReadbackType readback_type;
36 };
37
38 class LayerTreeHostReadbackPixelTest
39 : public LayerTreePixelTest,
40 public testing::WithParamInterface<ReadbackTestConfig> {
23 protected: 41 protected:
24 LayerTreeHostReadbackPixelTest() 42 LayerTreeHostReadbackPixelTest()
25 : readback_type_(READBACK_INVALID), 43 : readback_type_(READBACK_INVALID),
26 insert_copy_request_after_frame_count_(0) {} 44 insert_copy_request_after_frame_count_(0) {}
27 45
28 enum ReadbackType {
29 READBACK_INVALID,
30 READBACK_DEFAULT,
31 READBACK_BITMAP,
32 };
33
34 void RunReadbackTest(PixelTestType test_type, 46 void RunReadbackTest(PixelTestType test_type,
35 ReadbackType readback_type, 47 ReadbackType readback_type,
36 scoped_refptr<Layer> content_root, 48 scoped_refptr<Layer> content_root,
37 base::FilePath file_name) { 49 base::FilePath file_name) {
38 readback_type_ = readback_type; 50 readback_type_ = readback_type;
39 RunPixelTest(test_type, content_root, file_name); 51 RunPixelTest(test_type, content_root, file_name);
40 } 52 }
41 53
42 void RunReadbackTestWithReadbackTarget(PixelTestType type, 54 void RunReadbackTestWithReadbackTarget(PixelTestType type,
43 ReadbackType readback_type, 55 ReadbackType readback_type,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 } 129 }
118 130
119 ReadbackType readback_type_; 131 ReadbackType readback_type_;
120 gfx::Rect copy_subrect_; 132 gfx::Rect copy_subrect_;
121 int insert_copy_request_after_frame_count_; 133 int insert_copy_request_after_frame_count_;
122 }; 134 };
123 135
124 void IgnoreReadbackResult(scoped_ptr<CopyOutputResult> result) { 136 void IgnoreReadbackResult(scoped_ptr<CopyOutputResult> result) {
125 } 137 }
126 138
127 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software) { 139 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackRootLayer) {
128 scoped_refptr<SolidColorLayer> background = 140 scoped_refptr<SolidColorLayer> background =
129 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); 141 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
130 142
131 scoped_refptr<SolidColorLayer> green =
132 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
133 background->AddChild(green);
134
135 RunReadbackTest(PIXEL_TEST_SOFTWARE,
136 READBACK_DEFAULT,
137 background,
138 base::FilePath(FILE_PATH_LITERAL("green.png")));
139 }
140
141 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software_Bitmap) {
142 scoped_refptr<SolidColorLayer> background =
143 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
144
145 scoped_refptr<SolidColorLayer> green =
146 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
147 background->AddChild(green);
148
149 RunReadbackTest(PIXEL_TEST_SOFTWARE,
150 READBACK_BITMAP,
151 background,
152 base::FilePath(FILE_PATH_LITERAL("green.png")));
153 }
154
155 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL_Bitmap) {
156 scoped_refptr<SolidColorLayer> background =
157 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
158
159 scoped_refptr<SolidColorLayer> green =
160 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
161 background->AddChild(green);
162
163 RunReadbackTest(PIXEL_TEST_GL,
164 READBACK_BITMAP,
165 background,
166 base::FilePath(FILE_PATH_LITERAL("green.png")));
167 }
168
169 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL) {
170 scoped_refptr<SolidColorLayer> background =
171 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
172
173 scoped_refptr<SolidColorLayer> green = 143 scoped_refptr<SolidColorLayer> green =
174 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 144 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
175 background->AddChild(green); 145 background->AddChild(green);
176 146
177 RunReadbackTest(PIXEL_TEST_GL, 147 RunReadbackTest(GetParam().pixel_test_type, GetParam().readback_type,
178 READBACK_DEFAULT, 148 background, base::FilePath(FILE_PATH_LITERAL("green.png")));
179 background,
180 base::FilePath(FILE_PATH_LITERAL("green.png")));
181 } 149 }
182 150
183 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_Software) { 151 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild) {
184 scoped_refptr<SolidColorLayer> background = 152 scoped_refptr<SolidColorLayer> background =
185 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); 153 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
186 154
187 scoped_refptr<SolidColorLayer> green = 155 scoped_refptr<SolidColorLayer> green =
188 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 156 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
189 background->AddChild(green); 157 background->AddChild(green);
190 158
191 scoped_refptr<SolidColorLayer> blue = 159 scoped_refptr<SolidColorLayer> blue =
192 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 160 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
193 green->AddChild(blue); 161 green->AddChild(blue);
194 162
195 RunReadbackTest( 163 RunReadbackTest(
196 PIXEL_TEST_SOFTWARE, 164 GetParam().pixel_test_type, GetParam().readback_type, background,
197 READBACK_DEFAULT,
198 background,
199 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png"))); 165 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
200 } 166 }
201 167
202 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL_Bitmap) { 168 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer) {
203 scoped_refptr<SolidColorLayer> background = 169 scoped_refptr<SolidColorLayer> background =
204 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); 170 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
205 171
206 scoped_refptr<SolidColorLayer> green =
207 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
208 background->AddChild(green);
209
210 scoped_refptr<SolidColorLayer> blue =
211 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
212 green->AddChild(blue);
213
214 RunReadbackTest(
215 PIXEL_TEST_GL,
216 READBACK_BITMAP,
217 background,
218 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
219 }
220
221 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL) {
222 scoped_refptr<SolidColorLayer> background =
223 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
224
225 scoped_refptr<SolidColorLayer> green =
226 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
227 background->AddChild(green);
228
229 scoped_refptr<SolidColorLayer> blue =
230 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
231 green->AddChild(blue);
232
233 RunReadbackTest(
234 PIXEL_TEST_GL,
235 READBACK_DEFAULT,
236 background,
237 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
238 }
239
240 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_Software) {
241 scoped_refptr<SolidColorLayer> background =
242 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
243
244 scoped_refptr<SolidColorLayer> green = 172 scoped_refptr<SolidColorLayer> green =
245 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 173 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
246 background->AddChild(green); 174 background->AddChild(green);
247 175
248 RunReadbackTestWithReadbackTarget( 176 RunReadbackTestWithReadbackTarget(
249 PIXEL_TEST_SOFTWARE, 177 GetParam().pixel_test_type, GetParam().readback_type, background,
250 READBACK_DEFAULT, 178 green.get(), base::FilePath(FILE_PATH_LITERAL("green.png")));
251 background, 179 }
180
181 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer) {
182 scoped_refptr<SolidColorLayer> background =
183 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
184
185 scoped_refptr<SolidColorLayer> green =
186 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
187 background->AddChild(green);
188
189 RunReadbackTestWithReadbackTarget(
190 GetParam().pixel_test_type, GetParam().readback_type, background,
191 green.get(), base::FilePath(FILE_PATH_LITERAL("green_small.png")));
192 }
193
194 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayerWithChild) {
195 scoped_refptr<SolidColorLayer> background =
196 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
197
198 scoped_refptr<SolidColorLayer> green =
199 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
200 background->AddChild(green);
201
202 scoped_refptr<SolidColorLayer> blue =
203 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
204 green->AddChild(blue);
205
206 RunReadbackTestWithReadbackTarget(
207 GetParam().pixel_test_type, GetParam().readback_type, background,
252 green.get(), 208 green.get(),
253 base::FilePath(FILE_PATH_LITERAL("green.png"))); 209 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
254 } 210 }
255 211
256 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL_Bitmap) { 212 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackSubtreeSurroundsTargetLayer) {
257 scoped_refptr<SolidColorLayer> background =
258 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
259
260 scoped_refptr<SolidColorLayer> green =
261 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
262 background->AddChild(green);
263
264 RunReadbackTestWithReadbackTarget(
265 PIXEL_TEST_GL,
266 READBACK_BITMAP,
267 background,
268 green.get(),
269 base::FilePath(FILE_PATH_LITERAL("green.png")));
270 }
271
272 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL) {
273 scoped_refptr<SolidColorLayer> background =
274 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
275
276 scoped_refptr<SolidColorLayer> green =
277 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
278 background->AddChild(green);
279
280 RunReadbackTestWithReadbackTarget(
281 PIXEL_TEST_GL,
282 READBACK_DEFAULT,
283 background,
284 green.get(),
285 base::FilePath(FILE_PATH_LITERAL("green.png")));
286 }
287
288 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_Software) {
289 scoped_refptr<SolidColorLayer> background =
290 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
291
292 scoped_refptr<SolidColorLayer> green =
293 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
294 background->AddChild(green);
295
296 RunReadbackTestWithReadbackTarget(
297 PIXEL_TEST_SOFTWARE,
298 READBACK_DEFAULT,
299 background,
300 green.get(),
301 base::FilePath(FILE_PATH_LITERAL("green_small.png")));
302 }
303
304 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL_Bitmap) {
305 scoped_refptr<SolidColorLayer> background =
306 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
307
308 scoped_refptr<SolidColorLayer> green =
309 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
310 background->AddChild(green);
311
312 RunReadbackTestWithReadbackTarget(
313 PIXEL_TEST_GL,
314 READBACK_BITMAP,
315 background,
316 green.get(),
317 base::FilePath(FILE_PATH_LITERAL("green_small.png")));
318 }
319
320 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL) {
321 scoped_refptr<SolidColorLayer> background =
322 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
323
324 scoped_refptr<SolidColorLayer> green =
325 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
326 background->AddChild(green);
327
328 RunReadbackTestWithReadbackTarget(
329 PIXEL_TEST_GL,
330 READBACK_DEFAULT,
331 background,
332 green.get(),
333 base::FilePath(FILE_PATH_LITERAL("green_small.png")));
334 }
335
336 TEST_F(LayerTreeHostReadbackPixelTest,
337 ReadbackSmallNonRootLayerWithChild_Software) {
338 scoped_refptr<SolidColorLayer> background =
339 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
340
341 scoped_refptr<SolidColorLayer> green =
342 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
343 background->AddChild(green);
344
345 scoped_refptr<SolidColorLayer> blue =
346 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
347 green->AddChild(blue);
348
349 RunReadbackTestWithReadbackTarget(
350 PIXEL_TEST_SOFTWARE,
351 READBACK_DEFAULT,
352 background,
353 green.get(),
354 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
355 }
356
357 TEST_F(LayerTreeHostReadbackPixelTest,
358 ReadbackSmallNonRootLayerWithChild_GL_Bitmap) {
359 scoped_refptr<SolidColorLayer> background =
360 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
361
362 scoped_refptr<SolidColorLayer> green =
363 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
364 background->AddChild(green);
365
366 scoped_refptr<SolidColorLayer> blue =
367 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
368 green->AddChild(blue);
369
370 RunReadbackTestWithReadbackTarget(
371 PIXEL_TEST_GL,
372 READBACK_BITMAP,
373 background,
374 green.get(),
375 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
376 }
377
378 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayerWithChild_GL) {
379 scoped_refptr<SolidColorLayer> background =
380 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
381
382 scoped_refptr<SolidColorLayer> green =
383 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorGREEN);
384 background->AddChild(green);
385
386 scoped_refptr<SolidColorLayer> blue =
387 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
388 green->AddChild(blue);
389
390 RunReadbackTestWithReadbackTarget(
391 PIXEL_TEST_GL,
392 READBACK_DEFAULT,
393 background,
394 green.get(),
395 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
396 }
397
398 TEST_F(LayerTreeHostReadbackPixelTest,
399 ReadbackSubtreeSurroundsTargetLayer_Software) {
400 scoped_refptr<SolidColorLayer> background = 213 scoped_refptr<SolidColorLayer> background =
401 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 214 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
402 215
403 scoped_refptr<SolidColorLayer> target = 216 scoped_refptr<SolidColorLayer> target =
404 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorRED); 217 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorRED);
405 background->AddChild(target); 218 background->AddChild(target);
406 219
407 scoped_refptr<SolidColorLayer> green = 220 scoped_refptr<SolidColorLayer> green =
408 CreateSolidColorLayer(gfx::Rect(-100, -100, 300, 300), SK_ColorGREEN); 221 CreateSolidColorLayer(gfx::Rect(-100, -100, 300, 300), SK_ColorGREEN);
409 target->AddChild(green); 222 target->AddChild(green);
410 223
411 scoped_refptr<SolidColorLayer> blue = 224 scoped_refptr<SolidColorLayer> blue =
412 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 225 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
413 target->AddChild(blue); 226 target->AddChild(blue);
414 227
415 copy_subrect_ = gfx::Rect(0, 0, 100, 100); 228 copy_subrect_ = gfx::Rect(0, 0, 100, 100);
416 RunReadbackTestWithReadbackTarget( 229 RunReadbackTestWithReadbackTarget(
417 PIXEL_TEST_SOFTWARE, 230 GetParam().pixel_test_type, GetParam().readback_type, background,
418 READBACK_DEFAULT, 231 target.get(),
419 background, 232 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
420 target.get(), 233 }
421 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 234
422 } 235 TEST_P(LayerTreeHostReadbackPixelTest,
423 236 ReadbackSubtreeExtendsBeyondTargetLayer) {
424 TEST_F(LayerTreeHostReadbackPixelTest,
425 ReadbackSubtreeSurroundsLayer_GL_Bitmap) {
426 scoped_refptr<SolidColorLayer> background =
427 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
428
429 scoped_refptr<SolidColorLayer> target =
430 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorRED);
431 background->AddChild(target);
432
433 scoped_refptr<SolidColorLayer> green =
434 CreateSolidColorLayer(gfx::Rect(-100, -100, 300, 300), SK_ColorGREEN);
435 target->AddChild(green);
436
437 scoped_refptr<SolidColorLayer> blue =
438 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
439 target->AddChild(blue);
440
441 copy_subrect_ = gfx::Rect(0, 0, 100, 100);
442 RunReadbackTestWithReadbackTarget(
443 PIXEL_TEST_GL,
444 READBACK_BITMAP,
445 background,
446 target.get(),
447 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
448 }
449
450 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubtreeSurroundsTargetLayer_GL) {
451 scoped_refptr<SolidColorLayer> background =
452 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
453
454 scoped_refptr<SolidColorLayer> target =
455 CreateSolidColorLayer(gfx::Rect(100, 100, 100, 100), SK_ColorRED);
456 background->AddChild(target);
457
458 scoped_refptr<SolidColorLayer> green =
459 CreateSolidColorLayer(gfx::Rect(-100, -100, 300, 300), SK_ColorGREEN);
460 target->AddChild(green);
461
462 scoped_refptr<SolidColorLayer> blue =
463 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
464 target->AddChild(blue);
465
466 copy_subrect_ = gfx::Rect(0, 0, 100, 100);
467 RunReadbackTestWithReadbackTarget(
468 PIXEL_TEST_GL,
469 READBACK_DEFAULT,
470 background,
471 target.get(),
472 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
473 }
474
475 TEST_F(LayerTreeHostReadbackPixelTest,
476 ReadbackSubtreeExtendsBeyondTargetLayer_Software) {
477 scoped_refptr<SolidColorLayer> background = 237 scoped_refptr<SolidColorLayer> background =
478 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 238 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
479 239
480 scoped_refptr<SolidColorLayer> target = 240 scoped_refptr<SolidColorLayer> target =
481 CreateSolidColorLayer(gfx::Rect(50, 50, 150, 150), SK_ColorRED); 241 CreateSolidColorLayer(gfx::Rect(50, 50, 150, 150), SK_ColorRED);
482 background->AddChild(target); 242 background->AddChild(target);
483 243
484 scoped_refptr<SolidColorLayer> green = 244 scoped_refptr<SolidColorLayer> green =
485 CreateSolidColorLayer(gfx::Rect(50, 50, 200, 200), SK_ColorGREEN); 245 CreateSolidColorLayer(gfx::Rect(50, 50, 200, 200), SK_ColorGREEN);
486 target->AddChild(green); 246 target->AddChild(green);
487 247
488 scoped_refptr<SolidColorLayer> blue = 248 scoped_refptr<SolidColorLayer> blue =
489 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 249 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE);
490 target->AddChild(blue); 250 target->AddChild(blue);
491 251
492 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 252 copy_subrect_ = gfx::Rect(50, 50, 100, 100);
493 RunReadbackTestWithReadbackTarget( 253 RunReadbackTestWithReadbackTarget(
494 PIXEL_TEST_SOFTWARE, 254 GetParam().pixel_test_type, GetParam().readback_type, background,
495 READBACK_DEFAULT, 255 target.get(),
496 background, 256 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
497 target.get(), 257 }
498 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 258
499 } 259 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackHiddenSubtree) {
500
501 TEST_F(LayerTreeHostReadbackPixelTest,
502 ReadbackSubtreeExtendsBeyondTargetLayer_GL_Bitmap) {
503 scoped_refptr<SolidColorLayer> background =
504 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
505
506 scoped_refptr<SolidColorLayer> target =
507 CreateSolidColorLayer(gfx::Rect(50, 50, 150, 150), SK_ColorRED);
508 background->AddChild(target);
509
510 scoped_refptr<SolidColorLayer> green =
511 CreateSolidColorLayer(gfx::Rect(50, 50, 200, 200), SK_ColorGREEN);
512 target->AddChild(green);
513
514 scoped_refptr<SolidColorLayer> blue =
515 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE);
516 target->AddChild(blue);
517
518 copy_subrect_ = gfx::Rect(50, 50, 100, 100);
519 RunReadbackTestWithReadbackTarget(
520 PIXEL_TEST_GL,
521 READBACK_BITMAP,
522 background,
523 target.get(),
524 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
525 }
526
527 TEST_F(LayerTreeHostReadbackPixelTest,
528 ReadbackSubtreeExtendsBeyondTargetLayer_GL) {
529 scoped_refptr<SolidColorLayer> background =
530 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
531
532 scoped_refptr<SolidColorLayer> target =
533 CreateSolidColorLayer(gfx::Rect(50, 50, 150, 150), SK_ColorRED);
534 background->AddChild(target);
535
536 scoped_refptr<SolidColorLayer> green =
537 CreateSolidColorLayer(gfx::Rect(50, 50, 200, 200), SK_ColorGREEN);
538 target->AddChild(green);
539
540 scoped_refptr<SolidColorLayer> blue =
541 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE);
542 target->AddChild(blue);
543
544 copy_subrect_ = gfx::Rect(50, 50, 100, 100);
545 RunReadbackTestWithReadbackTarget(
546 PIXEL_TEST_GL,
547 READBACK_DEFAULT,
548 background,
549 target.get(),
550 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
551 }
552
553 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackHiddenSubtree_Software) {
554 scoped_refptr<SolidColorLayer> background = 260 scoped_refptr<SolidColorLayer> background =
555 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); 261 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK);
556 262
557 scoped_refptr<SolidColorLayer> hidden_target = 263 scoped_refptr<SolidColorLayer> hidden_target =
558 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 264 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
559 hidden_target->SetHideLayerAndSubtree(true); 265 hidden_target->SetHideLayerAndSubtree(true);
560 background->AddChild(hidden_target); 266 background->AddChild(hidden_target);
561 267
562 scoped_refptr<SolidColorLayer> blue = 268 scoped_refptr<SolidColorLayer> blue =
563 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 269 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
564 hidden_target->AddChild(blue); 270 hidden_target->AddChild(blue);
565 271
566 RunReadbackTestWithReadbackTarget( 272 RunReadbackTestWithReadbackTarget(
567 PIXEL_TEST_SOFTWARE, 273 GetParam().pixel_test_type, GetParam().readback_type, background,
568 READBACK_DEFAULT,
569 background,
570 hidden_target.get(), 274 hidden_target.get(),
571 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png"))); 275 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
572 } 276 }
573 277
574 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackHiddenSubtree_GL_Bitmap) { 278 TEST_P(LayerTreeHostReadbackPixelTest,
279 HiddenSubtreeNotVisibleWhenDrawnForReadback) {
575 scoped_refptr<SolidColorLayer> background = 280 scoped_refptr<SolidColorLayer> background =
576 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); 281 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK);
577 282
578 scoped_refptr<SolidColorLayer> hidden_target = 283 scoped_refptr<SolidColorLayer> hidden_target =
579 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 284 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
580 hidden_target->SetHideLayerAndSubtree(true); 285 hidden_target->SetHideLayerAndSubtree(true);
581 background->AddChild(hidden_target); 286 background->AddChild(hidden_target);
582 287
583 scoped_refptr<SolidColorLayer> blue = 288 scoped_refptr<SolidColorLayer> blue =
584 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 289 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
585 hidden_target->AddChild(blue); 290 hidden_target->AddChild(blue);
586 291
587 RunReadbackTestWithReadbackTarget(
588 PIXEL_TEST_GL,
589 READBACK_BITMAP,
590 background,
591 hidden_target.get(),
592 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
593 }
594
595 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackHiddenSubtree_GL) {
596 scoped_refptr<SolidColorLayer> background =
597 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK);
598
599 scoped_refptr<SolidColorLayer> hidden_target =
600 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
601 hidden_target->SetHideLayerAndSubtree(true);
602 background->AddChild(hidden_target);
603
604 scoped_refptr<SolidColorLayer> blue =
605 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
606 hidden_target->AddChild(blue);
607
608 RunReadbackTestWithReadbackTarget(
609 PIXEL_TEST_GL,
610 READBACK_DEFAULT,
611 background,
612 hidden_target.get(),
613 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
614 }
615
616 TEST_F(LayerTreeHostReadbackPixelTest,
617 HiddenSubtreeNotVisibleWhenDrawnForReadback_Software) {
618 scoped_refptr<SolidColorLayer> background =
619 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK);
620
621 scoped_refptr<SolidColorLayer> hidden_target =
622 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
623 hidden_target->SetHideLayerAndSubtree(true);
624 background->AddChild(hidden_target);
625
626 scoped_refptr<SolidColorLayer> blue =
627 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
628 hidden_target->AddChild(blue);
629
630 hidden_target->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest( 292 hidden_target->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
631 base::Bind(&IgnoreReadbackResult))); 293 base::Bind(&IgnoreReadbackResult)));
632 RunReadbackTest(PIXEL_TEST_SOFTWARE, 294 RunReadbackTest(GetParam().pixel_test_type, GetParam().readback_type,
633 READBACK_DEFAULT, 295 background, base::FilePath(FILE_PATH_LITERAL("black.png")));
634 background, 296 }
635 base::FilePath(FILE_PATH_LITERAL("black.png"))); 297
636 } 298 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackSubrect) {
637
638 TEST_F(LayerTreeHostReadbackPixelTest,
639 HiddenSubtreeNotVisibleWhenDrawnForReadback_GL_Bitmap) {
640 scoped_refptr<SolidColorLayer> background =
641 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK);
642
643 scoped_refptr<SolidColorLayer> hidden_target =
644 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
645 hidden_target->SetHideLayerAndSubtree(true);
646 background->AddChild(hidden_target);
647
648 scoped_refptr<SolidColorLayer> blue =
649 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
650 hidden_target->AddChild(blue);
651
652 hidden_target->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
653 base::Bind(&IgnoreReadbackResult)));
654 RunReadbackTest(PIXEL_TEST_GL,
655 READBACK_BITMAP,
656 background,
657 base::FilePath(FILE_PATH_LITERAL("black.png")));
658 }
659
660 TEST_F(LayerTreeHostReadbackPixelTest,
661 HiddenSubtreeNotVisibleWhenDrawnForReadback_GL) {
662 scoped_refptr<SolidColorLayer> background =
663 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK);
664
665 scoped_refptr<SolidColorLayer> hidden_target =
666 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
667 hidden_target->SetHideLayerAndSubtree(true);
668 background->AddChild(hidden_target);
669
670 scoped_refptr<SolidColorLayer> blue =
671 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
672 hidden_target->AddChild(blue);
673
674 hidden_target->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
675 base::Bind(&IgnoreReadbackResult)));
676 RunReadbackTest(PIXEL_TEST_GL,
677 READBACK_DEFAULT,
678 background,
679 base::FilePath(FILE_PATH_LITERAL("black.png")));
680 }
681
682 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_Software) {
683 scoped_refptr<SolidColorLayer> background = 299 scoped_refptr<SolidColorLayer> background =
684 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); 300 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
685 301
686 scoped_refptr<SolidColorLayer> green = 302 scoped_refptr<SolidColorLayer> green =
687 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 303 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
688 background->AddChild(green); 304 background->AddChild(green);
689 305
690 scoped_refptr<SolidColorLayer> blue = 306 scoped_refptr<SolidColorLayer> blue =
691 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 307 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE);
692 green->AddChild(blue); 308 green->AddChild(blue);
693 309
694 // Grab the middle of the root layer. 310 // Grab the middle of the root layer.
695 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 311 copy_subrect_ = gfx::Rect(50, 50, 100, 100);
696 312
697 RunReadbackTest( 313 RunReadbackTest(
698 PIXEL_TEST_SOFTWARE, 314 GetParam().pixel_test_type, GetParam().readback_type, background,
699 READBACK_DEFAULT, 315 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
700 background, 316 }
701 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 317
702 } 318 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect) {
703
704 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_GL_Bitmap) {
705 scoped_refptr<SolidColorLayer> background =
706 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
707
708 scoped_refptr<SolidColorLayer> green =
709 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
710 background->AddChild(green);
711
712 scoped_refptr<SolidColorLayer> blue =
713 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE);
714 green->AddChild(blue);
715
716 // Grab the middle of the root layer.
717 copy_subrect_ = gfx::Rect(50, 50, 100, 100);
718
719 RunReadbackTest(
720 PIXEL_TEST_GL,
721 READBACK_BITMAP,
722 background,
723 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
724 }
725
726 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_GL) {
727 scoped_refptr<SolidColorLayer> background =
728 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
729
730 scoped_refptr<SolidColorLayer> green =
731 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
732 background->AddChild(green);
733
734 scoped_refptr<SolidColorLayer> blue =
735 CreateSolidColorLayer(gfx::Rect(100, 100, 50, 50), SK_ColorBLUE);
736 green->AddChild(blue);
737
738 // Grab the middle of the root layer.
739 copy_subrect_ = gfx::Rect(50, 50, 100, 100);
740
741 RunReadbackTest(
742 PIXEL_TEST_GL,
743 READBACK_DEFAULT,
744 background,
745 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
746 }
747
748 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_Software) {
749 scoped_refptr<SolidColorLayer> background = 319 scoped_refptr<SolidColorLayer> background =
750 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); 320 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
751 321
752 scoped_refptr<SolidColorLayer> green = 322 scoped_refptr<SolidColorLayer> green =
753 CreateSolidColorLayer(gfx::Rect(25, 25, 150, 150), SK_ColorGREEN); 323 CreateSolidColorLayer(gfx::Rect(25, 25, 150, 150), SK_ColorGREEN);
754 background->AddChild(green); 324 background->AddChild(green);
755 325
756 scoped_refptr<SolidColorLayer> blue = 326 scoped_refptr<SolidColorLayer> blue =
757 CreateSolidColorLayer(gfx::Rect(75, 75, 50, 50), SK_ColorBLUE); 327 CreateSolidColorLayer(gfx::Rect(75, 75, 50, 50), SK_ColorBLUE);
758 green->AddChild(blue); 328 green->AddChild(blue);
759 329
760 // Grab the middle of the green layer. 330 // Grab the middle of the green layer.
761 copy_subrect_ = gfx::Rect(25, 25, 100, 100); 331 copy_subrect_ = gfx::Rect(25, 25, 100, 100);
762 332
763 RunReadbackTestWithReadbackTarget( 333 RunReadbackTestWithReadbackTarget(
764 PIXEL_TEST_SOFTWARE, 334 GetParam().pixel_test_type, GetParam().readback_type, background,
765 READBACK_DEFAULT,
766 background,
767 green.get(), 335 green.get(),
768 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 336 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
769 } 337 }
770 338
771 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_GL_Bitmap) { 339 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackWhenNoDamage) {
772 scoped_refptr<SolidColorLayer> background =
773 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
774
775 scoped_refptr<SolidColorLayer> green =
776 CreateSolidColorLayer(gfx::Rect(25, 25, 150, 150), SK_ColorGREEN);
777 background->AddChild(green);
778
779 scoped_refptr<SolidColorLayer> blue =
780 CreateSolidColorLayer(gfx::Rect(75, 75, 50, 50), SK_ColorBLUE);
781 green->AddChild(blue);
782
783 // Grab the middle of the green layer.
784 copy_subrect_ = gfx::Rect(25, 25, 100, 100);
785
786 RunReadbackTestWithReadbackTarget(
787 PIXEL_TEST_GL,
788 READBACK_BITMAP,
789 background,
790 green.get(),
791 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
792 }
793
794 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_GL) {
795 scoped_refptr<SolidColorLayer> background =
796 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
797
798 scoped_refptr<SolidColorLayer> green =
799 CreateSolidColorLayer(gfx::Rect(25, 25, 150, 150), SK_ColorGREEN);
800 background->AddChild(green);
801
802 scoped_refptr<SolidColorLayer> blue =
803 CreateSolidColorLayer(gfx::Rect(75, 75, 50, 50), SK_ColorBLUE);
804 green->AddChild(blue);
805
806 // Grab the middle of the green layer.
807 copy_subrect_ = gfx::Rect(25, 25, 100, 100);
808
809 RunReadbackTestWithReadbackTarget(
810 PIXEL_TEST_GL,
811 READBACK_DEFAULT,
812 background,
813 green.get(),
814 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
815 }
816
817 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackWhenNoDamage_Software) {
818 scoped_refptr<SolidColorLayer> background = 340 scoped_refptr<SolidColorLayer> background =
819 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 341 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
820 342
821 scoped_refptr<SolidColorLayer> parent = 343 scoped_refptr<SolidColorLayer> parent =
822 CreateSolidColorLayer(gfx::Rect(0, 0, 150, 150), SK_ColorRED); 344 CreateSolidColorLayer(gfx::Rect(0, 0, 150, 150), SK_ColorRED);
823 background->AddChild(parent); 345 background->AddChild(parent);
824 346
825 scoped_refptr<SolidColorLayer> target = 347 scoped_refptr<SolidColorLayer> target =
826 CreateSolidColorLayer(gfx::Rect(0, 0, 100, 100), SK_ColorGREEN); 348 CreateSolidColorLayer(gfx::Rect(0, 0, 100, 100), SK_ColorGREEN);
827 parent->AddChild(target); 349 parent->AddChild(target);
828 350
829 scoped_refptr<SolidColorLayer> blue = 351 scoped_refptr<SolidColorLayer> blue =
830 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 352 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
831 target->AddChild(blue); 353 target->AddChild(blue);
832 354
833 insert_copy_request_after_frame_count_ = 1; 355 insert_copy_request_after_frame_count_ = 1;
834 RunReadbackTestWithReadbackTarget( 356 RunReadbackTestWithReadbackTarget(
835 PIXEL_TEST_SOFTWARE, 357 GetParam().pixel_test_type, GetParam().readback_type, background,
836 READBACK_DEFAULT, 358 target.get(),
837 background, 359 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
838 target.get(), 360 }
839 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 361
840 } 362 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackOutsideViewportWhenNoDamage) {
841
842 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackWhenNoDamage_GL_Bitmap) {
843 scoped_refptr<SolidColorLayer> background =
844 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
845
846 scoped_refptr<SolidColorLayer> parent =
847 CreateSolidColorLayer(gfx::Rect(0, 0, 150, 150), SK_ColorRED);
848 background->AddChild(parent);
849
850 scoped_refptr<SolidColorLayer> target =
851 CreateSolidColorLayer(gfx::Rect(0, 0, 100, 100), SK_ColorGREEN);
852 parent->AddChild(target);
853
854 scoped_refptr<SolidColorLayer> blue =
855 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
856 target->AddChild(blue);
857
858 insert_copy_request_after_frame_count_ = 1;
859 RunReadbackTestWithReadbackTarget(
860 PIXEL_TEST_GL,
861 READBACK_BITMAP,
862 background,
863 target.get(),
864 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
865 }
866
867 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackWhenNoDamage_GL) {
868 scoped_refptr<SolidColorLayer> background =
869 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
870
871 scoped_refptr<SolidColorLayer> parent =
872 CreateSolidColorLayer(gfx::Rect(0, 0, 150, 150), SK_ColorRED);
873 background->AddChild(parent);
874
875 scoped_refptr<SolidColorLayer> target =
876 CreateSolidColorLayer(gfx::Rect(0, 0, 100, 100), SK_ColorGREEN);
877 parent->AddChild(target);
878
879 scoped_refptr<SolidColorLayer> blue =
880 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
881 target->AddChild(blue);
882
883 insert_copy_request_after_frame_count_ = 1;
884 RunReadbackTestWithReadbackTarget(
885 PIXEL_TEST_GL,
886 READBACK_DEFAULT,
887 background,
888 target.get(),
889 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
890 }
891
892 TEST_F(LayerTreeHostReadbackPixelTest,
893 ReadbackOutsideViewportWhenNoDamage_Software) {
894 scoped_refptr<SolidColorLayer> background = 363 scoped_refptr<SolidColorLayer> background =
895 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 364 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE);
896 365
897 scoped_refptr<SolidColorLayer> parent = 366 scoped_refptr<SolidColorLayer> parent =
898 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorRED); 367 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorRED);
899 EXPECT_FALSE(parent->masks_to_bounds()); 368 EXPECT_FALSE(parent->masks_to_bounds());
900 background->AddChild(parent); 369 background->AddChild(parent);
901 370
902 scoped_refptr<SolidColorLayer> target = 371 scoped_refptr<SolidColorLayer> target =
903 CreateSolidColorLayer(gfx::Rect(250, 250, 100, 100), SK_ColorGREEN); 372 CreateSolidColorLayer(gfx::Rect(250, 250, 100, 100), SK_ColorGREEN);
904 parent->AddChild(target); 373 parent->AddChild(target);
905 374
906 scoped_refptr<SolidColorLayer> blue = 375 scoped_refptr<SolidColorLayer> blue =
907 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 376 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE);
908 target->AddChild(blue); 377 target->AddChild(blue);
909 378
910 insert_copy_request_after_frame_count_ = 1; 379 insert_copy_request_after_frame_count_ = 1;
911 RunReadbackTestWithReadbackTarget( 380 RunReadbackTestWithReadbackTarget(
912 PIXEL_TEST_SOFTWARE, 381 GetParam().pixel_test_type, GetParam().readback_type, background,
913 READBACK_DEFAULT, 382 target.get(),
914 background, 383 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
915 target.get(), 384 }
916 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 385
917 } 386 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerOutsideViewport) {
918 387 scoped_refptr<SolidColorLayer> background =
919 TEST_F(LayerTreeHostReadbackPixelTest, 388 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE);
920 ReadbackOutsideViewportWhenNoDamage_GL_Bitmap) { 389
921 scoped_refptr<SolidColorLayer> background = 390 scoped_refptr<SolidColorLayer> green =
922 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 391 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
923 392 // Only the top left quarter of the layer is inside the viewport, so the
924 scoped_refptr<SolidColorLayer> parent = 393 // blue layer is entirely outside.
925 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorRED); 394 green->SetPosition(gfx::Point(100, 100));
926 EXPECT_FALSE(parent->masks_to_bounds()); 395 background->AddChild(green);
927 background->AddChild(parent); 396
928 397 scoped_refptr<SolidColorLayer> blue =
929 scoped_refptr<SolidColorLayer> target = 398 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
930 CreateSolidColorLayer(gfx::Rect(250, 250, 100, 100), SK_ColorGREEN); 399 green->AddChild(blue);
931 parent->AddChild(target); 400
932 401 RunReadbackTestWithReadbackTarget(
933 scoped_refptr<SolidColorLayer> blue = 402 GetParam().pixel_test_type, GetParam().readback_type, background,
934 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 403 green.get(),
935 target->AddChild(blue); 404 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
936 405 }
937 insert_copy_request_after_frame_count_ = 1; 406
938 RunReadbackTestWithReadbackTarget( 407 TEST_P(LayerTreeHostReadbackPixelTest, ReadbackNonRootOrFirstLayer) {
939 PIXEL_TEST_GL, 408 // This test has 3 render passes with the copy request on the render pass in
940 READBACK_BITMAP, 409 // the middle. This test caught an issue where copy requests on non-root
941 background, 410 // non-first render passes were being treated differently from the first
942 target.get(), 411 // render pass.
943 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 412 scoped_refptr<SolidColorLayer> background =
944 } 413 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
945 414
946 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackOutsideViewportWhenNoDamage_GL) { 415 scoped_refptr<SolidColorLayer> blue =
947 scoped_refptr<SolidColorLayer> background = 416 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
948 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 417 blue->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
949 418 base::Bind(&IgnoreReadbackResult)));
950 scoped_refptr<SolidColorLayer> parent = 419 background->AddChild(blue);
951 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorRED); 420
952 EXPECT_FALSE(parent->masks_to_bounds()); 421 RunReadbackTestWithReadbackTarget(
953 background->AddChild(parent); 422 GetParam().pixel_test_type, GetParam().readback_type, background,
954 423 background.get(),
955 scoped_refptr<SolidColorLayer> target = 424 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
956 CreateSolidColorLayer(gfx::Rect(250, 250, 100, 100), SK_ColorGREEN); 425 }
957 parent->AddChild(target); 426
958 427 TEST_P(LayerTreeHostReadbackPixelTest, MultipleReadbacksOnLayer) {
959 scoped_refptr<SolidColorLayer> blue = 428 // This test has 2 copy requests on the background layer. One is added in the
960 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 429 // test body, another is added in RunReadbackTestWithReadbackTarget. For every
961 target->AddChild(blue); 430 // copy request after the first, state must be restored via a call to
962 431 // UseRenderPass (see http://crbug.com/99393). This test ensures that the
963 insert_copy_request_after_frame_count_ = 1; 432 // renderer correctly handles cases where UseRenderPass is called multiple
964 RunReadbackTestWithReadbackTarget( 433 // times for a single layer.
965 PIXEL_TEST_GL, 434 scoped_refptr<SolidColorLayer> background =
966 READBACK_DEFAULT, 435 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN);
967 background, 436
968 target.get(), 437 background->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest(
969 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 438 base::Bind(&IgnoreReadbackResult)));
970 } 439
440 RunReadbackTestWithReadbackTarget(
441 GetParam().pixel_test_type, GetParam().readback_type, background,
442 background.get(), base::FilePath(FILE_PATH_LITERAL("green.png")));
443 }
444
445 INSTANTIATE_TEST_CASE_P(
446 LayerTreeHostReadbackPixelTests,
447 LayerTreeHostReadbackPixelTest,
448 ::testing::Values(
449 ReadbackTestConfig(LayerTreeHostReadbackPixelTest::PIXEL_TEST_SOFTWARE,
450 READBACK_DEFAULT),
451 ReadbackTestConfig(LayerTreeHostReadbackPixelTest::PIXEL_TEST_GL,
452 READBACK_DEFAULT),
453 ReadbackTestConfig(LayerTreeHostReadbackPixelTest::PIXEL_TEST_GL,
454 READBACK_BITMAP)));
971 455
972 class LayerTreeHostReadbackDeviceScalePixelTest 456 class LayerTreeHostReadbackDeviceScalePixelTest
973 : public LayerTreeHostReadbackPixelTest { 457 : public LayerTreeHostReadbackPixelTest {
974 protected: 458 protected:
975 LayerTreeHostReadbackDeviceScalePixelTest() 459 LayerTreeHostReadbackDeviceScalePixelTest()
976 : device_scale_factor_(1.f), 460 : device_scale_factor_(1.f),
977 white_client_(SK_ColorWHITE), 461 white_client_(SK_ColorWHITE),
978 green_client_(SK_ColorGREEN), 462 green_client_(SK_ColorGREEN),
979 blue_client_(SK_ColorBLUE) {} 463 blue_client_(SK_ColorBLUE) {}
980 464
(...skipping 11 matching lines...) Expand all
992 EXPECT_EQ(device_scale_factor_, 476 EXPECT_EQ(device_scale_factor_,
993 host_impl->active_tree()->device_scale_factor()); 477 host_impl->active_tree()->device_scale_factor());
994 } 478 }
995 479
996 float device_scale_factor_; 480 float device_scale_factor_;
997 SolidColorContentLayerClient white_client_; 481 SolidColorContentLayerClient white_client_;
998 SolidColorContentLayerClient green_client_; 482 SolidColorContentLayerClient green_client_;
999 SolidColorContentLayerClient blue_client_; 483 SolidColorContentLayerClient blue_client_;
1000 }; 484 };
1001 485
1002 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, ReadbackSubrect_Software) { 486 TEST_P(LayerTreeHostReadbackDeviceScalePixelTest, ReadbackSubrect) {
1003 scoped_refptr<FakePictureLayer> background = 487 scoped_refptr<FakePictureLayer> background =
1004 FakePictureLayer::Create(&white_client_); 488 FakePictureLayer::Create(&white_client_);
1005 background->SetBounds(gfx::Size(100, 100)); 489 background->SetBounds(gfx::Size(100, 100));
1006 background->SetIsDrawable(true);
1007
1008 scoped_refptr<FakePictureLayer> green =
1009 FakePictureLayer::Create(&green_client_);
1010 green->SetBounds(gfx::Size(100, 100));
1011 green->SetIsDrawable(true);
1012 background->AddChild(green);
1013
1014 scoped_refptr<FakePictureLayer> blue =
1015 FakePictureLayer::Create(&blue_client_);
1016 blue->SetPosition(gfx::Point(50, 50));
1017 blue->SetBounds(gfx::Size(25, 25));
1018 blue->SetIsDrawable(true);
1019 green->AddChild(blue);
1020
1021 // Grab the middle of the root layer.
1022 copy_subrect_ = gfx::Rect(25, 25, 50, 50);
1023 device_scale_factor_ = 2.f;
1024 RunReadbackTest(
1025 PIXEL_TEST_SOFTWARE,
1026 READBACK_DEFAULT,
1027 background,
1028 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
1029 }
1030
1031 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, ReadbackSubrect_GL) {
1032 scoped_refptr<FakePictureLayer> background =
1033 FakePictureLayer::Create(&white_client_);
1034 background->SetBounds(gfx::Size(100, 100));
1035 background->SetIsDrawable(true); 490 background->SetIsDrawable(true);
1036 491
1037 scoped_refptr<FakePictureLayer> green = 492 scoped_refptr<FakePictureLayer> green =
1038 FakePictureLayer::Create(&green_client_); 493 FakePictureLayer::Create(&green_client_);
1039 green->SetBounds(gfx::Size(100, 100)); 494 green->SetBounds(gfx::Size(100, 100));
1040 green->SetIsDrawable(true); 495 green->SetIsDrawable(true);
1041 background->AddChild(green); 496 background->AddChild(green);
1042 497
1043 scoped_refptr<FakePictureLayer> blue = 498 scoped_refptr<FakePictureLayer> blue =
1044 FakePictureLayer::Create(&blue_client_); 499 FakePictureLayer::Create(&blue_client_);
1045 blue->SetPosition(gfx::Point(50, 50)); 500 blue->SetPosition(gfx::Point(50, 50));
1046 blue->SetBounds(gfx::Size(25, 25)); 501 blue->SetBounds(gfx::Size(25, 25));
1047 blue->SetIsDrawable(true); 502 blue->SetIsDrawable(true);
1048 green->AddChild(blue); 503 green->AddChild(blue);
1049 504
1050 // Grab the middle of the root layer. 505 // Grab the middle of the root layer.
1051 copy_subrect_ = gfx::Rect(25, 25, 50, 50); 506 copy_subrect_ = gfx::Rect(25, 25, 50, 50);
1052 device_scale_factor_ = 2.f; 507 device_scale_factor_ = 2.f;
1053 RunReadbackTest( 508 RunReadbackTest(
1054 PIXEL_TEST_GL, 509 GetParam().pixel_test_type, GetParam().readback_type, background,
1055 READBACK_DEFAULT,
1056 background,
1057 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 510 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
1058 } 511 }
1059 512
1060 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, 513 TEST_P(LayerTreeHostReadbackDeviceScalePixelTest, ReadbackNonRootLayerSubrect) {
1061 ReadbackNonRootLayerSubrect_Software) {
1062 scoped_refptr<FakePictureLayer> background = 514 scoped_refptr<FakePictureLayer> background =
1063 FakePictureLayer::Create(&white_client_); 515 FakePictureLayer::Create(&white_client_);
1064 background->SetBounds(gfx::Size(100, 100)); 516 background->SetBounds(gfx::Size(100, 100));
1065 background->SetIsDrawable(true);
1066
1067 scoped_refptr<FakePictureLayer> green =
1068 FakePictureLayer::Create(&green_client_);
1069 green->SetPosition(gfx::Point(10, 20));
1070 green->SetBounds(gfx::Size(90, 80));
1071 green->SetIsDrawable(true);
1072 background->AddChild(green);
1073
1074 scoped_refptr<FakePictureLayer> blue =
1075 FakePictureLayer::Create(&blue_client_);
1076 blue->SetPosition(gfx::Point(50, 50));
1077 blue->SetBounds(gfx::Size(25, 25));
1078 blue->SetIsDrawable(true);
1079 green->AddChild(blue);
1080
1081 // Grab the green layer's content with blue in the bottom right.
1082 copy_subrect_ = gfx::Rect(25, 25, 50, 50);
1083 device_scale_factor_ = 2.f;
1084 RunReadbackTestWithReadbackTarget(
1085 PIXEL_TEST_SOFTWARE,
1086 READBACK_DEFAULT,
1087 background,
1088 green.get(),
1089 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
1090 }
1091
1092 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest,
1093 ReadbackNonRootLayerSubrect_GL) {
1094 scoped_refptr<FakePictureLayer> background =
1095 FakePictureLayer::Create(&white_client_);
1096 background->SetBounds(gfx::Size(100, 100));
1097 background->SetIsDrawable(true); 517 background->SetIsDrawable(true);
1098 518
1099 scoped_refptr<FakePictureLayer> green = 519 scoped_refptr<FakePictureLayer> green =
1100 FakePictureLayer::Create(&green_client_); 520 FakePictureLayer::Create(&green_client_);
1101 green->SetPosition(gfx::Point(10, 20)); 521 green->SetPosition(gfx::Point(10, 20));
1102 green->SetBounds(gfx::Size(90, 80)); 522 green->SetBounds(gfx::Size(90, 80));
1103 green->SetIsDrawable(true); 523 green->SetIsDrawable(true);
1104 background->AddChild(green); 524 background->AddChild(green);
1105 525
1106 scoped_refptr<FakePictureLayer> blue = 526 scoped_refptr<FakePictureLayer> blue =
1107 FakePictureLayer::Create(&blue_client_); 527 FakePictureLayer::Create(&blue_client_);
1108 blue->SetPosition(gfx::Point(50, 50)); 528 blue->SetPosition(gfx::Point(50, 50));
1109 blue->SetBounds(gfx::Size(25, 25)); 529 blue->SetBounds(gfx::Size(25, 25));
1110 blue->SetIsDrawable(true); 530 blue->SetIsDrawable(true);
1111 green->AddChild(blue); 531 green->AddChild(blue);
1112 532
1113 // Grab the green layer's content with blue in the bottom right. 533 // Grab the green layer's content with blue in the bottom right.
1114 copy_subrect_ = gfx::Rect(25, 25, 50, 50); 534 copy_subrect_ = gfx::Rect(25, 25, 50, 50);
1115 device_scale_factor_ = 2.f; 535 device_scale_factor_ = 2.f;
1116 RunReadbackTestWithReadbackTarget( 536 RunReadbackTestWithReadbackTarget(
1117 PIXEL_TEST_GL, 537 GetParam().pixel_test_type, GetParam().readback_type, background,
1118 READBACK_DEFAULT,
1119 background,
1120 green.get(), 538 green.get(),
1121 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 539 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")));
1122 } 540 }
1123 541
1124 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerOutsideViewport) { 542 INSTANTIATE_TEST_CASE_P(
1125 scoped_refptr<SolidColorLayer> background = 543 LayerTreeHostReadbackDeviceScalePixelTests,
1126 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorWHITE); 544 LayerTreeHostReadbackDeviceScalePixelTest,
1127 545 ::testing::Values(
1128 scoped_refptr<SolidColorLayer> green = 546 ReadbackTestConfig(LayerTreeHostReadbackPixelTest::PIXEL_TEST_SOFTWARE,
1129 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 547 READBACK_DEFAULT),
1130 // Only the top left quarter of the layer is inside the viewport, so the 548 ReadbackTestConfig(LayerTreeHostReadbackPixelTest::PIXEL_TEST_GL,
1131 // blue layer is entirely outside. 549 READBACK_DEFAULT),
1132 green->SetPosition(gfx::Point(100, 100)); 550 ReadbackTestConfig(LayerTreeHostReadbackPixelTest::PIXEL_TEST_GL,
1133 background->AddChild(green); 551 READBACK_BITMAP)));
1134
1135 scoped_refptr<SolidColorLayer> blue =
1136 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE);
1137 green->AddChild(blue);
1138
1139 RunReadbackTestWithReadbackTarget(
1140 PIXEL_TEST_GL,
1141 READBACK_DEFAULT,
1142 background,
1143 green.get(),
1144 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")));
1145 }
1146 552
1147 } // namespace 553 } // namespace
1148 } // namespace cc 554 } // namespace cc
1149 555
1150 #endif // OS_ANDROID 556 #endif // OS_ANDROID
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_pixeltest_on_demand_raster.cc ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698