OLD | NEW |
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 "cc/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 // damaged. | 479 // damaged. |
480 SetFrameData( | 480 SetFrameData( |
481 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); | 481 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); |
482 break; | 482 break; |
483 case 2: | 483 case 2: |
484 // A different frame size will damage the whole layer. | 484 // A different frame size will damage the whole layer. |
485 SetFrameData( | 485 SetFrameData( |
486 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(0, 0, 0, 0))); | 486 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(0, 0, 0, 0))); |
487 break; | 487 break; |
488 case 3: | 488 case 3: |
489 // Should create a total amount of gfx::Rect(2, 2, 10, 6) damage. | 489 // Should create a total amount of gfx::Rect(2, 2, 8, 6) damage: |
490 // The frame size is 20x20 while the layer is 10x10, so this should | 490 // (2, 2, 10, 6) clamped to the root output rect. |
491 // produce a gfx::Rect(1, 1, 5, 3) damage rect. | |
492 SetFrameData( | 491 SetFrameData( |
493 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(2, 2, 5, 5))); | 492 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(2, 2, 5, 5))); |
494 SetFrameData( | 493 SetFrameData( |
495 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(7, 2, 5, 6))); | 494 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(7, 2, 5, 6))); |
496 break; | 495 break; |
497 case 4: | 496 case 4: |
498 // Should create zero damage. | 497 // Should create zero damage. |
499 layer_tree_host()->SetNeedsCommit(); | 498 layer_tree_host()->SetNeedsCommit(); |
500 break; | 499 break; |
501 case 5: | 500 case 5: |
502 // Should damage the full viewport. | 501 // Should damage the full viewport. |
503 delegated_->SetBounds(gfx::Size(2, 2)); | 502 delegated_->SetBounds(gfx::Size(2, 2)); |
504 break; | 503 break; |
505 case 6: | 504 case 6: |
506 // Should create zero damage. | 505 // Should create zero damage. |
507 layer_tree_host()->SetNeedsCommit(); | 506 layer_tree_host()->SetNeedsCommit(); |
508 break; | 507 break; |
509 case 7: | 508 case 7: |
510 // Should damage the full layer, tho the frame size is not changing. | 509 // Should damage the full layer, tho the frame size is not changing. |
511 delegated_->SetBounds(gfx::Size(6, 6)); | 510 delegated_->SetBounds(gfx::Size(6, 6)); |
512 SetFrameData( | 511 SetFrameData( |
513 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(1, 1, 2, 2))); | 512 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(1, 1, 2, 2))); |
514 break; | 513 break; |
515 case 8: | 514 case 8: |
516 // Should create zero damage. | 515 // Should create zero damage. |
517 layer_tree_host()->SetNeedsCommit(); | 516 layer_tree_host()->SetNeedsCommit(); |
518 break; | 517 break; |
519 case 9: | 518 case 9: |
520 // Should damage the full layer. | |
521 delegated_->SetDisplaySize(gfx::Size(10, 10)); | |
522 break; | |
523 case 10: | |
524 // Should create zero damage. | 519 // Should create zero damage. |
525 layer_tree_host()->SetNeedsCommit(); | 520 layer_tree_host()->SetNeedsCommit(); |
526 break; | 521 break; |
527 case 11: | 522 case 10: |
528 // Changing the frame size damages the full layer. | 523 // Changing the frame size damages the full layer. |
529 SetFrameData( | 524 SetFrameData( |
530 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(4, 4, 1, 1))); | 525 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(4, 4, 1, 1))); |
531 break; | 526 break; |
532 case 12: | 527 case 11: |
533 // An invalid frame isn't used, so it should not cause damage. | 528 // An invalid frame isn't used, so it should not cause damage. |
534 SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 5, 5), | 529 SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 5, 5), |
535 gfx::Rect(4, 4, 1, 1))); | 530 gfx::Rect(4, 4, 1, 1))); |
536 break; | 531 break; |
537 case 13: | 532 case 12: |
538 // Should create gfx::Rect(1, 1, 2, 2) of damage. The frame size is | 533 // Should create gfx::Rect(1, 1, 2, 2) of damage. |
539 // 5x5 and the display size is now set to 10x10, so this should result | |
540 // in a gfx::Rect(2, 2, 4, 4) damage rect. | |
541 SetFrameData( | 534 SetFrameData( |
542 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); | 535 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); |
543 break; | 536 break; |
544 case 14: | 537 case 13: |
545 // Should create zero damage. | 538 // Should create zero damage. |
546 layer_tree_host()->SetNeedsCommit(); | 539 layer_tree_host()->SetNeedsCommit(); |
547 break; | 540 break; |
548 case 15: | 541 case 14: |
549 // Moving the layer out of the tree and back in will damage the whole | 542 // Moving the layer out of the tree and back in will damage the whole |
550 // impl layer. | 543 // impl layer. |
551 delegated_->RemoveFromParent(); | 544 delegated_->RemoveFromParent(); |
552 layer_tree_host()->root_layer()->AddChild(delegated_); | 545 layer_tree_host()->root_layer()->AddChild(delegated_); |
553 break; | 546 break; |
554 case 16: | 547 case 15: |
555 // Make a larger frame with lots of damage. Then a frame smaller than | 548 // Make a larger frame with lots of damage. Then a frame smaller than |
556 // the first frame's damage. The entire layer should be damaged, but | 549 // the first frame's damage. The entire layer should be damaged, but |
557 // nothing more. | 550 // nothing more. |
558 SetFrameData( | 551 SetFrameData( |
559 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); | 552 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); |
560 SetFrameData( | 553 SetFrameData( |
561 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); | 554 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); |
562 break; | 555 break; |
563 case 17: | 556 case 16: |
564 // Make a frame with lots of damage. Then replace it with a frame with | 557 // Make a frame with lots of damage. Then replace it with a frame with |
565 // no damage. The entire layer should be damaged, but nothing more. | 558 // no damage. The entire layer should be damaged, but nothing more. |
566 SetFrameData( | 559 SetFrameData( |
567 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); | 560 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); |
568 SetFrameData( | 561 SetFrameData( |
569 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 0, 0))); | 562 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 0, 0))); |
570 break; | 563 break; |
571 case 18: | 564 case 17: |
572 // Make another layer that uses the same frame provider. The new layer | 565 // Make another layer that uses the same frame provider. The new layer |
573 // should be damaged. | 566 // should be damaged. |
574 delegated_copy_ = CreateDelegatedLayer(frame_provider_); | 567 delegated_copy_ = CreateDelegatedLayer(frame_provider_); |
575 delegated_copy_->SetPosition(gfx::Point(5, 0)); | 568 delegated_copy_->SetPosition(gfx::Point(5, 0)); |
576 | 569 |
577 // Also set a new frame. | 570 // Also set a new frame. |
578 SetFrameData( | 571 SetFrameData( |
579 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(4, 0, 1, 1))); | 572 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(4, 0, 1, 1))); |
580 break; | 573 break; |
581 case 19: | 574 case 18: |
582 // Set another new frame, both layers should be damaged in the same | 575 // Set another new frame, both layers should be damaged in the same |
583 // ways. | 576 // ways. |
584 SetFrameData( | 577 SetFrameData( |
585 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(3, 3, 1, 1))); | 578 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(3, 3, 1, 1))); |
| 579 break; |
586 } | 580 } |
587 first_draw_for_source_frame_ = true; | 581 first_draw_for_source_frame_ = true; |
588 } | 582 } |
589 | 583 |
590 virtual DrawResult PrepareToDrawOnThread( | 584 virtual DrawResult PrepareToDrawOnThread( |
591 LayerTreeHostImpl* host_impl, | 585 LayerTreeHostImpl* host_impl, |
592 LayerTreeHostImpl::FrameData* frame, | 586 LayerTreeHostImpl::FrameData* frame, |
593 DrawResult draw_result) OVERRIDE { | 587 DrawResult draw_result) OVERRIDE { |
594 EXPECT_EQ(DRAW_SUCCESS, draw_result); | 588 EXPECT_EQ(DRAW_SUCCESS, draw_result); |
595 | 589 |
(...skipping 13 matching lines...) Expand all Loading... |
609 // First frame is damaged because of viewport resize. | 603 // First frame is damaged because of viewport resize. |
610 EXPECT_EQ(gfx::Rect(15, 15).ToString(), damage_rect.ToString()); | 604 EXPECT_EQ(gfx::Rect(15, 15).ToString(), damage_rect.ToString()); |
611 break; | 605 break; |
612 case 1: | 606 case 1: |
613 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); | 607 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); |
614 break; | 608 break; |
615 case 2: | 609 case 2: |
616 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); | 610 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); |
617 break; | 611 break; |
618 case 3: | 612 case 3: |
619 EXPECT_EQ(gfx::Rect(1, 1, 5, 3).ToString(), damage_rect.ToString()); | 613 EXPECT_EQ(gfx::Rect(2, 2, 8, 6).ToString(), damage_rect.ToString()); |
620 break; | 614 break; |
621 case 4: | 615 case 4: |
622 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); | 616 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); |
623 break; | 617 break; |
624 case 5: | 618 case 5: |
625 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); | 619 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); |
626 break; | 620 break; |
627 case 6: | 621 case 6: |
628 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); | 622 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); |
629 break; | 623 break; |
630 case 7: | 624 case 7: |
631 EXPECT_EQ(gfx::Rect(6, 6).ToString(), damage_rect.ToString()); | 625 EXPECT_EQ(gfx::Rect(6, 6).ToString(), damage_rect.ToString()); |
632 break; | 626 break; |
633 case 8: | 627 case 8: |
634 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); | 628 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); |
635 break; | 629 break; |
636 case 9: | 630 case 9: |
637 EXPECT_EQ(gfx::Rect(6, 6).ToString(), damage_rect.ToString()); | 631 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); |
638 break; | 632 break; |
639 case 10: | 633 case 10: |
| 634 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); |
| 635 break; |
| 636 case 11: |
640 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); | 637 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); |
641 break; | 638 break; |
642 case 11: | 639 case 12: |
643 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); | 640 EXPECT_EQ(gfx::Rect(1, 1, 2, 2).ToString(), damage_rect.ToString()); |
644 break; | 641 break; |
645 case 12: | 642 case 13: |
646 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); | 643 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); |
647 break; | 644 break; |
648 case 13: | |
649 EXPECT_EQ(gfx::Rect(2, 2, 4, 4).ToString(), damage_rect.ToString()); | |
650 break; | |
651 case 14: | 645 case 14: |
652 EXPECT_EQ(gfx::Rect().ToString(), damage_rect.ToString()); | 646 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); |
653 break; | 647 break; |
654 case 15: | 648 case 15: |
655 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); | 649 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); |
656 break; | 650 break; |
657 case 16: | 651 case 16: |
658 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); | 652 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); |
659 break; | 653 break; |
660 case 17: | 654 case 17: |
661 EXPECT_EQ(gfx::Rect(10, 10).ToString(), damage_rect.ToString()); | |
662 break; | |
663 case 18: | |
664 EXPECT_EQ(gfx::UnionRects(gfx::Rect(5, 0, 10, 10), | 655 EXPECT_EQ(gfx::UnionRects(gfx::Rect(5, 0, 10, 10), |
665 gfx::Rect(4, 0, 1, 1)).ToString(), | 656 gfx::Rect(4, 0, 1, 1)).ToString(), |
666 damage_rect.ToString()); | 657 damage_rect.ToString()); |
667 break; | 658 break; |
668 case 19: | 659 case 18: |
669 EXPECT_EQ(gfx::Rect(3, 3, 6, 1).ToString(), damage_rect.ToString()); | 660 EXPECT_EQ(gfx::Rect(3, 3, 6, 1).ToString(), damage_rect.ToString()); |
670 EndTest(); | 661 EndTest(); |
671 break; | 662 break; |
672 } | 663 } |
673 | 664 |
674 return draw_result; | 665 return draw_result; |
675 } | 666 } |
676 | 667 |
677 protected: | 668 protected: |
678 scoped_refptr<DelegatedRendererLayer> delegated_copy_; | 669 scoped_refptr<DelegatedRendererLayer> delegated_copy_; |
(...skipping 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2193 } | 2184 } |
2194 | 2185 |
2195 scoped_refptr<DelegatedRendererLayer> delegated_thief_; | 2186 scoped_refptr<DelegatedRendererLayer> delegated_thief_; |
2196 }; | 2187 }; |
2197 | 2188 |
2198 SINGLE_AND_MULTI_THREAD_TEST_F( | 2189 SINGLE_AND_MULTI_THREAD_TEST_F( |
2199 LayerTreeHostDelegatedTestRemoveAndChangeResources); | 2190 LayerTreeHostDelegatedTestRemoveAndChangeResources); |
2200 | 2191 |
2201 } // namespace | 2192 } // namespace |
2202 } // namespace cc | 2193 } // namespace cc |
OLD | NEW |