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 3 // found in the LICENSE file. 4 5 #include "build/build_config.h" 6 #include "cc/layers/solid_color_layer.h" 7 #include "cc/layers/texture_layer.h" 8 #include "cc/output/copy_output_request.h" 9 #include "cc/output/copy_output_result.h" 10 #include "cc/test/fake_picture_layer.h" 11 #include "cc/test/fake_picture_layer_impl.h" 12 #include "cc/test/layer_tree_pixel_test.h" 13 #include "cc/test/paths.h" 14 #include "cc/test/solid_color_content_layer_client.h" 15 #include "cc/trees/layer_tree_impl.h" 16 17 #if !defined(OS_ANDROID) 18 19 namespace cc { 20 namespace { 21 22 class LayerTreeHostReadbackPixelTest : public LayerTreePixelTest { 23 protected: 24 LayerTreeHostReadbackPixelTest() 25 : insert_copy_request_after_frame_count_(0) {} 26 27 virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest() OVERRIDE { 28 scoped_ptr<CopyOutputRequest> request; 29 30 switch (test_type_) { 31 case GL_WITH_BITMAP: 32 case SOFTWARE_WITH_BITMAP: 33 request = CopyOutputRequest::CreateBitmapRequest( 34 base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsBitmap, 35 base::Unretained(this))); 36 break; 37 case SOFTWARE_WITH_DEFAULT: 38 request = CopyOutputRequest::CreateRequest( 39 base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsBitmap, 40 base::Unretained(this))); 41 break; 42 case GL_WITH_DEFAULT: 43 request = CopyOutputRequest::CreateRequest( 44 base::Bind(&LayerTreeHostReadbackPixelTest::ReadbackResultAsTexture, 45 base::Unretained(this))); 46 break; 47 } 48 49 if (!copy_subrect_.IsEmpty()) 50 request->set_area(copy_subrect_); 51 return request.Pass(); 52 } 53 54 virtual void BeginTest() OVERRIDE { 55 if (insert_copy_request_after_frame_count_ == 0) { 56 Layer* const target = 57 readback_target_ ? readback_target_ : layer_tree_host()->root_layer(); 58 target->RequestCopyOfOutput(CreateCopyOutputRequest().Pass()); 59 } 60 PostSetNeedsCommitToMainThread(); 61 } 62 63 virtual void DidCommitAndDrawFrame() OVERRIDE { 64 if (insert_copy_request_after_frame_count_ == 65 layer_tree_host()->source_frame_number()) { 66 Layer* const target = 67 readback_target_ ? readback_target_ : layer_tree_host()->root_layer(); 68 target->RequestCopyOfOutput(CreateCopyOutputRequest().Pass()); 69 } 70 } 71 72 void ReadbackResultAsBitmap(scoped_ptr<CopyOutputResult> result) { 73 EXPECT_TRUE(proxy()->IsMainThread()); 74 EXPECT_TRUE(result->HasBitmap()); 75 result_bitmap_ = result->TakeBitmap().Pass(); 76 EndTest(); 77 } 78 79 void ReadbackResultAsTexture(scoped_ptr<CopyOutputResult> result) { 80 EXPECT_TRUE(proxy()->IsMainThread()); 81 EXPECT_TRUE(result->HasTexture()); 82 83 TextureMailbox texture_mailbox; 84 scoped_ptr<SingleReleaseCallback> release_callback; 85 result->TakeTexture(&texture_mailbox, &release_callback); 86 EXPECT_TRUE(texture_mailbox.IsValid()); 87 EXPECT_TRUE(texture_mailbox.IsTexture()); 88 89 scoped_ptr<SkBitmap> bitmap = 90 CopyTextureMailboxToBitmap(result->size(), texture_mailbox); 91 release_callback->Run(0, false); 92 93 ReadbackResultAsBitmap(CopyOutputResult::CreateBitmapResult(bitmap.Pass())); 94 } 95 96 gfx::Rect copy_subrect_; 97 int insert_copy_request_after_frame_count_; 98 }; 99 100 void IgnoreReadbackResult(scoped_ptr<CopyOutputResult> result) {} 101 102 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software) { 103 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 104 gfx::Rect(200, 200), SK_ColorWHITE); 105 106 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 107 gfx::Rect(200, 200), SK_ColorGREEN); 108 background->AddChild(green); 109 110 RunPixelTest(SOFTWARE_WITH_DEFAULT, 111 background, 112 base::FilePath(FILE_PATH_LITERAL( 113 "green.png"))); 114 } 115 116 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_Software_Bitmap) { 117 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 118 gfx::Rect(200, 200), SK_ColorWHITE); 119 120 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 121 gfx::Rect(200, 200), SK_ColorGREEN); 122 background->AddChild(green); 123 124 RunPixelTest(SOFTWARE_WITH_BITMAP, 125 background, 126 base::FilePath(FILE_PATH_LITERAL( 127 "green.png"))); 128 } 129 130 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL_Bitmap) { 131 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 132 gfx::Rect(200, 200), SK_ColorWHITE); 133 134 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 135 gfx::Rect(200, 200), SK_ColorGREEN); 136 background->AddChild(green); 137 138 RunPixelTest(GL_WITH_BITMAP, 139 background, 140 base::FilePath(FILE_PATH_LITERAL( 141 "green.png"))); 142 } 143 144 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayer_GL) { 145 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 146 gfx::Rect(200, 200), SK_ColorWHITE); 147 148 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 149 gfx::Rect(200, 200), SK_ColorGREEN); 150 background->AddChild(green); 151 152 RunPixelTest(GL_WITH_DEFAULT, 153 background, 154 base::FilePath(FILE_PATH_LITERAL( 155 "green.png"))); 156 } 157 158 TEST_F(LayerTreeHostReadbackPixelTest, 159 ReadbackRootLayerWithChild_Software) { 160 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 161 gfx::Rect(200, 200), SK_ColorWHITE); 162 163 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 164 gfx::Rect(200, 200), SK_ColorGREEN); 165 background->AddChild(green); 166 167 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 168 gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 169 green->AddChild(blue); 170 171 RunPixelTest(SOFTWARE_WITH_DEFAULT, 172 background, 173 base::FilePath(FILE_PATH_LITERAL( 174 "green_with_blue_corner.png"))); 175 } 176 177 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL_Bitmap) { 178 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 179 gfx::Rect(200, 200), SK_ColorWHITE); 180 181 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 182 gfx::Rect(200, 200), SK_ColorGREEN); 183 background->AddChild(green); 184 185 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 186 gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 187 green->AddChild(blue); 188 189 RunPixelTest(GL_WITH_BITMAP, 190 background, 191 base::FilePath(FILE_PATH_LITERAL( 192 "green_with_blue_corner.png"))); 193 } 194 195 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackRootLayerWithChild_GL) { 196 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 197 gfx::Rect(200, 200), SK_ColorWHITE); 198 199 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 200 gfx::Rect(200, 200), SK_ColorGREEN); 201 background->AddChild(green); 202 203 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 204 gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 205 green->AddChild(blue); 206 207 RunPixelTest(GL_WITH_DEFAULT, 208 background, 209 base::FilePath(FILE_PATH_LITERAL( 210 "green_with_blue_corner.png"))); 211 } 212 213 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_Software) { 214 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 215 gfx::Rect(200, 200), SK_ColorWHITE); 216 217 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 218 gfx::Rect(200, 200), SK_ColorGREEN); 219 background->AddChild(green); 220 221 RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, 222 background, 223 green.get(), 224 base::FilePath(FILE_PATH_LITERAL( 225 "green.png"))); 226 } 227 228 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL_Bitmap) { 229 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 230 gfx::Rect(200, 200), SK_ColorWHITE); 231 232 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 233 gfx::Rect(200, 200), SK_ColorGREEN); 234 background->AddChild(green); 235 236 RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, 237 background, 238 green.get(), 239 base::FilePath(FILE_PATH_LITERAL( 240 "green.png"))); 241 } 242 243 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayer_GL) { 244 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 245 gfx::Rect(200, 200), SK_ColorWHITE); 246 247 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 248 gfx::Rect(200, 200), SK_ColorGREEN); 249 background->AddChild(green); 250 251 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 252 background, 253 green.get(), 254 base::FilePath(FILE_PATH_LITERAL( 255 "green.png"))); 256 } 257 258 TEST_F(LayerTreeHostReadbackPixelTest, 259 ReadbackSmallNonRootLayer_Software) { 260 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 261 gfx::Rect(200, 200), SK_ColorWHITE); 262 263 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 264 gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); 265 background->AddChild(green); 266 267 RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, 268 background, 269 green.get(), 270 base::FilePath(FILE_PATH_LITERAL( 271 "green_small.png"))); 272 } 273 274 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL_Bitmap) { 275 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 276 gfx::Rect(200, 200), SK_ColorWHITE); 277 278 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 279 gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); 280 background->AddChild(green); 281 282 RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, 283 background, 284 green.get(), 285 base::FilePath(FILE_PATH_LITERAL( 286 "green_small.png"))); 287 } 288 289 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayer_GL) { 290 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 291 gfx::Rect(200, 200), SK_ColorWHITE); 292 293 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 294 gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); 295 background->AddChild(green); 296 297 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 298 background, 299 green.get(), 300 base::FilePath(FILE_PATH_LITERAL( 301 "green_small.png"))); 302 } 303 304 TEST_F(LayerTreeHostReadbackPixelTest, 305 ReadbackSmallNonRootLayerWithChild_Software) { 306 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 307 gfx::Rect(200, 200), SK_ColorWHITE); 308 309 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 310 gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); 311 background->AddChild(green); 312 313 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 314 gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 315 green->AddChild(blue); 316 317 RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, 318 background, 319 green.get(), 320 base::FilePath(FILE_PATH_LITERAL( 321 "green_small_with_blue_corner.png"))); 322 } 323 324 TEST_F(LayerTreeHostReadbackPixelTest, 325 ReadbackSmallNonRootLayerWithChild_GL_Bitmap) { 326 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 327 gfx::Rect(200, 200), SK_ColorWHITE); 328 329 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 330 gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); 331 background->AddChild(green); 332 333 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 334 gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 335 green->AddChild(blue); 336 337 RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, 338 background, 339 green.get(), 340 base::FilePath(FILE_PATH_LITERAL( 341 "green_small_with_blue_corner.png"))); 342 } 343 344 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSmallNonRootLayerWithChild_GL) { 345 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 346 gfx::Rect(200, 200), SK_ColorWHITE); 347 348 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 349 gfx::Rect(100, 100, 100, 100), SK_ColorGREEN); 350 background->AddChild(green); 351 352 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 353 gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 354 green->AddChild(blue); 355 356 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 357 background, 358 green.get(), 359 base::FilePath(FILE_PATH_LITERAL( 360 "green_small_with_blue_corner.png"))); 361 } 362 363 TEST_F(LayerTreeHostReadbackPixelTest, 364 ReadbackSubtreeSurroundsTargetLayer_Software) { 365 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 366 gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 367 368 scoped_refptr<SolidColorLayer> target = CreateSolidColorLayer( 369 gfx::Rect(100, 100, 100, 100), SK_ColorRED); 370 background->AddChild(target); 371 372 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 373 gfx::Rect(-100, -100, 300, 300), SK_ColorGREEN); 374 target->AddChild(green); 375 376 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 377 gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 378 target->AddChild(blue); 379 380 copy_subrect_ = gfx::Rect(0, 0, 100, 100); 381 RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, 382 background, 383 target.get(), 384 base::FilePath(FILE_PATH_LITERAL( 385 "green_small_with_blue_corner.png"))); 386 } 387 388 TEST_F(LayerTreeHostReadbackPixelTest, 389 ReadbackSubtreeSurroundsLayer_GL_Bitmap) { 390 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 391 gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 392 393 scoped_refptr<SolidColorLayer> target = CreateSolidColorLayer( 394 gfx::Rect(100, 100, 100, 100), SK_ColorRED); 395 background->AddChild(target); 396 397 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 398 gfx::Rect(-100, -100, 300, 300), SK_ColorGREEN); 399 target->AddChild(green); 400 401 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 402 gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 403 target->AddChild(blue); 404 405 copy_subrect_ = gfx::Rect(0, 0, 100, 100); 406 RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, 407 background, 408 target.get(), 409 base::FilePath(FILE_PATH_LITERAL( 410 "green_small_with_blue_corner.png"))); 411 } 412 413 TEST_F(LayerTreeHostReadbackPixelTest, 414 ReadbackSubtreeSurroundsTargetLayer_GL) { 415 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 416 gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 417 418 scoped_refptr<SolidColorLayer> target = CreateSolidColorLayer( 419 gfx::Rect(100, 100, 100, 100), SK_ColorRED); 420 background->AddChild(target); 421 422 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 423 gfx::Rect(-100, -100, 300, 300), SK_ColorGREEN); 424 target->AddChild(green); 425 426 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 427 gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 428 target->AddChild(blue); 429 430 copy_subrect_ = gfx::Rect(0, 0, 100, 100); 431 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 432 background, 433 target.get(), 434 base::FilePath(FILE_PATH_LITERAL( 435 "green_small_with_blue_corner.png"))); 436 } 437 438 TEST_F(LayerTreeHostReadbackPixelTest, 439 ReadbackSubtreeExtendsBeyondTargetLayer_Software) { 440 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 441 gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 442 443 scoped_refptr<SolidColorLayer> target = CreateSolidColorLayer( 444 gfx::Rect(50, 50, 150, 150), SK_ColorRED); 445 background->AddChild(target); 446 447 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 448 gfx::Rect(50, 50, 200, 200), SK_ColorGREEN); 449 target->AddChild(green); 450 451 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 452 gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 453 target->AddChild(blue); 454 455 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 456 RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, 457 background, 458 target.get(), 459 base::FilePath(FILE_PATH_LITERAL( 460 "green_small_with_blue_corner.png"))); 461 } 462 463 TEST_F(LayerTreeHostReadbackPixelTest, 464 ReadbackSubtreeExtendsBeyondTargetLayer_GL_Bitmap) { 465 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 466 gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 467 468 scoped_refptr<SolidColorLayer> target = CreateSolidColorLayer( 469 gfx::Rect(50, 50, 150, 150), SK_ColorRED); 470 background->AddChild(target); 471 472 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 473 gfx::Rect(50, 50, 200, 200), SK_ColorGREEN); 474 target->AddChild(green); 475 476 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 477 gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 478 target->AddChild(blue); 479 480 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 481 RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, 482 background, 483 target.get(), 484 base::FilePath(FILE_PATH_LITERAL( 485 "green_small_with_blue_corner.png"))); 486 } 487 488 TEST_F(LayerTreeHostReadbackPixelTest, 489 ReadbackSubtreeExtendsBeyondTargetLayer_GL) { 490 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 491 gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 492 493 scoped_refptr<SolidColorLayer> target = CreateSolidColorLayer( 494 gfx::Rect(50, 50, 150, 150), SK_ColorRED); 495 background->AddChild(target); 496 497 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 498 gfx::Rect(50, 50, 200, 200), SK_ColorGREEN); 499 target->AddChild(green); 500 501 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 502 gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 503 target->AddChild(blue); 504 505 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 506 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 507 background, 508 target.get(), 509 base::FilePath(FILE_PATH_LITERAL( 510 "green_small_with_blue_corner.png"))); 511 } 512 513 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackHiddenSubtree_Software) { 514 scoped_refptr<SolidColorLayer> background = 515 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); 516 517 scoped_refptr<SolidColorLayer> hidden_target = 518 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 519 hidden_target->SetHideLayerAndSubtree(true); 520 background->AddChild(hidden_target); 521 522 scoped_refptr<SolidColorLayer> blue = 523 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 524 hidden_target->AddChild(blue); 525 526 RunPixelTestWithReadbackTarget( 527 SOFTWARE_WITH_DEFAULT, 528 background, 529 hidden_target.get(), 530 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png"))); 531 } 532 533 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackHiddenSubtree_GL_Bitmap) { 534 scoped_refptr<SolidColorLayer> background = 535 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); 536 537 scoped_refptr<SolidColorLayer> hidden_target = 538 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 539 hidden_target->SetHideLayerAndSubtree(true); 540 background->AddChild(hidden_target); 541 542 scoped_refptr<SolidColorLayer> blue = 543 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 544 hidden_target->AddChild(blue); 545 546 RunPixelTestWithReadbackTarget( 547 GL_WITH_BITMAP, 548 background, 549 hidden_target.get(), 550 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png"))); 551 } 552 553 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackHiddenSubtree_GL) { 554 scoped_refptr<SolidColorLayer> background = 555 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); 556 557 scoped_refptr<SolidColorLayer> hidden_target = 558 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 559 hidden_target->SetHideLayerAndSubtree(true); 560 background->AddChild(hidden_target); 561 562 scoped_refptr<SolidColorLayer> blue = 563 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 564 hidden_target->AddChild(blue); 565 566 RunPixelTestWithReadbackTarget( 567 GL_WITH_DEFAULT, 568 background, 569 hidden_target.get(), 570 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png"))); 571 } 572 573 TEST_F(LayerTreeHostReadbackPixelTest, 574 HiddenSubtreeNotVisibleWhenDrawnForReadback_Software) { 575 scoped_refptr<SolidColorLayer> background = 576 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); 577 578 scoped_refptr<SolidColorLayer> hidden_target = 579 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 580 hidden_target->SetHideLayerAndSubtree(true); 581 background->AddChild(hidden_target); 582 583 scoped_refptr<SolidColorLayer> blue = 584 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 585 hidden_target->AddChild(blue); 586 587 hidden_target->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest( 588 base::Bind(&IgnoreReadbackResult))); 589 RunPixelTest(SOFTWARE_WITH_DEFAULT, 590 background, 591 base::FilePath(FILE_PATH_LITERAL("black.png"))); 592 } 593 594 TEST_F(LayerTreeHostReadbackPixelTest, 595 HiddenSubtreeNotVisibleWhenDrawnForReadback_GL_Bitmap) { 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 hidden_target->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest( 609 base::Bind(&IgnoreReadbackResult))); 610 RunPixelTest(GL_WITH_BITMAP, 611 background, 612 base::FilePath(FILE_PATH_LITERAL("black.png"))); 613 } 614 615 TEST_F(LayerTreeHostReadbackPixelTest, 616 HiddenSubtreeNotVisibleWhenDrawnForReadback_GL) { 617 scoped_refptr<SolidColorLayer> background = 618 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorBLACK); 619 620 scoped_refptr<SolidColorLayer> hidden_target = 621 CreateSolidColorLayer(gfx::Rect(200, 200), SK_ColorGREEN); 622 hidden_target->SetHideLayerAndSubtree(true); 623 background->AddChild(hidden_target); 624 625 scoped_refptr<SolidColorLayer> blue = 626 CreateSolidColorLayer(gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 627 hidden_target->AddChild(blue); 628 629 hidden_target->RequestCopyOfOutput(CopyOutputRequest::CreateBitmapRequest( 630 base::Bind(&IgnoreReadbackResult))); 631 RunPixelTest(GL_WITH_DEFAULT, 632 background, 633 base::FilePath(FILE_PATH_LITERAL("black.png"))); 634 } 635 636 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_Software) { 637 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 638 gfx::Rect(200, 200), SK_ColorWHITE); 639 640 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 641 gfx::Rect(200, 200), SK_ColorGREEN); 642 background->AddChild(green); 643 644 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 645 gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 646 green->AddChild(blue); 647 648 // Grab the middle of the root layer. 649 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 650 651 RunPixelTest(SOFTWARE_WITH_DEFAULT, 652 background, 653 base::FilePath(FILE_PATH_LITERAL( 654 "green_small_with_blue_corner.png"))); 655 } 656 657 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_GL_Bitmap) { 658 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 659 gfx::Rect(200, 200), SK_ColorWHITE); 660 661 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 662 gfx::Rect(200, 200), SK_ColorGREEN); 663 background->AddChild(green); 664 665 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 666 gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 667 green->AddChild(blue); 668 669 // Grab the middle of the root layer. 670 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 671 672 RunPixelTest(GL_WITH_BITMAP, 673 background, 674 base::FilePath(FILE_PATH_LITERAL( 675 "green_small_with_blue_corner.png"))); 676 } 677 678 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackSubrect_GL) { 679 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 680 gfx::Rect(200, 200), SK_ColorWHITE); 681 682 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 683 gfx::Rect(200, 200), SK_ColorGREEN); 684 background->AddChild(green); 685 686 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 687 gfx::Rect(100, 100, 50, 50), SK_ColorBLUE); 688 green->AddChild(blue); 689 690 // Grab the middle of the root layer. 691 copy_subrect_ = gfx::Rect(50, 50, 100, 100); 692 693 RunPixelTest(GL_WITH_DEFAULT, 694 background, 695 base::FilePath(FILE_PATH_LITERAL( 696 "green_small_with_blue_corner.png"))); 697 } 698 699 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_Software) { 700 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 701 gfx::Rect(200, 200), SK_ColorWHITE); 702 703 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 704 gfx::Rect(25, 25, 150, 150), SK_ColorGREEN); 705 background->AddChild(green); 706 707 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 708 gfx::Rect(75, 75, 50, 50), SK_ColorBLUE); 709 green->AddChild(blue); 710 711 // Grab the middle of the green layer. 712 copy_subrect_ = gfx::Rect(25, 25, 100, 100); 713 714 RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, 715 background, 716 green.get(), 717 base::FilePath(FILE_PATH_LITERAL( 718 "green_small_with_blue_corner.png"))); 719 } 720 721 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_GL_Bitmap) { 722 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 723 gfx::Rect(200, 200), SK_ColorWHITE); 724 725 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 726 gfx::Rect(25, 25, 150, 150), SK_ColorGREEN); 727 background->AddChild(green); 728 729 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 730 gfx::Rect(75, 75, 50, 50), SK_ColorBLUE); 731 green->AddChild(blue); 732 733 // Grab the middle of the green layer. 734 copy_subrect_ = gfx::Rect(25, 25, 100, 100); 735 736 RunPixelTestWithReadbackTarget(GL_WITH_BITMAP, 737 background, 738 green.get(), 739 base::FilePath(FILE_PATH_LITERAL( 740 "green_small_with_blue_corner.png"))); 741 } 742 743 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerSubrect_GL) { 744 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 745 gfx::Rect(200, 200), SK_ColorWHITE); 746 747 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 748 gfx::Rect(25, 25, 150, 150), SK_ColorGREEN); 749 background->AddChild(green); 750 751 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 752 gfx::Rect(75, 75, 50, 50), SK_ColorBLUE); 753 green->AddChild(blue); 754 755 // Grab the middle of the green layer. 756 copy_subrect_ = gfx::Rect(25, 25, 100, 100); 757 758 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 759 background, 760 green.get(), 761 base::FilePath(FILE_PATH_LITERAL( 762 "green_small_with_blue_corner.png"))); 763 } 764 765 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackWhenNoDamage_Software) { 766 scoped_refptr<SolidColorLayer> background = 767 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 768 769 scoped_refptr<SolidColorLayer> parent = 770 CreateSolidColorLayer(gfx::Rect(0, 0, 150, 150), SK_ColorRED); 771 background->AddChild(parent); 772 773 scoped_refptr<SolidColorLayer> target = 774 CreateSolidColorLayer(gfx::Rect(0, 0, 100, 100), SK_ColorGREEN); 775 parent->AddChild(target); 776 777 scoped_refptr<SolidColorLayer> blue = 778 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 779 target->AddChild(blue); 780 781 insert_copy_request_after_frame_count_ = 1; 782 RunPixelTestWithReadbackTarget( 783 SOFTWARE_WITH_DEFAULT, 784 background, 785 target.get(), 786 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 787 } 788 789 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackWhenNoDamage_GL_Bitmap) { 790 scoped_refptr<SolidColorLayer> background = 791 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 792 793 scoped_refptr<SolidColorLayer> parent = 794 CreateSolidColorLayer(gfx::Rect(0, 0, 150, 150), SK_ColorRED); 795 background->AddChild(parent); 796 797 scoped_refptr<SolidColorLayer> target = 798 CreateSolidColorLayer(gfx::Rect(0, 0, 100, 100), SK_ColorGREEN); 799 parent->AddChild(target); 800 801 scoped_refptr<SolidColorLayer> blue = 802 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 803 target->AddChild(blue); 804 805 insert_copy_request_after_frame_count_ = 1; 806 RunPixelTestWithReadbackTarget( 807 GL_WITH_BITMAP, 808 background, 809 target.get(), 810 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 811 } 812 813 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackWhenNoDamage_GL) { 814 scoped_refptr<SolidColorLayer> background = 815 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 816 817 scoped_refptr<SolidColorLayer> parent = 818 CreateSolidColorLayer(gfx::Rect(0, 0, 150, 150), SK_ColorRED); 819 background->AddChild(parent); 820 821 scoped_refptr<SolidColorLayer> target = 822 CreateSolidColorLayer(gfx::Rect(0, 0, 100, 100), SK_ColorGREEN); 823 parent->AddChild(target); 824 825 scoped_refptr<SolidColorLayer> blue = 826 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 827 target->AddChild(blue); 828 829 insert_copy_request_after_frame_count_ = 1; 830 RunPixelTestWithReadbackTarget( 831 GL_WITH_DEFAULT, 832 background, 833 target.get(), 834 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 835 } 836 837 TEST_F(LayerTreeHostReadbackPixelTest, 838 ReadbackOutsideViewportWhenNoDamage_Software) { 839 scoped_refptr<SolidColorLayer> background = 840 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 841 842 scoped_refptr<SolidColorLayer> parent = 843 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorRED); 844 EXPECT_FALSE(parent->masks_to_bounds()); 845 background->AddChild(parent); 846 847 scoped_refptr<SolidColorLayer> target = 848 CreateSolidColorLayer(gfx::Rect(250, 250, 100, 100), SK_ColorGREEN); 849 parent->AddChild(target); 850 851 scoped_refptr<SolidColorLayer> blue = 852 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 853 target->AddChild(blue); 854 855 insert_copy_request_after_frame_count_ = 1; 856 RunPixelTestWithReadbackTarget( 857 SOFTWARE_WITH_DEFAULT, 858 background, 859 target.get(), 860 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 861 } 862 863 TEST_F(LayerTreeHostReadbackPixelTest, 864 ReadbackOutsideViewportWhenNoDamage_GL_Bitmap) { 865 scoped_refptr<SolidColorLayer> background = 866 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 867 868 scoped_refptr<SolidColorLayer> parent = 869 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorRED); 870 EXPECT_FALSE(parent->masks_to_bounds()); 871 background->AddChild(parent); 872 873 scoped_refptr<SolidColorLayer> target = 874 CreateSolidColorLayer(gfx::Rect(250, 250, 100, 100), SK_ColorGREEN); 875 parent->AddChild(target); 876 877 scoped_refptr<SolidColorLayer> blue = 878 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 879 target->AddChild(blue); 880 881 insert_copy_request_after_frame_count_ = 1; 882 RunPixelTestWithReadbackTarget( 883 GL_WITH_BITMAP, 884 background, 885 target.get(), 886 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 887 } 888 889 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackOutsideViewportWhenNoDamage_GL) { 890 scoped_refptr<SolidColorLayer> background = 891 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorWHITE); 892 893 scoped_refptr<SolidColorLayer> parent = 894 CreateSolidColorLayer(gfx::Rect(0, 0, 200, 200), SK_ColorRED); 895 EXPECT_FALSE(parent->masks_to_bounds()); 896 background->AddChild(parent); 897 898 scoped_refptr<SolidColorLayer> target = 899 CreateSolidColorLayer(gfx::Rect(250, 250, 100, 100), SK_ColorGREEN); 900 parent->AddChild(target); 901 902 scoped_refptr<SolidColorLayer> blue = 903 CreateSolidColorLayer(gfx::Rect(50, 50, 50, 50), SK_ColorBLUE); 904 target->AddChild(blue); 905 906 insert_copy_request_after_frame_count_ = 1; 907 RunPixelTestWithReadbackTarget( 908 GL_WITH_DEFAULT, 909 background, 910 target.get(), 911 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png"))); 912 } 913 914 class LayerTreeHostReadbackDeviceScalePixelTest 915 : public LayerTreeHostReadbackPixelTest { 916 protected: 917 LayerTreeHostReadbackDeviceScalePixelTest() 918 : device_scale_factor_(1.f), 919 white_client_(SK_ColorWHITE), 920 green_client_(SK_ColorGREEN), 921 blue_client_(SK_ColorBLUE) {} 922 923 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 924 // Cause the device scale factor to be inherited by contents scales. 925 settings->layer_transforms_should_scale_layer_contents = true; 926 } 927 928 virtual void SetupTree() OVERRIDE { 929 layer_tree_host()->SetDeviceScaleFactor(device_scale_factor_); 930 LayerTreePixelTest::SetupTree(); 931 } 932 933 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 934 EXPECT_EQ(device_scale_factor_, 935 host_impl->active_tree()->device_scale_factor()); 936 } 937 938 float device_scale_factor_; 939 SolidColorContentLayerClient white_client_; 940 SolidColorContentLayerClient green_client_; 941 SolidColorContentLayerClient blue_client_; 942 }; 943 944 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, 945 ReadbackSubrect_Software) { 946 scoped_refptr<FakePictureLayer> background = 947 FakePictureLayer::Create(&white_client_); 948 background->SetBounds(gfx::Size(100, 100)); 949 background->SetIsDrawable(true); 950 951 scoped_refptr<FakePictureLayer> green = 952 FakePictureLayer::Create(&green_client_); 953 green->SetBounds(gfx::Size(100, 100)); 954 green->SetIsDrawable(true); 955 background->AddChild(green); 956 957 scoped_refptr<FakePictureLayer> blue = 958 FakePictureLayer::Create(&blue_client_); 959 blue->SetPosition(gfx::Point(50, 50)); 960 blue->SetBounds(gfx::Size(25, 25)); 961 blue->SetIsDrawable(true); 962 green->AddChild(blue); 963 964 // Grab the middle of the root layer. 965 copy_subrect_ = gfx::Rect(25, 25, 50, 50); 966 device_scale_factor_ = 2.f; 967 RunPixelTest(SOFTWARE_WITH_DEFAULT, 968 background, 969 base::FilePath(FILE_PATH_LITERAL( 970 "green_small_with_blue_corner.png"))); 971 } 972 973 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, 974 ReadbackSubrect_GL) { 975 scoped_refptr<FakePictureLayer> background = 976 FakePictureLayer::Create(&white_client_); 977 background->SetBounds(gfx::Size(100, 100)); 978 background->SetIsDrawable(true); 979 980 scoped_refptr<FakePictureLayer> green = 981 FakePictureLayer::Create(&green_client_); 982 green->SetBounds(gfx::Size(100, 100)); 983 green->SetIsDrawable(true); 984 background->AddChild(green); 985 986 scoped_refptr<FakePictureLayer> blue = 987 FakePictureLayer::Create(&blue_client_); 988 blue->SetPosition(gfx::Point(50, 50)); 989 blue->SetBounds(gfx::Size(25, 25)); 990 blue->SetIsDrawable(true); 991 green->AddChild(blue); 992 993 // Grab the middle of the root layer. 994 copy_subrect_ = gfx::Rect(25, 25, 50, 50); 995 device_scale_factor_ = 2.f; 996 RunPixelTest(GL_WITH_DEFAULT, 997 background, 998 base::FilePath(FILE_PATH_LITERAL( 999 "green_small_with_blue_corner.png"))); 1000 } 1001 1002 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, 1003 ReadbackNonRootLayerSubrect_Software) { 1004 scoped_refptr<FakePictureLayer> background = 1005 FakePictureLayer::Create(&white_client_); 1006 background->SetBounds(gfx::Size(100, 100)); 1007 background->SetIsDrawable(true); 1008 1009 scoped_refptr<FakePictureLayer> green = 1010 FakePictureLayer::Create(&green_client_); 1011 green->SetPosition(gfx::Point(10, 20)); 1012 green->SetBounds(gfx::Size(90, 80)); 1013 green->SetIsDrawable(true); 1014 background->AddChild(green); 1015 1016 scoped_refptr<FakePictureLayer> blue = 1017 FakePictureLayer::Create(&blue_client_); 1018 blue->SetPosition(gfx::Point(50, 50)); 1019 blue->SetBounds(gfx::Size(25, 25)); 1020 blue->SetIsDrawable(true); 1021 green->AddChild(blue); 1022 1023 // Grab the green layer's content with blue in the bottom right. 1024 copy_subrect_ = gfx::Rect(25, 25, 50, 50); 1025 device_scale_factor_ = 2.f; 1026 RunPixelTestWithReadbackTarget(SOFTWARE_WITH_DEFAULT, 1027 background, 1028 green.get(), 1029 base::FilePath(FILE_PATH_LITERAL( 1030 "green_small_with_blue_corner.png"))); 1031 } 1032 1033 TEST_F(LayerTreeHostReadbackDeviceScalePixelTest, 1034 ReadbackNonRootLayerSubrect_GL) { 1035 scoped_refptr<FakePictureLayer> background = 1036 FakePictureLayer::Create(&white_client_); 1037 background->SetBounds(gfx::Size(100, 100)); 1038 background->SetIsDrawable(true); 1039 1040 scoped_refptr<FakePictureLayer> green = 1041 FakePictureLayer::Create(&green_client_); 1042 green->SetPosition(gfx::Point(10, 20)); 1043 green->SetBounds(gfx::Size(90, 80)); 1044 green->SetIsDrawable(true); 1045 background->AddChild(green); 1046 1047 scoped_refptr<FakePictureLayer> blue = 1048 FakePictureLayer::Create(&blue_client_); 1049 blue->SetPosition(gfx::Point(50, 50)); 1050 blue->SetBounds(gfx::Size(25, 25)); 1051 blue->SetIsDrawable(true); 1052 green->AddChild(blue); 1053 1054 // Grab the green layer's content with blue in the bottom right. 1055 copy_subrect_ = gfx::Rect(25, 25, 50, 50); 1056 device_scale_factor_ = 2.f; 1057 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 1058 background, 1059 green.get(), 1060 base::FilePath(FILE_PATH_LITERAL( 1061 "green_small_with_blue_corner.png"))); 1062 } 1063 1064 TEST_F(LayerTreeHostReadbackPixelTest, ReadbackNonRootLayerOutsideViewport) { 1065 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( 1066 gfx::Rect(200, 200), SK_ColorWHITE); 1067 1068 scoped_refptr<SolidColorLayer> green = CreateSolidColorLayer( 1069 gfx::Rect(200, 200), SK_ColorGREEN); 1070 // Only the top left quarter of the layer is inside the viewport, so the 1071 // blue layer is entirely outside. 1072 green->SetPosition(gfx::Point(100, 100)); 1073 background->AddChild(green); 1074 1075 scoped_refptr<SolidColorLayer> blue = CreateSolidColorLayer( 1076 gfx::Rect(150, 150, 50, 50), SK_ColorBLUE); 1077 green->AddChild(blue); 1078 1079 RunPixelTestWithReadbackTarget(GL_WITH_DEFAULT, 1080 background, 1081 green.get(), 1082 base::FilePath(FILE_PATH_LITERAL( 1083 "green_with_blue_corner.png"))); 1084 } 1085 1086 } // namespace 1087 } // namespace cc 1088 1089 #endif // OS_ANDROID 1090