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/ash_switches.h" | 7 #include "ash/ash_switches.h" |
8 #include "ash/display/display_controller.h" | 8 #include "ash/display/display_controller.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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 } | 114 } |
115 void OnDisplayAdded(const gfx::Display& new_display) override { | 115 void OnDisplayAdded(const gfx::Display& new_display) override { |
116 added_.push_back(new_display); | 116 added_.push_back(new_display); |
117 } | 117 } |
118 void OnDisplayRemoved(const gfx::Display& old_display) override { | 118 void OnDisplayRemoved(const gfx::Display& old_display) override { |
119 ++removed_count_; | 119 ++removed_count_; |
120 } | 120 } |
121 | 121 |
122 // aura::WindowObserver overrides: | 122 // aura::WindowObserver overrides: |
123 void OnWindowDestroying(aura::Window* window) override { | 123 void OnWindowDestroying(aura::Window* window) override { |
124 ASSERT_EQ(Shell::GetPrimaryRootWindow(), window); | 124 // TODO(oshima): When moving between unified desktop, the |
125 root_window_destroyed_ = true; | 125 // primary root window can be deleted. |
| 126 if (!display_manager()->IsInUnifiedMode()) { |
| 127 ASSERT_EQ(Shell::GetPrimaryRootWindow(), window); |
| 128 root_window_destroyed_ = true; |
| 129 } |
126 } | 130 } |
127 | 131 |
128 private: | 132 private: |
129 vector<gfx::Display> changed_; | 133 vector<gfx::Display> changed_; |
130 vector<gfx::Display> added_; | 134 vector<gfx::Display> added_; |
131 size_t removed_count_; | 135 size_t removed_count_; |
132 bool root_window_destroyed_; | 136 bool root_window_destroyed_; |
133 uint32_t changed_metrics_; | 137 uint32_t changed_metrics_; |
134 | 138 |
135 DISALLOW_COPY_AND_ASSIGN(DisplayManagerTest); | 139 DISALLOW_COPY_AND_ASSIGN(DisplayManagerTest); |
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
622 display_info_list.clear(); | 626 display_info_list.clear(); |
623 display_info_list.push_back(external_display_info); | 627 display_info_list.push_back(external_display_info); |
624 display_manager()->OnNativeDisplaysChanged(display_info_list); | 628 display_manager()->OnNativeDisplaysChanged(display_info_list); |
625 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 629 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
626 EXPECT_EQ(invalid_id, GetDisplayForId(internal_display_id).id()); | 630 EXPECT_EQ(invalid_id, GetDisplayForId(internal_display_id).id()); |
627 EXPECT_EQ("1,1 100x100", | 631 EXPECT_EQ("1,1 100x100", |
628 GetDisplayInfoForId(external_id).bounds_in_native().ToString()); | 632 GetDisplayInfoForId(external_id).bounds_in_native().ToString()); |
629 EXPECT_EQ(1U, display_manager()->num_connected_displays()); | 633 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
630 EXPECT_FALSE(display_manager()->IsInMirrorMode()); | 634 EXPECT_FALSE(display_manager()->IsInMirrorMode()); |
631 | 635 |
| 636 LOG(ERROR) << "============"; |
632 // Switched to another display | 637 // Switched to another display |
633 display_info_list.clear(); | 638 display_info_list.clear(); |
634 display_info_list.push_back(internal_display_info); | 639 display_info_list.push_back(internal_display_info); |
635 display_manager()->OnNativeDisplaysChanged(display_info_list); | 640 display_manager()->OnNativeDisplaysChanged(display_info_list); |
636 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 641 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
637 EXPECT_EQ( | 642 EXPECT_EQ( |
638 "0,0 500x500", | 643 "0,0 500x500", |
639 GetDisplayInfoForId(internal_display_id).bounds_in_native().ToString()); | 644 GetDisplayInfoForId(internal_display_id).bounds_in_native().ToString()); |
640 EXPECT_EQ(1U, display_manager()->num_connected_displays()); | 645 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
641 EXPECT_FALSE(display_manager()->IsInMirrorMode()); | 646 EXPECT_FALSE(display_manager()->IsInMirrorMode()); |
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1200 | 1205 |
1201 UpdateDisplay("300x400,400x500"); | 1206 UpdateDisplay("300x400,400x500"); |
1202 | 1207 |
1203 test::MirrorWindowTestApi test_api; | 1208 test::MirrorWindowTestApi test_api; |
1204 EXPECT_EQ(NULL, test_api.GetHost()); | 1209 EXPECT_EQ(NULL, test_api.GetHost()); |
1205 | 1210 |
1206 TestDisplayObserver display_observer; | 1211 TestDisplayObserver display_observer; |
1207 Shell::GetScreen()->AddObserver(&display_observer); | 1212 Shell::GetScreen()->AddObserver(&display_observer); |
1208 | 1213 |
1209 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 1214 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
1210 display_manager->SetSecondDisplayMode(DisplayManager::MIRRORING); | 1215 display_manager->SetMultiDisplayMode(DisplayManager::MIRRORING); |
1211 display_manager->UpdateDisplays(); | 1216 display_manager->UpdateDisplays(); |
1212 RunAllPendingInMessageLoop(); | 1217 RunAllPendingInMessageLoop(); |
1213 EXPECT_TRUE(display_observer.changed_and_reset()); | 1218 EXPECT_TRUE(display_observer.changed_and_reset()); |
1214 EXPECT_EQ(1U, display_manager->GetNumDisplays()); | 1219 EXPECT_EQ(1U, display_manager->GetNumDisplays()); |
1215 EXPECT_EQ("0,0 300x400", | 1220 EXPECT_EQ("0,0 300x400", |
1216 Shell::GetScreen()->GetPrimaryDisplay().bounds().ToString()); | 1221 Shell::GetScreen()->GetPrimaryDisplay().bounds().ToString()); |
1217 EXPECT_EQ("400x500", test_api.GetHost()->GetBounds().size().ToString()); | 1222 EXPECT_EQ("400x500", test_api.GetHost()->GetBounds().size().ToString()); |
1218 EXPECT_EQ("300x400", | 1223 EXPECT_EQ("300x400", |
1219 test_api.GetHost()->window()->bounds().size().ToString()); | 1224 test_api.GetHost()->window()->bounds().size().ToString()); |
1220 EXPECT_TRUE(display_manager->IsInMirrorMode()); | 1225 EXPECT_TRUE(display_manager->IsInMirrorMode()); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1258 | 1263 |
1259 Shell::GetScreen()->RemoveObserver(&display_observer); | 1264 Shell::GetScreen()->RemoveObserver(&display_observer); |
1260 } | 1265 } |
1261 | 1266 |
1262 TEST_F(DisplayManagerTest, SingleDisplayToSoftwareMirroring) { | 1267 TEST_F(DisplayManagerTest, SingleDisplayToSoftwareMirroring) { |
1263 if (!SupportsMultipleDisplays()) | 1268 if (!SupportsMultipleDisplays()) |
1264 return; | 1269 return; |
1265 UpdateDisplay("600x400"); | 1270 UpdateDisplay("600x400"); |
1266 | 1271 |
1267 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 1272 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
1268 display_manager->SetSecondDisplayMode(DisplayManager::MIRRORING); | 1273 display_manager->SetMultiDisplayMode(DisplayManager::MIRRORING); |
1269 UpdateDisplay("600x400,600x400"); | 1274 UpdateDisplay("600x400,600x400"); |
1270 | 1275 |
1271 EXPECT_TRUE(display_manager->IsInMirrorMode()); | 1276 EXPECT_TRUE(display_manager->IsInMirrorMode()); |
1272 EXPECT_EQ(1U, display_manager->GetNumDisplays()); | 1277 EXPECT_EQ(1U, display_manager->GetNumDisplays()); |
1273 DisplayController* display_controller = | 1278 DisplayController* display_controller = |
1274 ash::Shell::GetInstance()->display_controller(); | 1279 ash::Shell::GetInstance()->display_controller(); |
1275 EXPECT_TRUE(display_controller->mirror_window_controller()->GetWindow()); | 1280 EXPECT_TRUE(display_controller->mirror_window_controller()->GetWindow()); |
1276 | 1281 |
1277 UpdateDisplay("600x400"); | 1282 UpdateDisplay("600x400"); |
1278 EXPECT_FALSE(display_manager->IsInMirrorMode()); | 1283 EXPECT_FALSE(display_manager->IsInMirrorMode()); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1451 EXPECT_EQ("300x400", host1->GetBounds().size().ToString()); | 1456 EXPECT_EQ("300x400", host1->GetBounds().size().ToString()); |
1452 | 1457 |
1453 UpdateDisplay("100+200-100x200,300+500-200x300"); | 1458 UpdateDisplay("100+200-100x200,300+500-200x300"); |
1454 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 1459 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
1455 EXPECT_EQ("100,200", host0->GetBounds().origin().ToString()); | 1460 EXPECT_EQ("100,200", host0->GetBounds().origin().ToString()); |
1456 EXPECT_EQ("100x200", host0->GetBounds().size().ToString()); | 1461 EXPECT_EQ("100x200", host0->GetBounds().size().ToString()); |
1457 EXPECT_EQ("300,500", host1->GetBounds().origin().ToString()); | 1462 EXPECT_EQ("300,500", host1->GetBounds().origin().ToString()); |
1458 EXPECT_EQ("200x300", host1->GetBounds().size().ToString()); | 1463 EXPECT_EQ("200x300", host1->GetBounds().size().ToString()); |
1459 } | 1464 } |
1460 | 1465 |
| 1466 #if !defined(OS_WIN) && defined(USE_X11) |
| 1467 |
| 1468 TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { |
| 1469 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::UNIFIED); |
| 1470 display_manager()->SetMultiDisplayMode(DisplayManager::UNIFIED); |
| 1471 UpdateDisplay("300x200,400x500"); |
| 1472 |
| 1473 gfx::Screen* screen = |
| 1474 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
| 1475 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1476 |
| 1477 display_manager()->SetMirrorMode(true); |
| 1478 EXPECT_EQ("300x200", screen->GetPrimaryDisplay().size().ToString()); |
| 1479 |
| 1480 display_manager()->SetMirrorMode(false); |
| 1481 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1482 } |
| 1483 |
| 1484 #endif |
| 1485 |
1461 class ScreenShutdownTest : public test::AshTestBase { | 1486 class ScreenShutdownTest : public test::AshTestBase { |
1462 public: | 1487 public: |
1463 ScreenShutdownTest() { | 1488 ScreenShutdownTest() { |
1464 } | 1489 } |
1465 ~ScreenShutdownTest() override {} | 1490 ~ScreenShutdownTest() override {} |
1466 | 1491 |
1467 void TearDown() override { | 1492 void TearDown() override { |
1468 gfx::Screen* orig_screen = | 1493 gfx::Screen* orig_screen = |
1469 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); | 1494 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
1470 AshTestBase::TearDown(); | 1495 AshTestBase::TearDown(); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1612 1.25f, Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor()); | 1637 1.25f, Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor()); |
1613 EXPECT_TRUE(IsTextSubpixelPositioningEnabled()); | 1638 EXPECT_TRUE(IsTextSubpixelPositioningEnabled()); |
1614 EXPECT_EQ(gfx::FontRenderParams::HINTING_NONE, GetFontHintingParams()); | 1639 EXPECT_EQ(gfx::FontRenderParams::HINTING_NONE, GetFontHintingParams()); |
1615 | 1640 |
1616 DisplayInfo::SetUse125DSFForUIScaling(false); | 1641 DisplayInfo::SetUse125DSFForUIScaling(false); |
1617 } | 1642 } |
1618 | 1643 |
1619 #endif // OS_CHROMEOS | 1644 #endif // OS_CHROMEOS |
1620 | 1645 |
1621 } // namespace ash | 1646 } // namespace ash |
OLD | NEW |