OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/compiler_specific.h" | 6 #include "base/compiler_specific.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "ui/gfx/canvas_skia.h" | 9 #include "ui/gfx/canvas_skia.h" |
10 #include "ui/gfx/compositor/compositor_observer.h" | 10 #include "ui/gfx/compositor/compositor_observer.h" |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 layer->SetBounds(bounds); | 458 layer->SetBounds(bounds); |
459 return layer; | 459 return layer; |
460 } | 460 } |
461 | 461 |
462 Layer* CreateNoTextureLayer(const gfx::Rect& bounds) OVERRIDE { | 462 Layer* CreateNoTextureLayer(const gfx::Rect& bounds) OVERRIDE { |
463 Layer* layer = CreateLayer(Layer::LAYER_HAS_NO_TEXTURE); | 463 Layer* layer = CreateLayer(Layer::LAYER_HAS_NO_TEXTURE); |
464 layer->SetBounds(bounds); | 464 layer->SetBounds(bounds); |
465 return layer; | 465 return layer; |
466 } | 466 } |
467 | 467 |
| 468 void RunPendingMessages() { |
| 469 MessageLoopForUI::current()->RunAllPending(); |
| 470 } |
| 471 |
468 private: | 472 private: |
469 scoped_ptr<NullLayerDelegate> default_layer_delegate_; | 473 scoped_ptr<NullLayerDelegate> default_layer_delegate_; |
470 | 474 |
471 DISALLOW_COPY_AND_ASSIGN(LayerWithNullDelegateTest); | 475 DISALLOW_COPY_AND_ASSIGN(LayerWithNullDelegateTest); |
472 }; | 476 }; |
473 | 477 |
| 478 // With the webkit compositor, we don't explicitly textures for layers, making |
| 479 // tests that check that we do fail. |
| 480 #if defined(USE_WEBKIT_COMPOSITOR) |
| 481 #define NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(X) DISABLED_ ## X |
| 482 #else |
| 483 #define NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(X) X |
| 484 #endif |
| 485 |
474 // Verifies that a layer which is set never to have a texture does not | 486 // Verifies that a layer which is set never to have a texture does not |
475 // get a texture when SetFillsBoundsOpaquely is called. | 487 // get a texture when SetFillsBoundsOpaquely is called. |
476 TEST_F(LayerWithNullDelegateTest, LayerNoTextureSetFillsBoundsOpaquely) { | 488 TEST_F(LayerWithNullDelegateTest, |
| 489 NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR( |
| 490 LayerNoTextureSetFillsBoundsOpaquely)) { |
477 scoped_ptr<Layer> parent(CreateNoTextureLayer(gfx::Rect(0, 0, 400, 400))); | 491 scoped_ptr<Layer> parent(CreateNoTextureLayer(gfx::Rect(0, 0, 400, 400))); |
478 scoped_ptr<Layer> child(CreateNoTextureLayer(gfx::Rect(50, 50, 100, 100))); | 492 scoped_ptr<Layer> child(CreateNoTextureLayer(gfx::Rect(50, 50, 100, 100))); |
479 parent->Add(child.get()); | 493 parent->Add(child.get()); |
480 | 494 |
481 compositor()->SetRootLayer(parent.get()); | 495 compositor()->SetRootLayer(parent.get()); |
| 496 parent->SetFillsBoundsOpaquely(true); |
| 497 child->SetFillsBoundsOpaquely(true); |
482 Draw(); | 498 Draw(); |
| 499 RunPendingMessages(); |
| 500 EXPECT_TRUE(child->texture() == NULL); |
| 501 EXPECT_TRUE(parent->texture() == NULL); |
| 502 |
| 503 parent->SetFillsBoundsOpaquely(false); |
| 504 child->SetFillsBoundsOpaquely(false); |
| 505 Draw(); |
| 506 RunPendingMessages(); |
483 EXPECT_TRUE(child->texture() == NULL); | 507 EXPECT_TRUE(child->texture() == NULL); |
484 EXPECT_TRUE(parent->texture() == NULL); | 508 EXPECT_TRUE(parent->texture() == NULL); |
485 } | 509 } |
486 | 510 |
487 // With the webkit compositor, we don't explicitly textures for layers, making | |
488 // tests that check that we do fail. | |
489 #if defined(USE_WEBKIT_COMPOSITOR) | |
490 #define WEBKIT_COMPOSITOR_FAILS(X) FAILS_ ## X | |
491 #else | |
492 #define WEBKIT_COMPOSITOR_FAILS(X) X | |
493 #endif | |
494 | |
495 // Verifies that a layer does not have a texture when the hole is the size | 511 // Verifies that a layer does not have a texture when the hole is the size |
496 // of the parent layer. | 512 // of the parent layer. |
497 TEST_F(LayerWithNullDelegateTest, | 513 TEST_F(LayerWithNullDelegateTest, |
498 WEBKIT_COMPOSITOR_FAILS(LayerNoTextureHoleSizeOfLayer)) { | 514 NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(LayerNoTextureHoleSizeOfLayer)) { |
499 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | 515 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); |
500 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | 516 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); |
501 parent->Add(child.get()); | 517 parent->Add(child.get()); |
502 | 518 |
503 Draw(); | 519 Draw(); |
504 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); | 520 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); |
505 EXPECT_TRUE(parent->texture() != NULL); | 521 EXPECT_TRUE(parent->texture() != NULL); |
506 | 522 |
507 child->SetBounds(gfx::Rect(0, 0, 400, 400)); | 523 child->SetBounds(gfx::Rect(0, 0, 400, 400)); |
508 Draw(); | 524 Draw(); |
509 EXPECT_TRUE(parent->texture() == NULL); | 525 EXPECT_TRUE(parent->texture() == NULL); |
510 } | 526 } |
511 | 527 |
512 // Verifies that a layer which has opacity == 0 does not have a texture. | 528 // Verifies that a layer which has opacity == 0 does not have a texture. |
513 TEST_F(LayerWithNullDelegateTest, | 529 TEST_F(LayerWithNullDelegateTest, |
514 WEBKIT_COMPOSITOR_FAILS(LayerNoTextureTransparent)) { | 530 NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(LayerNoTextureTransparent)) { |
515 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | 531 scoped_ptr<Layer> parent(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); |
516 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | 532 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); |
517 parent->Add(child.get()); | 533 parent->Add(child.get()); |
518 | 534 |
519 parent->SetOpacity(0.0f); | 535 parent->SetOpacity(0.0f); |
520 child->SetOpacity(0.0f); | 536 child->SetOpacity(0.0f); |
521 Draw(); | 537 Draw(); |
522 EXPECT_TRUE(parent->texture() == NULL); | 538 EXPECT_TRUE(parent->texture() == NULL); |
523 EXPECT_TRUE(child->texture() == NULL); | 539 EXPECT_TRUE(child->texture() == NULL); |
524 | 540 |
525 parent->SetOpacity(1.0f); | 541 parent->SetOpacity(1.0f); |
526 Draw(); | 542 Draw(); |
527 EXPECT_TRUE(parent->texture() != NULL); | 543 EXPECT_TRUE(parent->texture() != NULL); |
528 EXPECT_TRUE(child->texture() == NULL); | 544 EXPECT_TRUE(child->texture() == NULL); |
529 | 545 |
530 child->SetOpacity(1.0f); | 546 child->SetOpacity(1.0f); |
531 Draw(); | 547 Draw(); |
532 EXPECT_TRUE(parent->texture() != NULL); | 548 EXPECT_TRUE(parent->texture() != NULL); |
533 EXPECT_TRUE(child->texture() != NULL); | 549 EXPECT_TRUE(child->texture() != NULL); |
534 } | 550 } |
535 | 551 |
536 // Verifies that no texture is created for a layer with empty bounds. | 552 // Verifies that no texture is created for a layer with empty bounds. |
537 TEST_F(LayerWithNullDelegateTest, | 553 TEST_F(LayerWithNullDelegateTest, |
538 WEBKIT_COMPOSITOR_FAILS(LayerTextureNonEmptySchedulePaint)) { | 554 NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(LayerTextureNonEmptySchedulePaint)) { |
539 scoped_ptr<Layer> layer(CreateTextureRootLayer(gfx::Rect(0, 0, 0, 0))); | 555 scoped_ptr<Layer> layer(CreateTextureRootLayer(gfx::Rect(0, 0, 0, 0))); |
540 Draw(); | 556 Draw(); |
541 EXPECT_TRUE(layer->texture() == NULL); | 557 EXPECT_TRUE(layer->texture() == NULL); |
542 | 558 |
543 layer->SetBounds(gfx::Rect(0, 0, 400, 400)); | 559 layer->SetBounds(gfx::Rect(0, 0, 400, 400)); |
544 Draw(); | 560 Draw(); |
545 EXPECT_TRUE(layer->texture() != NULL); | 561 EXPECT_TRUE(layer->texture() != NULL); |
546 } | 562 } |
547 | 563 |
548 // Verifies that when there are many potential holes, the largest one is picked. | 564 // Verifies that when there are many potential holes, the largest one is picked. |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
613 EXPECT_EQ(target_rect, parent->hole_rect()); | 629 EXPECT_EQ(target_rect, parent->hole_rect()); |
614 } | 630 } |
615 } | 631 } |
616 | 632 |
617 // Create this hierarchy: | 633 // Create this hierarchy: |
618 // L1 (no texture) | 634 // L1 (no texture) |
619 // +- L11 (texture) | 635 // +- L11 (texture) |
620 // +- L12 (no texture) (added after L1 is already set as root-layer) | 636 // +- L12 (no texture) (added after L1 is already set as root-layer) |
621 // +- L121 (texture) | 637 // +- L121 (texture) |
622 // +- L122 (texture) | 638 // +- L122 (texture) |
623 TEST_F(LayerWithNullDelegateTest, WEBKIT_COMPOSITOR_FAILS(NoCompositor)) { | 639 TEST_F(LayerWithNullDelegateTest, |
| 640 NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(NoCompositor)) { |
624 scoped_ptr<Layer> l1(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); | 641 scoped_ptr<Layer> l1(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); |
625 scoped_ptr<Layer> l11(CreateLayer(Layer::LAYER_HAS_TEXTURE)); | 642 scoped_ptr<Layer> l11(CreateLayer(Layer::LAYER_HAS_TEXTURE)); |
626 scoped_ptr<Layer> l12(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); | 643 scoped_ptr<Layer> l12(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); |
627 scoped_ptr<Layer> l121(CreateLayer(Layer::LAYER_HAS_TEXTURE)); | 644 scoped_ptr<Layer> l121(CreateLayer(Layer::LAYER_HAS_TEXTURE)); |
628 scoped_ptr<Layer> l122(CreateLayer(Layer::LAYER_HAS_TEXTURE)); | 645 scoped_ptr<Layer> l122(CreateLayer(Layer::LAYER_HAS_TEXTURE)); |
629 | 646 |
630 EXPECT_EQ(NULL, l1->texture()); | 647 EXPECT_EQ(NULL, l1->texture()); |
631 EXPECT_EQ(NULL, l11->texture()); | 648 EXPECT_EQ(NULL, l11->texture()); |
632 EXPECT_EQ(NULL, l12->texture()); | 649 EXPECT_EQ(NULL, l12->texture()); |
633 EXPECT_EQ(NULL, l121->texture()); | 650 EXPECT_EQ(NULL, l121->texture()); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 EXPECT_TRUE(l2->IsDrawn()); | 739 EXPECT_TRUE(l2->IsDrawn()); |
723 EXPECT_FALSE(l3->IsDrawn()); | 740 EXPECT_FALSE(l3->IsDrawn()); |
724 #if defined(USE_WEBKIT_COMPOSITOR) | 741 #if defined(USE_WEBKIT_COMPOSITOR) |
725 EXPECT_EQ(1.f, l1->web_layer().opacity()); | 742 EXPECT_EQ(1.f, l1->web_layer().opacity()); |
726 #endif | 743 #endif |
727 } | 744 } |
728 | 745 |
729 // Checks that the invalid rect assumes correct values when setting bounds. | 746 // Checks that the invalid rect assumes correct values when setting bounds. |
730 // TODO(vollick): for USE_WEBKIT_COMPOSITOR, use WebKit's dirty rect. | 747 // TODO(vollick): for USE_WEBKIT_COMPOSITOR, use WebKit's dirty rect. |
731 TEST_F(LayerWithNullDelegateTest, | 748 TEST_F(LayerWithNullDelegateTest, |
732 WEBKIT_COMPOSITOR_FAILS(SetBoundsInvalidRect)) { | 749 NOT_APPLICABLE_TO_WEBKIT_COMPOSITOR(SetBoundsInvalidRect)) { |
733 scoped_ptr<Layer> l1(CreateTextureLayer(gfx::Rect(0, 0, 200, 200))); | 750 scoped_ptr<Layer> l1(CreateTextureLayer(gfx::Rect(0, 0, 200, 200))); |
734 compositor()->SetRootLayer(l1.get()); | 751 compositor()->SetRootLayer(l1.get()); |
735 | 752 |
736 // After a draw the invalid rect should be empty. | 753 // After a draw the invalid rect should be empty. |
737 Draw(); | 754 Draw(); |
738 EXPECT_TRUE(l1->invalid_rect().IsEmpty()); | 755 EXPECT_TRUE(l1->invalid_rect().IsEmpty()); |
739 | 756 |
740 // After a move the invalid rect should be empty. | 757 // After a move the invalid rect should be empty. |
741 l1->SetBounds(gfx::Rect(5, 5, 200, 200)); | 758 l1->SetBounds(gfx::Rect(5, 5, 200, 200)); |
742 EXPECT_TRUE(l1->invalid_rect().IsEmpty()); | 759 EXPECT_TRUE(l1->invalid_rect().IsEmpty()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 SkAutoLockPixels lock(bitmap); | 798 SkAutoLockPixels lock(bitmap); |
782 bool is_all_red = true; | 799 bool is_all_red = true; |
783 for (int x = 0; is_all_red && x < 500; x++) | 800 for (int x = 0; is_all_red && x < 500; x++) |
784 for (int y = 0; is_all_red && y < 500; y++) | 801 for (int y = 0; is_all_red && y < 500; y++) |
785 is_all_red = is_all_red && (bitmap.getColor(x, y) == SK_ColorRED); | 802 is_all_red = is_all_red && (bitmap.getColor(x, y) == SK_ColorRED); |
786 | 803 |
787 EXPECT_TRUE(is_all_red); | 804 EXPECT_TRUE(is_all_red); |
788 } | 805 } |
789 | 806 |
790 } // namespace ui | 807 } // namespace ui |
OLD | NEW |