| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/display/chromeos/display_configurator.h" | 5 #include "ui/display/chromeos/display_configurator.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <cmath> | 9 #include <cmath> |
| 10 #include <cstdarg> | 10 #include <cstdarg> |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 class TestMirroringController | 369 class TestMirroringController |
| 370 : public DisplayConfigurator::SoftwareMirroringController { | 370 : public DisplayConfigurator::SoftwareMirroringController { |
| 371 public: | 371 public: |
| 372 TestMirroringController() : software_mirroring_enabled_(false) {} | 372 TestMirroringController() : software_mirroring_enabled_(false) {} |
| 373 virtual ~TestMirroringController() {} | 373 virtual ~TestMirroringController() {} |
| 374 | 374 |
| 375 virtual void SetSoftwareMirroring(bool enabled) OVERRIDE { | 375 virtual void SetSoftwareMirroring(bool enabled) OVERRIDE { |
| 376 software_mirroring_enabled_ = enabled; | 376 software_mirroring_enabled_ = enabled; |
| 377 } | 377 } |
| 378 | 378 |
| 379 bool software_mirroring_enabled() const { | 379 virtual bool SoftwareMirroringEnabled() const OVERRIDE { |
| 380 return software_mirroring_enabled_; | 380 return software_mirroring_enabled_; |
| 381 } | 381 } |
| 382 | 382 |
| 383 private: | 383 private: |
| 384 bool software_mirroring_enabled_; | 384 bool software_mirroring_enabled_; |
| 385 | 385 |
| 386 DISALLOW_COPY_AND_ASSIGN(TestMirroringController); | 386 DISALLOW_COPY_AND_ASSIGN(TestMirroringController); |
| 387 }; | 387 }; |
| 388 | 388 |
| 389 class DisplayConfiguratorTest : public testing::Test { | 389 class DisplayConfiguratorTest : public testing::Test { |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 585 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 586 GetCrtcAction(outputs_[1], | 586 GetCrtcAction(outputs_[1], |
| 587 &big_mode_, | 587 &big_mode_, |
| 588 gfx::Point(0, | 588 gfx::Point(0, |
| 589 small_mode_.size().height() + | 589 small_mode_.size().height() + |
| 590 DisplayConfigurator::kVerticalGap)) | 590 DisplayConfigurator::kVerticalGap)) |
| 591 .c_str(), | 591 .c_str(), |
| 592 kUngrab, | 592 kUngrab, |
| 593 NULL), | 593 NULL), |
| 594 log_->GetActionsAndClear()); | 594 log_->GetActionsAndClear()); |
| 595 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 595 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 596 EXPECT_EQ(1, observer_.num_changes()); | 596 EXPECT_EQ(1, observer_.num_changes()); |
| 597 | 597 |
| 598 observer_.Reset(); | 598 observer_.Reset(); |
| 599 EXPECT_TRUE(configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)); | 599 EXPECT_TRUE(configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)); |
| 600 EXPECT_EQ( | 600 EXPECT_EQ( |
| 601 JoinActions( | 601 JoinActions( |
| 602 kGrab, | 602 kGrab, |
| 603 GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1]) | 603 GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1]) |
| 604 .c_str(), | 604 .c_str(), |
| 605 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 605 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 606 GetCrtcAction(outputs_[1], &small_mode_, gfx::Point(0, 0)).c_str(), | 606 GetCrtcAction(outputs_[1], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 607 kUngrab, | 607 kUngrab, |
| 608 NULL), | 608 NULL), |
| 609 log_->GetActionsAndClear()); | 609 log_->GetActionsAndClear()); |
| 610 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 610 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 611 EXPECT_EQ(1, observer_.num_changes()); | 611 EXPECT_EQ(1, observer_.num_changes()); |
| 612 | 612 |
| 613 // Disconnect the second output. | 613 // Disconnect the second output. |
| 614 observer_.Reset(); | 614 observer_.Reset(); |
| 615 UpdateOutputs(1, true); | 615 UpdateOutputs(1, true); |
| 616 EXPECT_EQ( | 616 EXPECT_EQ( |
| 617 JoinActions( | 617 JoinActions( |
| 618 kGrab, | 618 kGrab, |
| 619 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), | 619 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), |
| 620 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 620 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 621 kUngrab, | 621 kUngrab, |
| 622 NULL), | 622 NULL), |
| 623 log_->GetActionsAndClear()); | 623 log_->GetActionsAndClear()); |
| 624 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 624 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 625 EXPECT_EQ(1, observer_.num_changes()); | 625 EXPECT_EQ(1, observer_.num_changes()); |
| 626 | 626 |
| 627 // Get rid of shared modes to force software mirroring. | 627 // Get rid of shared modes to force software mirroring. |
| 628 outputs_[1].set_modes(std::vector<const DisplayMode*>(1, &big_mode_)); | 628 outputs_[1].set_modes(std::vector<const DisplayMode*>(1, &big_mode_)); |
| 629 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED); | 629 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED); |
| 630 UpdateOutputs(2, true); | 630 UpdateOutputs(2, true); |
| 631 EXPECT_EQ( | 631 EXPECT_EQ( |
| 632 JoinActions( | 632 JoinActions( |
| 633 kGrab, | 633 kGrab, |
| 634 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), | 634 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), |
| 635 &outputs_[0], | 635 &outputs_[0], |
| 636 &outputs_[1]).c_str(), | 636 &outputs_[1]).c_str(), |
| 637 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 637 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 638 GetCrtcAction(outputs_[1], | 638 GetCrtcAction(outputs_[1], |
| 639 &big_mode_, | 639 &big_mode_, |
| 640 gfx::Point(0, | 640 gfx::Point(0, |
| 641 small_mode_.size().height() + | 641 small_mode_.size().height() + |
| 642 DisplayConfigurator::kVerticalGap)) | 642 DisplayConfigurator::kVerticalGap)) |
| 643 .c_str(), | 643 .c_str(), |
| 644 kUngrab, | 644 kUngrab, |
| 645 NULL), | 645 NULL), |
| 646 log_->GetActionsAndClear()); | 646 log_->GetActionsAndClear()); |
| 647 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 647 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 648 | 648 |
| 649 observer_.Reset(); | 649 observer_.Reset(); |
| 650 EXPECT_TRUE(configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)); | 650 EXPECT_TRUE(configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)); |
| 651 EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_->GetActionsAndClear()); | 651 EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_->GetActionsAndClear()); |
| 652 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, | 652 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, |
| 653 configurator_.display_state()); | 653 configurator_.display_state()); |
| 654 EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled()); | 654 EXPECT_TRUE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 655 EXPECT_EQ(1, observer_.num_changes()); | 655 EXPECT_EQ(1, observer_.num_changes()); |
| 656 | 656 |
| 657 // Setting MULTIPLE_DISPLAY_STATE_DUAL_MIRROR should try to reconfigure. | 657 // Setting MULTIPLE_DISPLAY_STATE_DUAL_MIRROR should try to reconfigure. |
| 658 observer_.Reset(); | 658 observer_.Reset(); |
| 659 EXPECT_TRUE( | 659 EXPECT_TRUE( |
| 660 configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED)); | 660 configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED)); |
| 661 EXPECT_EQ(JoinActions(NULL), log_->GetActionsAndClear()); | 661 EXPECT_EQ(JoinActions(NULL), log_->GetActionsAndClear()); |
| 662 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 662 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 663 EXPECT_EQ(1, observer_.num_changes()); | 663 EXPECT_EQ(1, observer_.num_changes()); |
| 664 | 664 |
| 665 // Set back to software mirror mode. | 665 // Set back to software mirror mode. |
| 666 observer_.Reset(); | 666 observer_.Reset(); |
| 667 EXPECT_TRUE(configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)); | 667 EXPECT_TRUE(configurator_.SetDisplayMode(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)); |
| 668 EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_->GetActionsAndClear()); | 668 EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_->GetActionsAndClear()); |
| 669 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, | 669 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, |
| 670 configurator_.display_state()); | 670 configurator_.display_state()); |
| 671 EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled()); | 671 EXPECT_TRUE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 672 EXPECT_EQ(1, observer_.num_changes()); | 672 EXPECT_EQ(1, observer_.num_changes()); |
| 673 | 673 |
| 674 // Disconnect the second output. | 674 // Disconnect the second output. |
| 675 observer_.Reset(); | 675 observer_.Reset(); |
| 676 UpdateOutputs(1, true); | 676 UpdateOutputs(1, true); |
| 677 EXPECT_EQ( | 677 EXPECT_EQ( |
| 678 JoinActions( | 678 JoinActions( |
| 679 kGrab, | 679 kGrab, |
| 680 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), | 680 GetFramebufferAction(small_mode_.size(), &outputs_[0], NULL).c_str(), |
| 681 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 681 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 682 kUngrab, | 682 kUngrab, |
| 683 NULL), | 683 NULL), |
| 684 log_->GetActionsAndClear()); | 684 log_->GetActionsAndClear()); |
| 685 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 685 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 686 EXPECT_EQ(1, observer_.num_changes()); | 686 EXPECT_EQ(1, observer_.num_changes()); |
| 687 } | 687 } |
| 688 | 688 |
| 689 TEST_F(DisplayConfiguratorTest, SetDisplayPower) { | 689 TEST_F(DisplayConfiguratorTest, SetDisplayPower) { |
| 690 InitWithSingleOutput(); | 690 InitWithSingleOutput(); |
| 691 | 691 |
| 692 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR); | 692 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR); |
| 693 observer_.Reset(); | 693 observer_.Reset(); |
| 694 UpdateOutputs(2, true); | 694 UpdateOutputs(2, true); |
| 695 EXPECT_EQ( | 695 EXPECT_EQ( |
| 696 JoinActions( | 696 JoinActions( |
| 697 kGrab, | 697 kGrab, |
| 698 GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1]) | 698 GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1]) |
| 699 .c_str(), | 699 .c_str(), |
| 700 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 700 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 701 GetCrtcAction(outputs_[1], &small_mode_, gfx::Point(0, 0)).c_str(), | 701 GetCrtcAction(outputs_[1], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 702 kUngrab, | 702 kUngrab, |
| 703 NULL), | 703 NULL), |
| 704 log_->GetActionsAndClear()); | 704 log_->GetActionsAndClear()); |
| 705 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 705 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 706 EXPECT_EQ(1, observer_.num_changes()); | 706 EXPECT_EQ(1, observer_.num_changes()); |
| 707 | 707 |
| 708 // Turning off the internal display should switch the external display to | 708 // Turning off the internal display should switch the external display to |
| 709 // its native mode. | 709 // its native mode. |
| 710 observer_.Reset(); | 710 observer_.Reset(); |
| 711 configurator_.SetDisplayPower( | 711 configurator_.SetDisplayPower( |
| 712 chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, | 712 chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, |
| 713 DisplayConfigurator::kSetDisplayPowerNoFlags); | 713 DisplayConfigurator::kSetDisplayPowerNoFlags); |
| 714 EXPECT_EQ( | 714 EXPECT_EQ( |
| 715 JoinActions( | 715 JoinActions( |
| (...skipping 17 matching lines...) Expand all Loading... |
| 733 EXPECT_EQ( | 733 EXPECT_EQ( |
| 734 JoinActions(kGrab, | 734 JoinActions(kGrab, |
| 735 GetFramebufferAction( | 735 GetFramebufferAction( |
| 736 small_mode_.size(), &outputs_[0], &outputs_[1]).c_str(), | 736 small_mode_.size(), &outputs_[0], &outputs_[1]).c_str(), |
| 737 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), | 737 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), |
| 738 GetCrtcAction(outputs_[1], NULL, gfx::Point(0, 0)).c_str(), | 738 GetCrtcAction(outputs_[1], NULL, gfx::Point(0, 0)).c_str(), |
| 739 kUngrab, | 739 kUngrab, |
| 740 NULL), | 740 NULL), |
| 741 log_->GetActionsAndClear()); | 741 log_->GetActionsAndClear()); |
| 742 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR, configurator_.display_state()); | 742 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR, configurator_.display_state()); |
| 743 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 743 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 744 EXPECT_EQ(1, observer_.num_changes()); | 744 EXPECT_EQ(1, observer_.num_changes()); |
| 745 | 745 |
| 746 // Turn all displays on and check that mirroring is still used. | 746 // Turn all displays on and check that mirroring is still used. |
| 747 observer_.Reset(); | 747 observer_.Reset(); |
| 748 configurator_.SetDisplayPower(chromeos::DISPLAY_POWER_ALL_ON, | 748 configurator_.SetDisplayPower(chromeos::DISPLAY_POWER_ALL_ON, |
| 749 DisplayConfigurator::kSetDisplayPowerNoFlags); | 749 DisplayConfigurator::kSetDisplayPowerNoFlags); |
| 750 EXPECT_EQ( | 750 EXPECT_EQ( |
| 751 JoinActions( | 751 JoinActions( |
| 752 kGrab, | 752 kGrab, |
| 753 GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1]) | 753 GetFramebufferAction(small_mode_.size(), &outputs_[0], &outputs_[1]) |
| 754 .c_str(), | 754 .c_str(), |
| 755 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 755 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 756 GetCrtcAction(outputs_[1], &small_mode_, gfx::Point(0, 0)).c_str(), | 756 GetCrtcAction(outputs_[1], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 757 kForceDPMS, | 757 kForceDPMS, |
| 758 kUngrab, | 758 kUngrab, |
| 759 NULL), | 759 NULL), |
| 760 log_->GetActionsAndClear()); | 760 log_->GetActionsAndClear()); |
| 761 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR, configurator_.display_state()); | 761 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR, configurator_.display_state()); |
| 762 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 762 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 763 EXPECT_EQ(1, observer_.num_changes()); | 763 EXPECT_EQ(1, observer_.num_changes()); |
| 764 | 764 |
| 765 // Get rid of shared modes to force software mirroring. | 765 // Get rid of shared modes to force software mirroring. |
| 766 outputs_[1].set_modes(std::vector<const DisplayMode*>(1, &big_mode_)); | 766 outputs_[1].set_modes(std::vector<const DisplayMode*>(1, &big_mode_)); |
| 767 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR); | 767 state_controller_.set_state(MULTIPLE_DISPLAY_STATE_DUAL_MIRROR); |
| 768 observer_.Reset(); | 768 observer_.Reset(); |
| 769 UpdateOutputs(2, true); | 769 UpdateOutputs(2, true); |
| 770 const int kDualHeight = small_mode_.size().height() + | 770 const int kDualHeight = small_mode_.size().height() + |
| 771 DisplayConfigurator::kVerticalGap + | 771 DisplayConfigurator::kVerticalGap + |
| 772 big_mode_.size().height(); | 772 big_mode_.size().height(); |
| 773 EXPECT_EQ( | 773 EXPECT_EQ( |
| 774 JoinActions( | 774 JoinActions( |
| 775 kGrab, | 775 kGrab, |
| 776 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), | 776 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), |
| 777 &outputs_[0], | 777 &outputs_[0], |
| 778 &outputs_[1]).c_str(), | 778 &outputs_[1]).c_str(), |
| 779 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 779 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 780 GetCrtcAction(outputs_[1], | 780 GetCrtcAction(outputs_[1], |
| 781 &big_mode_, | 781 &big_mode_, |
| 782 gfx::Point(0, | 782 gfx::Point(0, |
| 783 small_mode_.size().height() + | 783 small_mode_.size().height() + |
| 784 DisplayConfigurator::kVerticalGap)) | 784 DisplayConfigurator::kVerticalGap)) |
| 785 .c_str(), | 785 .c_str(), |
| 786 kUngrab, | 786 kUngrab, |
| 787 NULL), | 787 NULL), |
| 788 log_->GetActionsAndClear()); | 788 log_->GetActionsAndClear()); |
| 789 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, | 789 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, |
| 790 configurator_.display_state()); | 790 configurator_.display_state()); |
| 791 EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled()); | 791 EXPECT_TRUE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 792 EXPECT_EQ(1, observer_.num_changes()); | 792 EXPECT_EQ(1, observer_.num_changes()); |
| 793 | 793 |
| 794 // Turning off the internal display should switch the external display to | 794 // Turning off the internal display should switch the external display to |
| 795 // its native mode. | 795 // its native mode. |
| 796 observer_.Reset(); | 796 observer_.Reset(); |
| 797 configurator_.SetDisplayPower( | 797 configurator_.SetDisplayPower( |
| 798 chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, | 798 chromeos::DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON, |
| 799 DisplayConfigurator::kSetDisplayPowerNoFlags); | 799 DisplayConfigurator::kSetDisplayPowerNoFlags); |
| 800 EXPECT_EQ( | 800 EXPECT_EQ( |
| 801 JoinActions( | 801 JoinActions( |
| 802 kGrab, | 802 kGrab, |
| 803 GetFramebufferAction(big_mode_.size(), &outputs_[0], &outputs_[1]) | 803 GetFramebufferAction(big_mode_.size(), &outputs_[0], &outputs_[1]) |
| 804 .c_str(), | 804 .c_str(), |
| 805 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), | 805 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), |
| 806 GetCrtcAction(outputs_[1], &big_mode_, gfx::Point(0, 0)).c_str(), | 806 GetCrtcAction(outputs_[1], &big_mode_, gfx::Point(0, 0)).c_str(), |
| 807 kForceDPMS, | 807 kForceDPMS, |
| 808 kUngrab, | 808 kUngrab, |
| 809 NULL), | 809 NULL), |
| 810 log_->GetActionsAndClear()); | 810 log_->GetActionsAndClear()); |
| 811 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, configurator_.display_state()); | 811 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_SINGLE, configurator_.display_state()); |
| 812 EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled()); | 812 EXPECT_FALSE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 813 EXPECT_EQ(1, observer_.num_changes()); | 813 EXPECT_EQ(1, observer_.num_changes()); |
| 814 | 814 |
| 815 // When all displays are turned off, the framebuffer should switch back | 815 // When all displays are turned off, the framebuffer should switch back |
| 816 // to the extended + software mirroring. | 816 // to the extended + software mirroring. |
| 817 observer_.Reset(); | 817 observer_.Reset(); |
| 818 configurator_.SetDisplayPower(chromeos::DISPLAY_POWER_ALL_OFF, | 818 configurator_.SetDisplayPower(chromeos::DISPLAY_POWER_ALL_OFF, |
| 819 DisplayConfigurator::kSetDisplayPowerNoFlags); | 819 DisplayConfigurator::kSetDisplayPowerNoFlags); |
| 820 EXPECT_EQ( | 820 EXPECT_EQ( |
| 821 JoinActions( | 821 JoinActions( |
| 822 kGrab, | 822 kGrab, |
| 823 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), | 823 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), |
| 824 &outputs_[0], | 824 &outputs_[0], |
| 825 &outputs_[1]).c_str(), | 825 &outputs_[1]).c_str(), |
| 826 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), | 826 GetCrtcAction(outputs_[0], NULL, gfx::Point(0, 0)).c_str(), |
| 827 GetCrtcAction(outputs_[1], | 827 GetCrtcAction(outputs_[1], |
| 828 NULL, | 828 NULL, |
| 829 gfx::Point(0, | 829 gfx::Point(0, |
| 830 small_mode_.size().height() + | 830 small_mode_.size().height() + |
| 831 DisplayConfigurator::kVerticalGap)) | 831 DisplayConfigurator::kVerticalGap)) |
| 832 .c_str(), | 832 .c_str(), |
| 833 kUngrab, | 833 kUngrab, |
| 834 NULL), | 834 NULL), |
| 835 log_->GetActionsAndClear()); | 835 log_->GetActionsAndClear()); |
| 836 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, | 836 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, |
| 837 configurator_.display_state()); | 837 configurator_.display_state()); |
| 838 EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled()); | 838 EXPECT_TRUE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 839 EXPECT_EQ(1, observer_.num_changes()); | 839 EXPECT_EQ(1, observer_.num_changes()); |
| 840 | 840 |
| 841 // Turn all displays on and check that mirroring is still used. | 841 // Turn all displays on and check that mirroring is still used. |
| 842 observer_.Reset(); | 842 observer_.Reset(); |
| 843 configurator_.SetDisplayPower(chromeos::DISPLAY_POWER_ALL_ON, | 843 configurator_.SetDisplayPower(chromeos::DISPLAY_POWER_ALL_ON, |
| 844 DisplayConfigurator::kSetDisplayPowerNoFlags); | 844 DisplayConfigurator::kSetDisplayPowerNoFlags); |
| 845 EXPECT_EQ( | 845 EXPECT_EQ( |
| 846 JoinActions( | 846 JoinActions( |
| 847 kGrab, | 847 kGrab, |
| 848 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), | 848 GetFramebufferAction(gfx::Size(big_mode_.size().width(), kDualHeight), |
| 849 &outputs_[0], | 849 &outputs_[0], |
| 850 &outputs_[1]).c_str(), | 850 &outputs_[1]).c_str(), |
| 851 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), | 851 GetCrtcAction(outputs_[0], &small_mode_, gfx::Point(0, 0)).c_str(), |
| 852 GetCrtcAction(outputs_[1], | 852 GetCrtcAction(outputs_[1], |
| 853 &big_mode_, | 853 &big_mode_, |
| 854 gfx::Point(0, | 854 gfx::Point(0, |
| 855 small_mode_.size().height() + | 855 small_mode_.size().height() + |
| 856 DisplayConfigurator::kVerticalGap)) | 856 DisplayConfigurator::kVerticalGap)) |
| 857 .c_str(), | 857 .c_str(), |
| 858 kForceDPMS, | 858 kForceDPMS, |
| 859 kUngrab, | 859 kUngrab, |
| 860 NULL), | 860 NULL), |
| 861 log_->GetActionsAndClear()); | 861 log_->GetActionsAndClear()); |
| 862 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, | 862 EXPECT_EQ(MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED, |
| 863 configurator_.display_state()); | 863 configurator_.display_state()); |
| 864 EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled()); | 864 EXPECT_TRUE(mirroring_controller_.SoftwareMirroringEnabled()); |
| 865 EXPECT_EQ(1, observer_.num_changes()); | 865 EXPECT_EQ(1, observer_.num_changes()); |
| 866 } | 866 } |
| 867 | 867 |
| 868 TEST_F(DisplayConfiguratorTest, SuspendAndResume) { | 868 TEST_F(DisplayConfiguratorTest, SuspendAndResume) { |
| 869 InitWithSingleOutput(); | 869 InitWithSingleOutput(); |
| 870 | 870 |
| 871 // No preparation is needed before suspending when the display is already | 871 // No preparation is needed before suspending when the display is already |
| 872 // on. The configurator should still reprobe on resume in case a display | 872 // on. The configurator should still reprobe on resume in case a display |
| 873 // was connected while suspended. | 873 // was connected while suspended. |
| 874 configurator_.SuspendDisplays(); | 874 configurator_.SuspendDisplays(); |
| (...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1359 gfx::Point(0, | 1359 gfx::Point(0, |
| 1360 modes[0]->size().height() + | 1360 modes[0]->size().height() + |
| 1361 DisplayConfigurator::kVerticalGap)) | 1361 DisplayConfigurator::kVerticalGap)) |
| 1362 .c_str(), | 1362 .c_str(), |
| 1363 kUngrab, | 1363 kUngrab, |
| 1364 NULL), | 1364 NULL), |
| 1365 log_->GetActionsAndClear()); | 1365 log_->GetActionsAndClear()); |
| 1366 } | 1366 } |
| 1367 | 1367 |
| 1368 } // namespace ui | 1368 } // namespace ui |
| OLD | NEW |