Index: ash/display/display_manager_unittest.cc |
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc |
index ee87a58635cf9f72dd9b5a18d844a6fe26a8d1b0..ca7be6025723c89eeeb17c9910663583fa2b53e3 100644 |
--- a/ash/display/display_manager_unittest.cc |
+++ b/ash/display/display_manager_unittest.cc |
@@ -4,6 +4,7 @@ |
#include "ash/display/display_manager.h" |
+#include "ash/accelerators/accelerator_commands.h" |
#include "ash/ash_switches.h" |
#include "ash/display/display_info.h" |
#include "ash/display/display_layout_store.h" |
@@ -1132,28 +1133,31 @@ TEST_F(DisplayManagerTest, ResolutionChangeInUnifiedMode) { |
DisplayInfo info = display_manager->GetDisplayInfo(unified_id); |
ASSERT_EQ(2u, info.display_modes().size()); |
EXPECT_EQ("400x200", info.display_modes()[0].size.ToString()); |
+ EXPECT_TRUE(info.display_modes()[0].native); |
EXPECT_EQ("800x400", info.display_modes()[1].size.ToString()); |
- EXPECT_EQ("800x400", |
+ EXPECT_FALSE(info.display_modes()[1].native); |
+ EXPECT_EQ("400x200", |
Shell::GetScreen()->GetPrimaryDisplay().size().ToString()); |
DisplayMode active_mode = |
display_manager->GetActiveModeForDisplayId(unified_id); |
EXPECT_EQ(1.0f, active_mode.ui_scale); |
- EXPECT_EQ("800x400", active_mode.size.ToString()); |
+ EXPECT_EQ("400x200", active_mode.size.ToString()); |
- EXPECT_TRUE(test::SetDisplayResolution(unified_id, gfx::Size(400, 200))); |
- EXPECT_EQ("400x200", |
+ EXPECT_TRUE(test::SetDisplayResolution(unified_id, gfx::Size(800, 400))); |
+ EXPECT_EQ("800x400", |
Shell::GetScreen()->GetPrimaryDisplay().size().ToString()); |
active_mode = display_manager->GetActiveModeForDisplayId(unified_id); |
EXPECT_EQ(1.0f, active_mode.ui_scale); |
- EXPECT_EQ("400x200", active_mode.size.ToString()); |
+ EXPECT_EQ("800x400", active_mode.size.ToString()); |
// resolution change will not persist in unified desktop mode. |
- UpdateDisplay("200x200, 600x600"); |
+ UpdateDisplay("600x600, 200x200"); |
EXPECT_EQ("1200x600", |
Shell::GetScreen()->GetPrimaryDisplay().size().ToString()); |
active_mode = display_manager->GetActiveModeForDisplayId(unified_id); |
EXPECT_EQ(1.0f, active_mode.ui_scale); |
+ EXPECT_TRUE(active_mode.native); |
EXPECT_EQ("1200x600", active_mode.size.ToString()); |
} |
@@ -1520,17 +1524,17 @@ TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { |
// Don't check root window destruction in unified mode. |
Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
- UpdateDisplay("300x200,400x500"); |
+ UpdateDisplay("400x500,300x200"); |
// Defaults to the unified desktop. |
gfx::Screen* screen = |
gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
- // The 1st display is scaled so that it has the same height as 2nd display. |
+ // The 2nd display is scaled so that it has the same height as 1st display. |
// 300 * 500 / 200 + 400 = 1150. |
EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); |
display_manager()->SetMirrorMode(true); |
- EXPECT_EQ("300x200", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("400x500", screen->GetPrimaryDisplay().size().ToString()); |
display_manager()->SetMirrorMode(false); |
EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); |
@@ -1541,8 +1545,20 @@ TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { |
// Switch to unified desktop. |
UpdateDisplay("500x300,400x500"); |
- // 500 * 500 / 300 + 400 ~= 1233. |
- EXPECT_EQ("1233x500", screen->GetPrimaryDisplay().size().ToString()); |
+ // 400 * 300 / 500 + 500 ~= 739. |
+ EXPECT_EQ("739x300", screen->GetPrimaryDisplay().size().ToString()); |
+ |
+ // The default should fit to the internal display. |
+ std::vector<DisplayInfo> display_info_list; |
+ display_info_list.push_back(CreateDisplayInfo(10, gfx::Rect(0, 0, 500, 300))); |
+ display_info_list.push_back( |
+ CreateDisplayInfo(11, gfx::Rect(500, 0, 400, 500))); |
+ { |
+ test::ScopedSetInternalDisplayId set_internal(11); |
+ display_manager()->OnNativeDisplaysChanged(display_info_list); |
+ // 500 * 500 / 300 + 400 ~= 1233. |
+ EXPECT_EQ("1233x500", screen->GetPrimaryDisplay().size().ToString()); |
+ } |
// Switch back to extended desktop. |
display_manager()->SetDefaultMultiDisplayMode(DisplayManager::EXTENDED); |
@@ -1551,6 +1567,109 @@ TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { |
EXPECT_EQ("400x500", ScreenUtil::GetSecondaryDisplay().size().ToString()); |
} |
+TEST_F(DisplayManagerTest, UnifiedDesktopWith2xDSF) { |
+ if (!SupportsMultipleDisplays()) |
+ return; |
+ // Don't check root window destruction in unified mode. |
+ Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
+ |
+ test::DisplayManagerTestApi::EnableUnifiedDesktopForTest(); |
+ gfx::Screen* screen = |
+ gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
+ |
+ // 2nd display is 2x. |
+ UpdateDisplay("400x500,1000x800*2"); |
+ DisplayInfo info = |
+ display_manager()->GetDisplayInfo(screen->GetPrimaryDisplay().id()); |
+ EXPECT_EQ(2u, info.display_modes().size()); |
+ EXPECT_EQ("1640x800", info.display_modes()[0].size.ToString()); |
+ EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor); |
+ EXPECT_EQ("1025x500", info.display_modes()[1].size.ToString()); |
+ EXPECT_EQ(1.0f, info.display_modes()[1].device_scale_factor); |
+ |
+ // For 1x, 400 + 500 / 800 * 100 = 1025. |
+ EXPECT_EQ("1025x500", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("1025x500", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ accelerators::ZoomInternalDisplay(false); |
+ // (800 / 500 * 400 + 500) /2 = 820 |
+ EXPECT_EQ("820x400", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("820x400", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ |
+ // 1st display is 2x. |
+ UpdateDisplay("1200x800*2,1000x1000"); |
+ info = display_manager()->GetDisplayInfo(screen->GetPrimaryDisplay().id()); |
+ EXPECT_EQ(2u, info.display_modes().size()); |
+ EXPECT_EQ("2000x800", info.display_modes()[0].size.ToString()); |
+ EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor); |
+ EXPECT_EQ("2500x1000", info.display_modes()[1].size.ToString()); |
+ EXPECT_EQ(1.0f, info.display_modes()[1].device_scale_factor); |
+ |
+ // For 2x, (800 / 1000 * 1000 + 1200) / 2 = 1000 |
+ EXPECT_EQ("1000x400", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("1000x400", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ accelerators::ZoomInternalDisplay(true); |
+ // 1000 / 800 * 1200 + 1000 = 2500 |
+ EXPECT_EQ("2500x1000", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("2500x1000", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ |
+ // Both displays are 2x. |
+ // 1st display is 2x. |
+ UpdateDisplay("1200x800*2,1000x1000*2"); |
+ info = display_manager()->GetDisplayInfo(screen->GetPrimaryDisplay().id()); |
+ EXPECT_EQ(2u, info.display_modes().size()); |
+ EXPECT_EQ("2000x800", info.display_modes()[0].size.ToString()); |
+ EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor); |
+ EXPECT_EQ("2500x1000", info.display_modes()[1].size.ToString()); |
+ EXPECT_EQ(2.0f, info.display_modes()[1].device_scale_factor); |
+ |
+ EXPECT_EQ("1000x400", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("1000x400", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ accelerators::ZoomInternalDisplay(true); |
+ EXPECT_EQ("1250x500", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("1250x500", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ |
+ // Both displays have the same physical height, with the first display |
+ // being 2x. |
+ UpdateDisplay("1000x800*2,300x800"); |
+ info = display_manager()->GetDisplayInfo(screen->GetPrimaryDisplay().id()); |
+ EXPECT_EQ(2u, info.display_modes().size()); |
+ EXPECT_EQ("1300x800", info.display_modes()[0].size.ToString()); |
+ EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor); |
+ EXPECT_EQ("1300x800", info.display_modes()[1].size.ToString()); |
+ EXPECT_EQ(1.0f, info.display_modes()[1].device_scale_factor); |
+ |
+ EXPECT_EQ("650x400", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("650x400", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ accelerators::ZoomInternalDisplay(true); |
+ EXPECT_EQ("1300x800", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("1300x800", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ |
+ // Both displays have the same physical height, with the second display |
+ // being 2x. |
+ UpdateDisplay("1000x800,300x800*2"); |
+ EXPECT_EQ(2u, info.display_modes().size()); |
+ EXPECT_EQ("1300x800", info.display_modes()[0].size.ToString()); |
+ EXPECT_EQ(2.0f, info.display_modes()[0].device_scale_factor); |
+ EXPECT_EQ("1300x800", info.display_modes()[1].size.ToString()); |
+ EXPECT_EQ(1.0f, info.display_modes()[1].device_scale_factor); |
+ |
+ EXPECT_EQ("1300x800", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("1300x800", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+ accelerators::ZoomInternalDisplay(false); |
+ EXPECT_EQ("650x400", screen->GetPrimaryDisplay().size().ToString()); |
+ EXPECT_EQ("650x400", |
+ Shell::GetPrimaryRootWindow()->bounds().size().ToString()); |
+} |
+ |
// Updating displays again in unified desktop mode should not crash. |
// crbug.com/491094. |
TEST_F(DisplayManagerTest, ConfigureUnifiedTwice) { |
@@ -1575,7 +1694,7 @@ TEST_F(DisplayManagerTest, NoRotateUnifiedDesktop) { |
// Don't check root window destruction in unified mode. |
Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
- UpdateDisplay("300x200,400x500"); |
+ UpdateDisplay("400x500,300x200"); |
gfx::Screen* screen = |
gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
@@ -1588,8 +1707,8 @@ TEST_F(DisplayManagerTest, NoRotateUnifiedDesktop) { |
gfx::Display::ROTATION_SOURCE_ACTIVE); |
EXPECT_EQ("1150x500", screen->GetPrimaryDisplay().size().ToString()); |
- UpdateDisplay("300x200"); |
- EXPECT_EQ("300x200", screen->GetPrimaryDisplay().size().ToString()); |
+ UpdateDisplay("400x500"); |
+ EXPECT_EQ("400x500", screen->GetPrimaryDisplay().size().ToString()); |
} |
// Makes sure the transition from unified to single won't crash |
@@ -1602,7 +1721,7 @@ TEST_F(DisplayManagerTest, UnifiedWithDockWindows) { |
// Don't check root window destruction in unified mode. |
Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
- UpdateDisplay("300x200,400x500"); |
+ UpdateDisplay("400x500,300x200"); |
scoped_ptr<aura::Window> docked( |
CreateTestWindowInShellWithBounds(gfx::Rect(10, 10, 50, 50))); |