| 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 "ui/display/manager/chromeos/display_change_observer.h" | 5 #include "ui/display/manager/chromeos/display_change_observer.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "ui/display/fake_display_snapshot.h" | 11 #include "ui/display/fake_display_snapshot.h" |
| 12 #include "ui/display/manager/chromeos/display_configurator.h" | 12 #include "ui/display/manager/chromeos/display_configurator.h" |
| 13 #include "ui/display/manager/managed_display_info.h" | 13 #include "ui/display/manager/managed_display_info.h" |
| 14 #include "ui/display/types/display_mode.h" | 14 #include "ui/display/types/display_mode.h" |
| 15 #include "ui/gfx/geometry/rect.h" | 15 #include "ui/gfx/geometry/rect.h" |
| 16 #include "ui/gfx/geometry/size.h" | 16 #include "ui/gfx/geometry/size.h" |
| 17 | 17 |
| 18 using ui::DisplayConfigurator; | |
| 19 | |
| 20 namespace display { | 18 namespace display { |
| 21 | 19 |
| 22 namespace { | 20 namespace { |
| 23 | 21 |
| 24 float ComputeDeviceScaleFactor(float diagonal_inch, | 22 float ComputeDeviceScaleFactor(float diagonal_inch, |
| 25 const gfx::Rect& resolution) { | 23 const gfx::Rect& resolution) { |
| 26 // We assume that displays have square pixel. | 24 // We assume that displays have square pixel. |
| 27 float diagonal_pixel = std::sqrt(std::pow(resolution.width(), 2) + | 25 float diagonal_pixel = std::sqrt(std::pow(resolution.width(), 2) + |
| 28 std::pow(resolution.height(), 2)); | 26 std::pow(resolution.height(), 2)); |
| 29 float dpi = diagonal_pixel / diagonal_inch; | 27 float dpi = diagonal_pixel / diagonal_inch; |
| 30 return DisplayChangeObserver::FindDeviceScaleFactor(dpi); | 28 return DisplayChangeObserver::FindDeviceScaleFactor(dpi); |
| 31 } | 29 } |
| 32 | 30 |
| 33 std::unique_ptr<ui::DisplayMode> MakeDisplayMode(int width, | 31 std::unique_ptr<DisplayMode> MakeDisplayMode(int width, |
| 34 int height, | 32 int height, |
| 35 bool is_interlaced, | 33 bool is_interlaced, |
| 36 float refresh_rate) { | 34 float refresh_rate) { |
| 37 return base::MakeUnique<ui::DisplayMode>(gfx::Size(width, height), | 35 return base::MakeUnique<DisplayMode>(gfx::Size(width, height), is_interlaced, |
| 38 is_interlaced, refresh_rate); | 36 refresh_rate); |
| 39 } | 37 } |
| 40 | 38 |
| 41 } // namespace | 39 } // namespace |
| 42 | 40 |
| 43 TEST(DisplayChangeObserverTest, GetExternalManagedDisplayModeList) { | 41 TEST(DisplayChangeObserverTest, GetExternalManagedDisplayModeList) { |
| 44 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = | 42 std::unique_ptr<DisplaySnapshot> display_snapshot = |
| 45 FakeDisplaySnapshot::Builder() | 43 FakeDisplaySnapshot::Builder() |
| 46 .SetId(123) | 44 .SetId(123) |
| 47 .SetNativeMode(MakeDisplayMode(1920, 1200, false, 60)) | 45 .SetNativeMode(MakeDisplayMode(1920, 1200, false, 60)) |
| 48 // All non-interlaced (as would be seen with different refresh rates). | 46 // All non-interlaced (as would be seen with different refresh rates). |
| 49 .AddMode(MakeDisplayMode(1920, 1080, false, 80)) | 47 .AddMode(MakeDisplayMode(1920, 1080, false, 80)) |
| 50 .AddMode(MakeDisplayMode(1920, 1080, false, 70)) | 48 .AddMode(MakeDisplayMode(1920, 1080, false, 70)) |
| 51 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) | 49 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) |
| 52 // Interlaced vs non-interlaced. | 50 // Interlaced vs non-interlaced. |
| 53 .AddMode(MakeDisplayMode(1280, 720, true, 60)) | 51 .AddMode(MakeDisplayMode(1280, 720, true, 60)) |
| 54 .AddMode(MakeDisplayMode(1280, 720, false, 60)) | 52 .AddMode(MakeDisplayMode(1280, 720, false, 60)) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 EXPECT_FALSE(display_modes[4]->is_interlaced()); | 85 EXPECT_FALSE(display_modes[4]->is_interlaced()); |
| 88 EXPECT_EQ(display_modes[4]->refresh_rate(), 80); | 86 EXPECT_EQ(display_modes[4]->refresh_rate(), 80); |
| 89 | 87 |
| 90 EXPECT_EQ("1920x1200", display_modes[5]->size().ToString()); | 88 EXPECT_EQ("1920x1200", display_modes[5]->size().ToString()); |
| 91 EXPECT_FALSE(display_modes[5]->is_interlaced()); | 89 EXPECT_FALSE(display_modes[5]->is_interlaced()); |
| 92 EXPECT_EQ(display_modes[5]->refresh_rate(), 60); | 90 EXPECT_EQ(display_modes[5]->refresh_rate(), 60); |
| 93 } | 91 } |
| 94 | 92 |
| 95 TEST(DisplayChangeObserverTest, GetEmptyExternalManagedDisplayModeList) { | 93 TEST(DisplayChangeObserverTest, GetEmptyExternalManagedDisplayModeList) { |
| 96 FakeDisplaySnapshot display_snapshot( | 94 FakeDisplaySnapshot display_snapshot( |
| 97 123, gfx::Point(), gfx::Size(), ui::DISPLAY_CONNECTION_TYPE_UNKNOWN, | 95 123, gfx::Point(), gfx::Size(), DISPLAY_CONNECTION_TYPE_UNKNOWN, false, |
| 98 false, false, false, std::string(), 0, | 96 false, false, std::string(), 0, |
| 99 std::vector<std::unique_ptr<const ui::DisplayMode>>(), nullptr, nullptr); | 97 std::vector<std::unique_ptr<const DisplayMode>>(), nullptr, nullptr); |
| 100 | 98 |
| 101 ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 99 ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
| 102 DisplayChangeObserver::GetExternalManagedDisplayModeList( | 100 DisplayChangeObserver::GetExternalManagedDisplayModeList( |
| 103 display_snapshot); | 101 display_snapshot); |
| 104 EXPECT_EQ(0u, display_modes.size()); | 102 EXPECT_EQ(0u, display_modes.size()); |
| 105 } | 103 } |
| 106 | 104 |
| 107 TEST(DisplayChangeObserverTest, GetInternalManagedDisplayModeList) { | 105 TEST(DisplayChangeObserverTest, GetInternalManagedDisplayModeList) { |
| 108 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = | 106 std::unique_ptr<DisplaySnapshot> display_snapshot = |
| 109 FakeDisplaySnapshot::Builder() | 107 FakeDisplaySnapshot::Builder() |
| 110 .SetId(123) | 108 .SetId(123) |
| 111 .SetNativeMode(MakeDisplayMode(1366, 768, false, 60)) | 109 .SetNativeMode(MakeDisplayMode(1366, 768, false, 60)) |
| 112 .AddMode(MakeDisplayMode(1024, 768, false, 60)) | 110 .AddMode(MakeDisplayMode(1024, 768, false, 60)) |
| 113 .AddMode(MakeDisplayMode(800, 600, false, 60)) | 111 .AddMode(MakeDisplayMode(800, 600, false, 60)) |
| 114 .AddMode(MakeDisplayMode(600, 600, false, 56.2)) | 112 .AddMode(MakeDisplayMode(600, 600, false, 56.2)) |
| 115 .AddMode(MakeDisplayMode(640, 480, false, 59.9)) | 113 .AddMode(MakeDisplayMode(640, 480, false, 59.9)) |
| 116 .Build(); | 114 .Build(); |
| 117 | 115 |
| 118 ManagedDisplayInfo info(1, "", false); | 116 ManagedDisplayInfo info(1, "", false); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 143 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); | 141 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); |
| 144 | 142 |
| 145 EXPECT_EQ("1366x768", display_modes[4]->size().ToString()); | 143 EXPECT_EQ("1366x768", display_modes[4]->size().ToString()); |
| 146 EXPECT_FALSE(display_modes[4]->native()); | 144 EXPECT_FALSE(display_modes[4]->native()); |
| 147 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.125, 0.01); | 145 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.125, 0.01); |
| 148 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); | 146 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); |
| 149 } | 147 } |
| 150 | 148 |
| 151 TEST(DisplayChangeObserverTest, GetInternalHiDPIManagedDisplayModeList) { | 149 TEST(DisplayChangeObserverTest, GetInternalHiDPIManagedDisplayModeList) { |
| 152 // Data picked from peppy. | 150 // Data picked from peppy. |
| 153 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = | 151 std::unique_ptr<DisplaySnapshot> display_snapshot = |
| 154 FakeDisplaySnapshot::Builder() | 152 FakeDisplaySnapshot::Builder() |
| 155 .SetId(123) | 153 .SetId(123) |
| 156 .SetNativeMode(MakeDisplayMode(2560, 1700, false, 60)) | 154 .SetNativeMode(MakeDisplayMode(2560, 1700, false, 60)) |
| 157 .AddMode(MakeDisplayMode(2048, 1536, false, 60)) | 155 .AddMode(MakeDisplayMode(2048, 1536, false, 60)) |
| 158 .AddMode(MakeDisplayMode(1920, 1440, false, 60)) | 156 .AddMode(MakeDisplayMode(1920, 1440, false, 60)) |
| 159 .Build(); | 157 .Build(); |
| 160 | 158 |
| 161 ManagedDisplayInfo info(1, "", false); | 159 ManagedDisplayInfo info(1, "", false); |
| 162 info.SetBounds(gfx::Rect(0, 0, 2560, 1700)); | 160 info.SetBounds(gfx::Rect(0, 0, 2560, 1700)); |
| 163 info.set_device_scale_factor(2.0f); | 161 info.set_device_scale_factor(2.0f); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 EXPECT_EQ(display_modes[6]->refresh_rate(), 60); | 200 EXPECT_EQ(display_modes[6]->refresh_rate(), 60); |
| 203 | 201 |
| 204 EXPECT_EQ("2560x1700", display_modes[7]->size().ToString()); | 202 EXPECT_EQ("2560x1700", display_modes[7]->size().ToString()); |
| 205 EXPECT_TRUE(display_modes[7]->native()); | 203 EXPECT_TRUE(display_modes[7]->native()); |
| 206 EXPECT_NEAR(display_modes[7]->ui_scale(), 2.0, 0.01); | 204 EXPECT_NEAR(display_modes[7]->ui_scale(), 2.0, 0.01); |
| 207 EXPECT_EQ(display_modes[7]->refresh_rate(), 60); | 205 EXPECT_EQ(display_modes[7]->refresh_rate(), 60); |
| 208 } | 206 } |
| 209 | 207 |
| 210 TEST(DisplayChangeObserverTest, GetInternalManagedDisplayModeList1_25) { | 208 TEST(DisplayChangeObserverTest, GetInternalManagedDisplayModeList1_25) { |
| 211 // Data picked from peppy. | 209 // Data picked from peppy. |
| 212 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = | 210 std::unique_ptr<DisplaySnapshot> display_snapshot = |
| 213 FakeDisplaySnapshot::Builder() | 211 FakeDisplaySnapshot::Builder() |
| 214 .SetId(123) | 212 .SetId(123) |
| 215 .SetNativeMode(MakeDisplayMode(1920, 1080, false, 60)) | 213 .SetNativeMode(MakeDisplayMode(1920, 1080, false, 60)) |
| 216 .Build(); | 214 .Build(); |
| 217 | 215 |
| 218 ManagedDisplayInfo info(1, "", false); | 216 ManagedDisplayInfo info(1, "", false); |
| 219 info.SetBounds(gfx::Rect(0, 0, 1920, 1080)); | 217 info.SetBounds(gfx::Rect(0, 0, 1920, 1080)); |
| 220 info.set_device_scale_factor(1.25); | 218 info.set_device_scale_factor(1.25); |
| 221 | 219 |
| 222 ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 220 ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
| (...skipping 20 matching lines...) Expand all Loading... |
| 243 EXPECT_NEAR(display_modes[3]->ui_scale(), 1.0, 0.01); | 241 EXPECT_NEAR(display_modes[3]->ui_scale(), 1.0, 0.01); |
| 244 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); | 242 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); |
| 245 | 243 |
| 246 EXPECT_EQ("1920x1080", display_modes[4]->size().ToString()); | 244 EXPECT_EQ("1920x1080", display_modes[4]->size().ToString()); |
| 247 EXPECT_FALSE(display_modes[4]->native()); | 245 EXPECT_FALSE(display_modes[4]->native()); |
| 248 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.25, 0.01); | 246 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.25, 0.01); |
| 249 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); | 247 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); |
| 250 } | 248 } |
| 251 | 249 |
| 252 TEST(DisplayChangeObserverTest, GetExternalManagedDisplayModeList4K) { | 250 TEST(DisplayChangeObserverTest, GetExternalManagedDisplayModeList4K) { |
| 253 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = | 251 std::unique_ptr<DisplaySnapshot> display_snapshot = |
| 254 FakeDisplaySnapshot::Builder() | 252 FakeDisplaySnapshot::Builder() |
| 255 .SetId(123) | 253 .SetId(123) |
| 256 .SetNativeMode(MakeDisplayMode(3840, 2160, false, 30)) | 254 .SetNativeMode(MakeDisplayMode(3840, 2160, false, 30)) |
| 257 .AddMode(MakeDisplayMode(1920, 1200, false, 60)) | 255 .AddMode(MakeDisplayMode(1920, 1200, false, 60)) |
| 258 // All non-interlaced (as would be seen with different refresh rates). | 256 // All non-interlaced (as would be seen with different refresh rates). |
| 259 .AddMode(MakeDisplayMode(1920, 1080, false, 80)) | 257 .AddMode(MakeDisplayMode(1920, 1080, false, 80)) |
| 260 .AddMode(MakeDisplayMode(1920, 1080, false, 70)) | 258 .AddMode(MakeDisplayMode(1920, 1080, false, 70)) |
| 261 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) | 259 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) |
| 262 // Interlaced vs non-interlaced. | 260 // Interlaced vs non-interlaced. |
| 263 .AddMode(MakeDisplayMode(1280, 720, true, 60)) | 261 .AddMode(MakeDisplayMode(1280, 720, true, 60)) |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 // 12.85" 2560x1700 | 342 // 12.85" 2560x1700 |
| 345 EXPECT_EQ(2.0f, ComputeDeviceScaleFactor(12.85f, gfx::Rect(2560, 1700))); | 343 EXPECT_EQ(2.0f, ComputeDeviceScaleFactor(12.85f, gfx::Rect(2560, 1700))); |
| 346 | 344 |
| 347 // Erroneous values should still work. | 345 // Erroneous values should still work. |
| 348 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(-100.0f)); | 346 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(-100.0f)); |
| 349 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(0.0f)); | 347 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(0.0f)); |
| 350 EXPECT_EQ(2.0f, DisplayChangeObserver::FindDeviceScaleFactor(10000.0f)); | 348 EXPECT_EQ(2.0f, DisplayChangeObserver::FindDeviceScaleFactor(10000.0f)); |
| 351 } | 349 } |
| 352 | 350 |
| 353 TEST(DisplayChangeObserverTest, FindExternalDisplayNativeModeWhenOverwritten) { | 351 TEST(DisplayChangeObserverTest, FindExternalDisplayNativeModeWhenOverwritten) { |
| 354 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = | 352 std::unique_ptr<DisplaySnapshot> display_snapshot = |
| 355 FakeDisplaySnapshot::Builder() | 353 FakeDisplaySnapshot::Builder() |
| 356 .SetId(123) | 354 .SetId(123) |
| 357 .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60)) | 355 .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60)) |
| 358 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) | 356 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) |
| 359 .Build(); | 357 .Build(); |
| 360 | 358 |
| 361 ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 359 ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
| 362 DisplayChangeObserver::GetExternalManagedDisplayModeList( | 360 DisplayChangeObserver::GetExternalManagedDisplayModeList( |
| 363 *display_snapshot); | 361 *display_snapshot); |
| 364 ASSERT_EQ(2u, display_modes.size()); | 362 ASSERT_EQ(2u, display_modes.size()); |
| 365 EXPECT_EQ("1920x1080", display_modes[0]->size().ToString()); | 363 EXPECT_EQ("1920x1080", display_modes[0]->size().ToString()); |
| 366 EXPECT_FALSE(display_modes[0]->is_interlaced()); | 364 EXPECT_FALSE(display_modes[0]->is_interlaced()); |
| 367 EXPECT_FALSE(display_modes[0]->native()); | 365 EXPECT_FALSE(display_modes[0]->native()); |
| 368 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); | 366 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); |
| 369 | 367 |
| 370 EXPECT_EQ("1920x1080", display_modes[1]->size().ToString()); | 368 EXPECT_EQ("1920x1080", display_modes[1]->size().ToString()); |
| 371 EXPECT_TRUE(display_modes[1]->is_interlaced()); | 369 EXPECT_TRUE(display_modes[1]->is_interlaced()); |
| 372 EXPECT_TRUE(display_modes[1]->native()); | 370 EXPECT_TRUE(display_modes[1]->native()); |
| 373 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); | 371 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); |
| 374 } | 372 } |
| 375 | 373 |
| 376 } // namespace display | 374 } // namespace display |
| OLD | NEW |