| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ash/display/display_manager.h" | 5 #include "ash/display/display_manager.h" |
| 6 | 6 |
| 7 #include "ash/accelerators/accelerator_commands.h" | 7 #include "ash/accelerators/accelerator_commands.h" |
| 8 #include "ash/ash_switches.h" | 8 #include "ash/ash_switches.h" |
| 9 #include "ash/display/display_info.h" | 9 #include "ash/display/display_info.h" |
| 10 #include "ash/display/display_layout_store.h" | 10 #include "ash/display/display_layout_store.h" |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 651 | 651 |
| 652 UpdateDisplay("100+0-500x500,0+501-400x400"); | 652 UpdateDisplay("100+0-500x500,0+501-400x400"); |
| 653 | 653 |
| 654 const int64 primary_id = WindowTreeHostManager::GetPrimaryDisplayId(); | 654 const int64 primary_id = WindowTreeHostManager::GetPrimaryDisplayId(); |
| 655 const int64 secondary_id = ScreenUtil::GetSecondaryDisplay().id(); | 655 const int64 secondary_id = ScreenUtil::GetSecondaryDisplay().id(); |
| 656 | 656 |
| 657 DisplayInfo primary_info = display_manager()->GetDisplayInfo(primary_id); | 657 DisplayInfo primary_info = display_manager()->GetDisplayInfo(primary_id); |
| 658 DisplayInfo secondary_info = display_manager()->GetDisplayInfo(secondary_id); | 658 DisplayInfo secondary_info = display_manager()->GetDisplayInfo(secondary_id); |
| 659 | 659 |
| 660 // An id which is different from primary and secondary. | 660 // An id which is different from primary and secondary. |
| 661 const int64 third_id = primary_id + secondary_id; | 661 const int64 third_id = secondary_id + 1; |
| 662 | 662 |
| 663 DisplayInfo third_info = | 663 DisplayInfo third_info = |
| 664 CreateDisplayInfo(third_id, gfx::Rect(0, 0, 600, 600)); | 664 CreateDisplayInfo(third_id, gfx::Rect(0, 0, 600, 600)); |
| 665 | 665 |
| 666 std::vector<DisplayInfo> display_info_list; | 666 std::vector<DisplayInfo> display_info_list; |
| 667 display_info_list.push_back(third_info); | 667 display_info_list.push_back(third_info); |
| 668 display_info_list.push_back(secondary_info); | 668 display_info_list.push_back(secondary_info); |
| 669 display_manager()->OnNativeDisplaysChanged(display_info_list); | 669 display_manager()->OnNativeDisplaysChanged(display_info_list); |
| 670 | 670 |
| 671 // Secondary seconary_id becomes the primary as it has smaller output index. | 671 // Secondary seconary_id becomes the primary as it has smaller output index. |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1113 | 1113 |
| 1114 SetDisplayUIScale(display_id, 1.25f); | 1114 SetDisplayUIScale(display_id, 1.25f); |
| 1115 EXPECT_EQ(1.0f, GetDisplayInfoAt(0).GetEffectiveDeviceScaleFactor()); | 1115 EXPECT_EQ(1.0f, GetDisplayInfoAt(0).GetEffectiveDeviceScaleFactor()); |
| 1116 EXPECT_EQ(1.25f, GetDisplayInfoAt(0).GetEffectiveUIScale()); | 1116 EXPECT_EQ(1.25f, GetDisplayInfoAt(0).GetEffectiveUIScale()); |
| 1117 EXPECT_EQ("2400x1350", GetDisplayForId(display_id).size().ToString()); | 1117 EXPECT_EQ("2400x1350", GetDisplayForId(display_id).size().ToString()); |
| 1118 } | 1118 } |
| 1119 | 1119 |
| 1120 TEST_F(DisplayManagerTest, ResolutionChangeInUnifiedMode) { | 1120 TEST_F(DisplayManagerTest, ResolutionChangeInUnifiedMode) { |
| 1121 if (!SupportsMultipleDisplays()) | 1121 if (!SupportsMultipleDisplays()) |
| 1122 return; | 1122 return; |
| 1123 | |
| 1124 test::DisplayManagerTestApi::EnableUnifiedDesktopForTest(); | |
| 1125 | |
| 1126 // Don't check root window destruction in unified mode. | 1123 // Don't check root window destruction in unified mode. |
| 1127 Shell::GetPrimaryRootWindow()->RemoveObserver(this); | 1124 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
| 1128 | 1125 |
| 1129 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 1126 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 1127 display_manager->SetUnifiedDesktopEnabled(true); |
| 1130 | 1128 |
| 1131 UpdateDisplay("200x200, 400x400"); | 1129 UpdateDisplay("200x200, 400x400"); |
| 1132 | 1130 |
| 1133 int64 unified_id = Shell::GetScreen()->GetPrimaryDisplay().id(); | 1131 int64 unified_id = Shell::GetScreen()->GetPrimaryDisplay().id(); |
| 1134 DisplayInfo info = display_manager->GetDisplayInfo(unified_id); | 1132 DisplayInfo info = display_manager->GetDisplayInfo(unified_id); |
| 1135 ASSERT_EQ(2u, info.display_modes().size()); | 1133 ASSERT_EQ(2u, info.display_modes().size()); |
| 1136 EXPECT_EQ("400x200", info.display_modes()[0].size.ToString()); | 1134 EXPECT_EQ("400x200", info.display_modes()[0].size.ToString()); |
| 1137 EXPECT_TRUE(info.display_modes()[0].native); | 1135 EXPECT_TRUE(info.display_modes()[0].native); |
| 1138 EXPECT_EQ("800x400", info.display_modes()[1].size.ToString()); | 1136 EXPECT_EQ("800x400", info.display_modes()[1].size.ToString()); |
| 1139 EXPECT_FALSE(info.display_modes()[1].native); | 1137 EXPECT_FALSE(info.display_modes()[1].native); |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1513 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 1511 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
| 1514 EXPECT_EQ("100,200", host0->GetBounds().origin().ToString()); | 1512 EXPECT_EQ("100,200", host0->GetBounds().origin().ToString()); |
| 1515 EXPECT_EQ("100x200", host0->GetBounds().size().ToString()); | 1513 EXPECT_EQ("100x200", host0->GetBounds().size().ToString()); |
| 1516 EXPECT_EQ("300,500", host1->GetBounds().origin().ToString()); | 1514 EXPECT_EQ("300,500", host1->GetBounds().origin().ToString()); |
| 1517 EXPECT_EQ("200x300", host1->GetBounds().size().ToString()); | 1515 EXPECT_EQ("200x300", host1->GetBounds().size().ToString()); |
| 1518 } | 1516 } |
| 1519 | 1517 |
| 1520 TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { | 1518 TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { |
| 1521 if (!SupportsMultipleDisplays()) | 1519 if (!SupportsMultipleDisplays()) |
| 1522 return; | 1520 return; |
| 1523 test::DisplayManagerTestApi::EnableUnifiedDesktopForTest(); | |
| 1524 | 1521 |
| 1525 // Don't check root window destruction in unified mode. | 1522 // Don't check root window destruction in unified mode. |
| 1526 Shell::GetPrimaryRootWindow()->RemoveObserver(this); | 1523 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
| 1527 | 1524 |
| 1528 UpdateDisplay("400x500,300x200"); | 1525 UpdateDisplay("400x500,300x200"); |
| 1529 | 1526 |
| 1527 // Enable after extended mode. |
| 1528 display_manager()->SetUnifiedDesktopEnabled(true); |
| 1529 |
| 1530 // Defaults to the unified desktop. | 1530 // Defaults to the unified desktop. |
| 1531 gfx::Screen* screen = | 1531 gfx::Screen* screen = |
| 1532 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); | 1532 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
| 1533 // The 2nd display is scaled so that it has the same height as 1st display. | 1533 // The 2nd display is scaled so that it has the same height as 1st display. |
| 1534 // 300 * 500 / 200 + 400 = 1150. | 1534 // 300 * 500 / 200 + 400 = 1150. |
| 1535 EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); | 1535 EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1536 | 1536 |
| 1537 display_manager()->SetMirrorMode(true); | 1537 display_manager()->SetMirrorMode(true); |
| 1538 EXPECT_EQ("400x500", screen->GetPrimaryDisplay().size().ToString()); | 1538 EXPECT_EQ("400x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1539 | 1539 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1555 display_info_list.push_back( | 1555 display_info_list.push_back( |
| 1556 CreateDisplayInfo(11, gfx::Rect(500, 0, 400, 500))); | 1556 CreateDisplayInfo(11, gfx::Rect(500, 0, 400, 500))); |
| 1557 { | 1557 { |
| 1558 test::ScopedSetInternalDisplayId set_internal(11); | 1558 test::ScopedSetInternalDisplayId set_internal(11); |
| 1559 display_manager()->OnNativeDisplaysChanged(display_info_list); | 1559 display_manager()->OnNativeDisplaysChanged(display_info_list); |
| 1560 // 500 * 500 / 300 + 400 ~= 1233. | 1560 // 500 * 500 / 300 + 400 ~= 1233. |
| 1561 EXPECT_EQ("1233x500", screen->GetPrimaryDisplay().size().ToString()); | 1561 EXPECT_EQ("1233x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1562 } | 1562 } |
| 1563 | 1563 |
| 1564 // Switch back to extended desktop. | 1564 // Switch back to extended desktop. |
| 1565 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::EXTENDED); | 1565 display_manager()->SetUnifiedDesktopEnabled(false); |
| 1566 display_manager()->ReconfigureDisplays(); | |
| 1567 EXPECT_EQ("500x300", screen->GetPrimaryDisplay().size().ToString()); | 1566 EXPECT_EQ("500x300", screen->GetPrimaryDisplay().size().ToString()); |
| 1568 EXPECT_EQ("400x500", ScreenUtil::GetSecondaryDisplay().size().ToString()); | 1567 EXPECT_EQ("400x500", ScreenUtil::GetSecondaryDisplay().size().ToString()); |
| 1569 } | 1568 } |
| 1570 | 1569 |
| 1570 TEST_F(DisplayManagerTest, UnifiedDesktopEnabledWithExtended) { |
| 1571 if (!SupportsMultipleDisplays()) |
| 1572 return; |
| 1573 // Don't check root window destruction in unified mode. |
| 1574 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
| 1575 |
| 1576 UpdateDisplay("400x500,300x200"); |
| 1577 DisplayIdPair pair = display_manager()->GetCurrentDisplayIdPair(); |
| 1578 DisplayLayout layout = |
| 1579 display_manager()->layout_store()->GetRegisteredDisplayLayout(pair); |
| 1580 layout.default_unified = false; |
| 1581 display_manager()->layout_store()->RegisterLayoutForDisplayIdPair( |
| 1582 pair.first, pair.second, layout); |
| 1583 display_manager()->SetUnifiedDesktopEnabled(true); |
| 1584 EXPECT_FALSE(display_manager()->IsInUnifiedMode()); |
| 1585 } |
| 1586 |
| 1571 TEST_F(DisplayManagerTest, UnifiedDesktopWith2xDSF) { | 1587 TEST_F(DisplayManagerTest, UnifiedDesktopWith2xDSF) { |
| 1572 if (!SupportsMultipleDisplays()) | 1588 if (!SupportsMultipleDisplays()) |
| 1573 return; | 1589 return; |
| 1574 // Don't check root window destruction in unified mode. | 1590 // Don't check root window destruction in unified mode. |
| 1575 Shell::GetPrimaryRootWindow()->RemoveObserver(this); | 1591 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
| 1576 | 1592 |
| 1577 test::DisplayManagerTestApi::EnableUnifiedDesktopForTest(); | 1593 display_manager()->SetUnifiedDesktopEnabled(true); |
| 1578 gfx::Screen* screen = | 1594 gfx::Screen* screen = |
| 1579 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); | 1595 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
| 1580 | 1596 |
| 1581 // 2nd display is 2x. | 1597 // 2nd display is 2x. |
| 1582 UpdateDisplay("400x500,1000x800*2"); | 1598 UpdateDisplay("400x500,1000x800*2"); |
| 1583 DisplayInfo info = | 1599 DisplayInfo info = |
| 1584 display_manager()->GetDisplayInfo(screen->GetPrimaryDisplay().id()); | 1600 display_manager()->GetDisplayInfo(screen->GetPrimaryDisplay().id()); |
| 1585 EXPECT_EQ(2u, info.display_modes().size()); | 1601 EXPECT_EQ(2u, info.display_modes().size()); |
| 1586 EXPECT_EQ("1640x800", info.display_modes()[0].size.ToString()); | 1602 EXPECT_EQ("1640x800", info.display_modes()[0].size.ToString()); |
| 1587 EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor); | 1603 EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1683 // Mirror windows are created in a posted task. | 1699 // Mirror windows are created in a posted task. |
| 1684 RunAllPendingInMessageLoop(); | 1700 RunAllPendingInMessageLoop(); |
| 1685 | 1701 |
| 1686 UpdateDisplay("300x250,400x550"); | 1702 UpdateDisplay("300x250,400x550"); |
| 1687 RunAllPendingInMessageLoop(); | 1703 RunAllPendingInMessageLoop(); |
| 1688 } | 1704 } |
| 1689 | 1705 |
| 1690 TEST_F(DisplayManagerTest, NoRotateUnifiedDesktop) { | 1706 TEST_F(DisplayManagerTest, NoRotateUnifiedDesktop) { |
| 1691 if (!SupportsMultipleDisplays()) | 1707 if (!SupportsMultipleDisplays()) |
| 1692 return; | 1708 return; |
| 1693 test::DisplayManagerTestApi::EnableUnifiedDesktopForTest(); | 1709 display_manager()->SetUnifiedDesktopEnabled(true); |
| 1694 | 1710 |
| 1695 // Don't check root window destruction in unified mode. | 1711 // Don't check root window destruction in unified mode. |
| 1696 Shell::GetPrimaryRootWindow()->RemoveObserver(this); | 1712 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
| 1697 | 1713 |
| 1698 UpdateDisplay("400x500,300x200"); | 1714 UpdateDisplay("400x500,300x200"); |
| 1699 | 1715 |
| 1700 gfx::Screen* screen = | 1716 gfx::Screen* screen = |
| 1701 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); | 1717 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
| 1702 const gfx::Display& display = screen->GetPrimaryDisplay(); | 1718 const gfx::Display& display = screen->GetPrimaryDisplay(); |
| 1703 EXPECT_EQ("1150x500", display.size().ToString()); | 1719 EXPECT_EQ("1150x500", display.size().ToString()); |
| 1704 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_90, | 1720 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_90, |
| 1705 gfx::Display::ROTATION_SOURCE_ACTIVE); | 1721 gfx::Display::ROTATION_SOURCE_ACTIVE); |
| 1706 EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); | 1722 EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1707 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_0, | 1723 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_0, |
| 1708 gfx::Display::ROTATION_SOURCE_ACTIVE); | 1724 gfx::Display::ROTATION_SOURCE_ACTIVE); |
| 1709 EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); | 1725 EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1710 | 1726 |
| 1711 UpdateDisplay("400x500"); | 1727 UpdateDisplay("400x500"); |
| 1712 EXPECT_EQ("400x500", screen->GetPrimaryDisplay().size().ToString()); | 1728 EXPECT_EQ("400x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1713 } | 1729 } |
| 1714 | 1730 |
| 1715 // Makes sure the transition from unified to single won't crash | 1731 // Makes sure the transition from unified to single won't crash |
| 1716 // with docked windows. | 1732 // with docked windows. |
| 1717 TEST_F(DisplayManagerTest, UnifiedWithDockWindows) { | 1733 TEST_F(DisplayManagerTest, UnifiedWithDockWindows) { |
| 1718 if (!SupportsMultipleDisplays()) | 1734 if (!SupportsMultipleDisplays()) |
| 1719 return; | 1735 return; |
| 1720 test::DisplayManagerTestApi::EnableUnifiedDesktopForTest(); | 1736 display_manager()->SetUnifiedDesktopEnabled(true); |
| 1721 | 1737 |
| 1722 // Don't check root window destruction in unified mode. | 1738 // Don't check root window destruction in unified mode. |
| 1723 Shell::GetPrimaryRootWindow()->RemoveObserver(this); | 1739 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
| 1724 | 1740 |
| 1725 UpdateDisplay("400x500,300x200"); | 1741 UpdateDisplay("400x500,300x200"); |
| 1726 | 1742 |
| 1727 scoped_ptr<aura::Window> docked( | 1743 scoped_ptr<aura::Window> docked( |
| 1728 CreateTestWindowInShellWithBounds(gfx::Rect(10, 10, 50, 50))); | 1744 CreateTestWindowInShellWithBounds(gfx::Rect(10, 10, 50, 50))); |
| 1729 docked->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_DOCKED); | 1745 docked->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_DOCKED); |
| 1730 ASSERT_TRUE(wm::GetWindowState(docked.get())->IsDocked()); | 1746 ASSERT_TRUE(wm::GetWindowState(docked.get())->IsDocked()); |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1900 | 1916 |
| 1901 EXPECT_EQ(gfx::Display::ROTATE_90, | 1917 EXPECT_EQ(gfx::Display::ROTATE_90, |
| 1902 info.GetRotation(gfx::Display::ROTATION_SOURCE_USER)); | 1918 info.GetRotation(gfx::Display::ROTATION_SOURCE_USER)); |
| 1903 EXPECT_EQ(gfx::Display::ROTATE_90, | 1919 EXPECT_EQ(gfx::Display::ROTATE_90, |
| 1904 info.GetRotation(gfx::Display::ROTATION_SOURCE_ACTIVE)); | 1920 info.GetRotation(gfx::Display::ROTATION_SOURCE_ACTIVE)); |
| 1905 } | 1921 } |
| 1906 | 1922 |
| 1907 #endif // OS_CHROMEOS | 1923 #endif // OS_CHROMEOS |
| 1908 | 1924 |
| 1909 } // namespace ash | 1925 } // namespace ash |
| OLD | NEW |