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 "ash/display/display_change_observer_chromeos.h" | 5 #include "ash/display/display_change_observer_chromeos.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "ui/display/chromeos/display_configurator.h" | 9 #include "ui/display/chromeos/display_configurator.h" |
10 #include "ui/display/chromeos/test/test_display_snapshot.h" | 10 #include "ui/display/fake_display_snapshot.h" |
11 #include "ui/display/manager/managed_display_info.h" | 11 #include "ui/display/manager/managed_display_info.h" |
12 #include "ui/display/types/display_mode.h" | 12 #include "ui/display/types/display_mode.h" |
13 | 13 |
14 using ui::DisplayConfigurator; | 14 using ui::DisplayConfigurator; |
15 | 15 |
16 typedef testing::Test DisplayChangeObserverTest; | |
17 | |
18 namespace ash { | 16 namespace ash { |
19 | 17 |
20 TEST_F(DisplayChangeObserverTest, GetExternalManagedDisplayModeList) { | 18 namespace { |
21 std::vector<std::unique_ptr<const ui::DisplayMode>> modes; | |
22 modes.push_back( | |
23 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1200), false, 60)); | |
24 | 19 |
25 // All non-interlaced (as would be seen with different refresh rates). | 20 float ComputeDeviceScaleFactor(float diagonal_inch, |
26 modes.push_back( | 21 const gfx::Rect& resolution) { |
27 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 80)); | 22 // We assume that displays have square pixel. |
28 modes.push_back( | 23 float diagonal_pixel = std::sqrt(std::pow(resolution.width(), 2) + |
29 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 70)); | 24 std::pow(resolution.height(), 2)); |
30 modes.push_back( | 25 float dpi = diagonal_pixel / diagonal_inch; |
31 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 60)); | 26 return DisplayChangeObserver::FindDeviceScaleFactor(dpi); |
| 27 } |
32 | 28 |
33 // Interlaced vs non-interlaced. | 29 std::unique_ptr<ui::DisplayMode> MakeDisplayMode(int width, |
34 modes.push_back( | 30 int height, |
35 base::MakeUnique<ui::DisplayMode>(gfx::Size(1280, 720), true, 60)); | 31 bool is_interlaced, |
36 modes.push_back( | 32 float refresh_rate) { |
37 base::MakeUnique<ui::DisplayMode>(gfx::Size(1280, 720), false, 60)); | 33 return base::MakeUnique<ui::DisplayMode>(gfx::Size(width, height), |
| 34 is_interlaced, refresh_rate); |
| 35 } |
38 | 36 |
39 // Interlaced only. | 37 } // namespace |
40 modes.push_back( | |
41 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 768), true, 70)); | |
42 modes.push_back( | |
43 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 768), true, 60)); | |
44 | 38 |
45 // Mixed. | 39 TEST(DisplayChangeObserverTest, GetExternalManagedDisplayModeList) { |
46 modes.push_back( | 40 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = |
47 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 600), true, 60)); | 41 display::FakeDisplaySnapshot::Builder() |
48 modes.push_back( | 42 .SetId(123) |
49 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 600), false, 70)); | 43 .SetNativeMode(MakeDisplayMode(1920, 1200, false, 60)) |
50 modes.push_back( | 44 // All non-interlaced (as would be seen with different refresh rates). |
51 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 600), false, 60)); | 45 .AddMode(MakeDisplayMode(1920, 1080, false, 80)) |
52 | 46 .AddMode(MakeDisplayMode(1920, 1080, false, 70)) |
53 // Just one interlaced mode. | 47 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) |
54 modes.push_back( | 48 // Interlaced vs non-interlaced. |
55 base::MakeUnique<ui::DisplayMode>(gfx::Size(640, 480), true, 60)); | 49 .AddMode(MakeDisplayMode(1280, 720, true, 60)) |
56 | 50 .AddMode(MakeDisplayMode(1280, 720, false, 60)) |
57 ui::TestDisplaySnapshot display_snapshot; | 51 // Interlaced only. |
58 display_snapshot.set_modes(std::move(modes)); | 52 .AddMode(MakeDisplayMode(1024, 768, true, 70)) |
| 53 .AddMode(MakeDisplayMode(1024, 768, true, 60)) |
| 54 // Mixed. |
| 55 .AddMode(MakeDisplayMode(1024, 600, true, 60)) |
| 56 .AddMode(MakeDisplayMode(1024, 600, false, 70)) |
| 57 .AddMode(MakeDisplayMode(1024, 600, false, 60)) |
| 58 // Just one interlaced mode. |
| 59 .AddMode(MakeDisplayMode(640, 480, true, 60)) |
| 60 .Build(); |
59 | 61 |
60 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 62 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
61 DisplayChangeObserver::GetExternalManagedDisplayModeList( | 63 DisplayChangeObserver::GetExternalManagedDisplayModeList( |
62 display_snapshot); | 64 *display_snapshot); |
63 ASSERT_EQ(6u, display_modes.size()); | 65 ASSERT_EQ(6u, display_modes.size()); |
64 EXPECT_EQ("640x480", display_modes[0]->size().ToString()); | 66 EXPECT_EQ("640x480", display_modes[0]->size().ToString()); |
65 EXPECT_TRUE(display_modes[0]->is_interlaced()); | 67 EXPECT_TRUE(display_modes[0]->is_interlaced()); |
66 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); | 68 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); |
67 | 69 |
68 EXPECT_EQ("1024x600", display_modes[1]->size().ToString()); | 70 EXPECT_EQ("1024x600", display_modes[1]->size().ToString()); |
69 EXPECT_FALSE(display_modes[1]->is_interlaced()); | 71 EXPECT_FALSE(display_modes[1]->is_interlaced()); |
70 EXPECT_EQ(display_modes[1]->refresh_rate(), 70); | 72 EXPECT_EQ(display_modes[1]->refresh_rate(), 70); |
71 | 73 |
72 EXPECT_EQ("1024x768", display_modes[2]->size().ToString()); | 74 EXPECT_EQ("1024x768", display_modes[2]->size().ToString()); |
73 EXPECT_TRUE(display_modes[2]->is_interlaced()); | 75 EXPECT_TRUE(display_modes[2]->is_interlaced()); |
74 EXPECT_EQ(display_modes[2]->refresh_rate(), 70); | 76 EXPECT_EQ(display_modes[2]->refresh_rate(), 70); |
75 | 77 |
76 EXPECT_EQ("1280x720", display_modes[3]->size().ToString()); | 78 EXPECT_EQ("1280x720", display_modes[3]->size().ToString()); |
77 EXPECT_FALSE(display_modes[3]->is_interlaced()); | 79 EXPECT_FALSE(display_modes[3]->is_interlaced()); |
78 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); | 80 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); |
79 | 81 |
80 EXPECT_EQ("1920x1080", display_modes[4]->size().ToString()); | 82 EXPECT_EQ("1920x1080", display_modes[4]->size().ToString()); |
81 EXPECT_FALSE(display_modes[4]->is_interlaced()); | 83 EXPECT_FALSE(display_modes[4]->is_interlaced()); |
82 EXPECT_EQ(display_modes[4]->refresh_rate(), 80); | 84 EXPECT_EQ(display_modes[4]->refresh_rate(), 80); |
83 | 85 |
84 EXPECT_EQ("1920x1200", display_modes[5]->size().ToString()); | 86 EXPECT_EQ("1920x1200", display_modes[5]->size().ToString()); |
85 EXPECT_FALSE(display_modes[5]->is_interlaced()); | 87 EXPECT_FALSE(display_modes[5]->is_interlaced()); |
86 EXPECT_EQ(display_modes[5]->refresh_rate(), 60); | 88 EXPECT_EQ(display_modes[5]->refresh_rate(), 60); |
| 89 } |
87 | 90 |
88 // Outputs without any modes shouldn't cause a crash. | 91 TEST(DisplayChangeObserverTest, GetEmptyExternalManagedDisplayModeList) { |
89 modes.clear(); | 92 display::FakeDisplaySnapshot display_snapshot( |
90 display_snapshot.set_modes(std::move(modes)); | 93 123, gfx::Point(), gfx::Size(), ui::DISPLAY_CONNECTION_TYPE_UNKNOWN, |
| 94 false, false, false, std::string(), 0, |
| 95 std::vector<std::unique_ptr<const ui::DisplayMode>>(), nullptr, nullptr); |
91 | 96 |
92 display_modes = DisplayChangeObserver::GetExternalManagedDisplayModeList( | 97 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
93 display_snapshot); | 98 DisplayChangeObserver::GetExternalManagedDisplayModeList( |
| 99 display_snapshot); |
94 EXPECT_EQ(0u, display_modes.size()); | 100 EXPECT_EQ(0u, display_modes.size()); |
95 } | 101 } |
96 | 102 |
97 TEST_F(DisplayChangeObserverTest, GetInternalManagedDisplayModeList) { | 103 TEST(DisplayChangeObserverTest, GetInternalManagedDisplayModeList) { |
98 std::vector<std::unique_ptr<const ui::DisplayMode>> modes; | 104 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = |
99 // Data picked from peppy. | 105 display::FakeDisplaySnapshot::Builder() |
100 modes.push_back( | 106 .SetId(123) |
101 base::MakeUnique<ui::DisplayMode>(gfx::Size(1366, 768), false, 60)); | 107 .SetNativeMode(MakeDisplayMode(1366, 768, false, 60)) |
102 modes.push_back( | 108 .AddMode(MakeDisplayMode(1024, 768, false, 60)) |
103 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 768), false, 60)); | 109 .AddMode(MakeDisplayMode(800, 600, false, 60)) |
104 modes.push_back( | 110 .AddMode(MakeDisplayMode(600, 600, false, 56.2)) |
105 base::MakeUnique<ui::DisplayMode>(gfx::Size(800, 600), false, 60)); | 111 .AddMode(MakeDisplayMode(640, 480, false, 59.9)) |
106 modes.push_back( | 112 .Build(); |
107 base::MakeUnique<ui::DisplayMode>(gfx::Size(600, 600), false, 56.2)); | |
108 modes.push_back( | |
109 base::MakeUnique<ui::DisplayMode>(gfx::Size(640, 480), false, 59.9)); | |
110 | |
111 ui::TestDisplaySnapshot display_snapshot; | |
112 display_snapshot.set_native_mode(modes[0].get()); | |
113 display_snapshot.set_modes(std::move(modes)); | |
114 | 113 |
115 display::ManagedDisplayInfo info(1, "", false); | 114 display::ManagedDisplayInfo info(1, "", false); |
116 info.SetBounds(gfx::Rect(0, 0, 1366, 768)); | 115 info.SetBounds(gfx::Rect(0, 0, 1366, 768)); |
117 | 116 |
118 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 117 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
119 DisplayChangeObserver::GetInternalManagedDisplayModeList( | 118 DisplayChangeObserver::GetInternalManagedDisplayModeList( |
120 info, display_snapshot); | 119 info, *display_snapshot); |
121 ASSERT_EQ(5u, display_modes.size()); | 120 ASSERT_EQ(5u, display_modes.size()); |
122 EXPECT_EQ("1366x768", display_modes[0]->size().ToString()); | 121 EXPECT_EQ("1366x768", display_modes[0]->size().ToString()); |
123 EXPECT_FALSE(display_modes[0]->native()); | 122 EXPECT_FALSE(display_modes[0]->native()); |
124 EXPECT_NEAR(display_modes[0]->ui_scale(), 0.5, 0.01); | 123 EXPECT_NEAR(display_modes[0]->ui_scale(), 0.5, 0.01); |
125 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); | 124 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); |
126 | 125 |
127 EXPECT_EQ("1366x768", display_modes[1]->size().ToString()); | 126 EXPECT_EQ("1366x768", display_modes[1]->size().ToString()); |
128 EXPECT_FALSE(display_modes[1]->native()); | 127 EXPECT_FALSE(display_modes[1]->native()); |
129 EXPECT_NEAR(display_modes[1]->ui_scale(), 0.6, 0.01); | 128 EXPECT_NEAR(display_modes[1]->ui_scale(), 0.6, 0.01); |
130 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); | 129 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); |
131 | 130 |
132 EXPECT_EQ("1366x768", display_modes[2]->size().ToString()); | 131 EXPECT_EQ("1366x768", display_modes[2]->size().ToString()); |
133 EXPECT_FALSE(display_modes[2]->native()); | 132 EXPECT_FALSE(display_modes[2]->native()); |
134 EXPECT_NEAR(display_modes[2]->ui_scale(), 0.75, 0.01); | 133 EXPECT_NEAR(display_modes[2]->ui_scale(), 0.75, 0.01); |
135 EXPECT_EQ(display_modes[2]->refresh_rate(), 60); | 134 EXPECT_EQ(display_modes[2]->refresh_rate(), 60); |
136 | 135 |
137 EXPECT_EQ("1366x768", display_modes[3]->size().ToString()); | 136 EXPECT_EQ("1366x768", display_modes[3]->size().ToString()); |
138 EXPECT_TRUE(display_modes[3]->native()); | 137 EXPECT_TRUE(display_modes[3]->native()); |
139 EXPECT_NEAR(display_modes[3]->ui_scale(), 1.0, 0.01); | 138 EXPECT_NEAR(display_modes[3]->ui_scale(), 1.0, 0.01); |
140 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); | 139 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); |
141 | 140 |
142 EXPECT_EQ("1366x768", display_modes[4]->size().ToString()); | 141 EXPECT_EQ("1366x768", display_modes[4]->size().ToString()); |
143 EXPECT_FALSE(display_modes[4]->native()); | 142 EXPECT_FALSE(display_modes[4]->native()); |
144 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.125, 0.01); | 143 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.125, 0.01); |
145 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); | 144 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); |
146 } | 145 } |
147 | 146 |
148 TEST_F(DisplayChangeObserverTest, GetInternalHiDPIManagedDisplayModeList) { | 147 TEST(DisplayChangeObserverTest, GetInternalHiDPIManagedDisplayModeList) { |
149 std::vector<std::unique_ptr<const ui::DisplayMode>> modes; | |
150 // Data picked from peppy. | 148 // Data picked from peppy. |
151 modes.push_back( | 149 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = |
152 base::MakeUnique<ui::DisplayMode>(gfx::Size(2560, 1700), false, 60)); | 150 display::FakeDisplaySnapshot::Builder() |
153 modes.push_back( | 151 .SetId(123) |
154 base::MakeUnique<ui::DisplayMode>(gfx::Size(2048, 1536), false, 60)); | 152 .SetNativeMode(MakeDisplayMode(2560, 1700, false, 60)) |
155 modes.push_back( | 153 .AddMode(MakeDisplayMode(2048, 1536, false, 60)) |
156 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1440), false, 60)); | 154 .AddMode(MakeDisplayMode(1920, 1440, false, 60)) |
157 | 155 .Build(); |
158 ui::TestDisplaySnapshot display_snapshot; | |
159 display_snapshot.set_native_mode(modes[0].get()); | |
160 display_snapshot.set_modes(std::move(modes)); | |
161 | 156 |
162 display::ManagedDisplayInfo info(1, "", false); | 157 display::ManagedDisplayInfo info(1, "", false); |
163 info.SetBounds(gfx::Rect(0, 0, 2560, 1700)); | 158 info.SetBounds(gfx::Rect(0, 0, 2560, 1700)); |
164 info.set_device_scale_factor(2.0f); | 159 info.set_device_scale_factor(2.0f); |
165 | 160 |
166 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 161 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
167 DisplayChangeObserver::GetInternalManagedDisplayModeList( | 162 DisplayChangeObserver::GetInternalManagedDisplayModeList( |
168 info, display_snapshot); | 163 info, *display_snapshot); |
169 ASSERT_EQ(8u, display_modes.size()); | 164 ASSERT_EQ(8u, display_modes.size()); |
170 EXPECT_EQ("2560x1700", display_modes[0]->size().ToString()); | 165 EXPECT_EQ("2560x1700", display_modes[0]->size().ToString()); |
171 EXPECT_FALSE(display_modes[0]->native()); | 166 EXPECT_FALSE(display_modes[0]->native()); |
172 EXPECT_NEAR(display_modes[0]->ui_scale(), 0.5, 0.01); | 167 EXPECT_NEAR(display_modes[0]->ui_scale(), 0.5, 0.01); |
173 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); | 168 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); |
174 | 169 |
175 EXPECT_EQ("2560x1700", display_modes[1]->size().ToString()); | 170 EXPECT_EQ("2560x1700", display_modes[1]->size().ToString()); |
176 EXPECT_FALSE(display_modes[1]->native()); | 171 EXPECT_FALSE(display_modes[1]->native()); |
177 EXPECT_NEAR(display_modes[1]->ui_scale(), 0.625, 0.01); | 172 EXPECT_NEAR(display_modes[1]->ui_scale(), 0.625, 0.01); |
178 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); | 173 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); |
(...skipping 22 matching lines...) Expand all Loading... |
201 EXPECT_FALSE(display_modes[6]->native()); | 196 EXPECT_FALSE(display_modes[6]->native()); |
202 EXPECT_NEAR(display_modes[6]->ui_scale(), 1.5, 0.01); | 197 EXPECT_NEAR(display_modes[6]->ui_scale(), 1.5, 0.01); |
203 EXPECT_EQ(display_modes[6]->refresh_rate(), 60); | 198 EXPECT_EQ(display_modes[6]->refresh_rate(), 60); |
204 | 199 |
205 EXPECT_EQ("2560x1700", display_modes[7]->size().ToString()); | 200 EXPECT_EQ("2560x1700", display_modes[7]->size().ToString()); |
206 EXPECT_TRUE(display_modes[7]->native()); | 201 EXPECT_TRUE(display_modes[7]->native()); |
207 EXPECT_NEAR(display_modes[7]->ui_scale(), 2.0, 0.01); | 202 EXPECT_NEAR(display_modes[7]->ui_scale(), 2.0, 0.01); |
208 EXPECT_EQ(display_modes[7]->refresh_rate(), 60); | 203 EXPECT_EQ(display_modes[7]->refresh_rate(), 60); |
209 } | 204 } |
210 | 205 |
211 TEST_F(DisplayChangeObserverTest, GetInternalManagedDisplayModeList1_25) { | 206 TEST(DisplayChangeObserverTest, GetInternalManagedDisplayModeList1_25) { |
212 std::vector<std::unique_ptr<const ui::DisplayMode>> modes; | |
213 // Data picked from peppy. | 207 // Data picked from peppy. |
214 modes.push_back( | 208 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = |
215 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 60)); | 209 display::FakeDisplaySnapshot::Builder() |
216 | 210 .SetId(123) |
217 ui::TestDisplaySnapshot display_snapshot; | 211 .SetNativeMode(MakeDisplayMode(1920, 1080, false, 60)) |
218 display_snapshot.set_native_mode(modes[0].get()); | 212 .Build(); |
219 display_snapshot.set_modes(std::move(modes)); | |
220 | 213 |
221 display::ManagedDisplayInfo info(1, "", false); | 214 display::ManagedDisplayInfo info(1, "", false); |
222 info.SetBounds(gfx::Rect(0, 0, 1920, 1080)); | 215 info.SetBounds(gfx::Rect(0, 0, 1920, 1080)); |
223 info.set_device_scale_factor(1.25); | 216 info.set_device_scale_factor(1.25); |
224 | 217 |
225 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 218 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
226 DisplayChangeObserver::GetInternalManagedDisplayModeList( | 219 DisplayChangeObserver::GetInternalManagedDisplayModeList( |
227 info, display_snapshot); | 220 info, *display_snapshot); |
228 ASSERT_EQ(5u, display_modes.size()); | 221 ASSERT_EQ(5u, display_modes.size()); |
229 EXPECT_EQ("1920x1080", display_modes[0]->size().ToString()); | 222 EXPECT_EQ("1920x1080", display_modes[0]->size().ToString()); |
230 EXPECT_FALSE(display_modes[0]->native()); | 223 EXPECT_FALSE(display_modes[0]->native()); |
231 EXPECT_NEAR(display_modes[0]->ui_scale(), 0.5, 0.01); | 224 EXPECT_NEAR(display_modes[0]->ui_scale(), 0.5, 0.01); |
232 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); | 225 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); |
233 | 226 |
234 EXPECT_EQ("1920x1080", display_modes[1]->size().ToString()); | 227 EXPECT_EQ("1920x1080", display_modes[1]->size().ToString()); |
235 EXPECT_FALSE(display_modes[1]->native()); | 228 EXPECT_FALSE(display_modes[1]->native()); |
236 EXPECT_NEAR(display_modes[1]->ui_scale(), 0.625, 0.01); | 229 EXPECT_NEAR(display_modes[1]->ui_scale(), 0.625, 0.01); |
237 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); | 230 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); |
238 | 231 |
239 EXPECT_EQ("1920x1080", display_modes[2]->size().ToString()); | 232 EXPECT_EQ("1920x1080", display_modes[2]->size().ToString()); |
240 EXPECT_FALSE(display_modes[2]->native()); | 233 EXPECT_FALSE(display_modes[2]->native()); |
241 EXPECT_NEAR(display_modes[2]->ui_scale(), 0.8, 0.01); | 234 EXPECT_NEAR(display_modes[2]->ui_scale(), 0.8, 0.01); |
242 EXPECT_EQ(display_modes[2]->refresh_rate(), 60); | 235 EXPECT_EQ(display_modes[2]->refresh_rate(), 60); |
243 | 236 |
244 EXPECT_EQ("1920x1080", display_modes[3]->size().ToString()); | 237 EXPECT_EQ("1920x1080", display_modes[3]->size().ToString()); |
245 EXPECT_TRUE(display_modes[3]->native()); | 238 EXPECT_TRUE(display_modes[3]->native()); |
246 EXPECT_NEAR(display_modes[3]->ui_scale(), 1.0, 0.01); | 239 EXPECT_NEAR(display_modes[3]->ui_scale(), 1.0, 0.01); |
247 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); | 240 EXPECT_EQ(display_modes[3]->refresh_rate(), 60); |
248 | 241 |
249 EXPECT_EQ("1920x1080", display_modes[4]->size().ToString()); | 242 EXPECT_EQ("1920x1080", display_modes[4]->size().ToString()); |
250 EXPECT_FALSE(display_modes[4]->native()); | 243 EXPECT_FALSE(display_modes[4]->native()); |
251 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.25, 0.01); | 244 EXPECT_NEAR(display_modes[4]->ui_scale(), 1.25, 0.01); |
252 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); | 245 EXPECT_EQ(display_modes[4]->refresh_rate(), 60); |
253 } | 246 } |
254 | 247 |
255 TEST_F(DisplayChangeObserverTest, GetExternalManagedDisplayModeList4K) { | 248 TEST(DisplayChangeObserverTest, GetExternalManagedDisplayModeList4K) { |
256 std::vector<std::unique_ptr<const ui::DisplayMode>> modes; | 249 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = |
257 modes.push_back( | 250 display::FakeDisplaySnapshot::Builder() |
258 base::MakeUnique<ui::DisplayMode>(gfx::Size(3840, 2160), false, 30)); | 251 .SetId(123) |
259 modes.push_back( | 252 .SetNativeMode(MakeDisplayMode(3840, 2160, false, 30)) |
260 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1200), false, 60)); | 253 .AddMode(MakeDisplayMode(1920, 1200, false, 60)) |
261 | 254 // All non-interlaced (as would be seen with different refresh rates). |
262 // All non-interlaced (as would be seen with different refresh rates). | 255 .AddMode(MakeDisplayMode(1920, 1080, false, 80)) |
263 modes.push_back( | 256 .AddMode(MakeDisplayMode(1920, 1080, false, 70)) |
264 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 80)); | 257 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) |
265 modes.push_back( | 258 // Interlaced vs non-interlaced. |
266 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 70)); | 259 .AddMode(MakeDisplayMode(1280, 720, true, 60)) |
267 modes.push_back( | 260 .AddMode(MakeDisplayMode(1280, 720, false, 60)) |
268 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 60)); | 261 // Interlaced only. |
269 | 262 .AddMode(MakeDisplayMode(1024, 768, true, 70)) |
270 // Interlaced vs non-interlaced. | 263 .AddMode(MakeDisplayMode(1024, 768, true, 60)) |
271 modes.push_back( | 264 // Mixed. |
272 base::MakeUnique<ui::DisplayMode>(gfx::Size(1280, 720), true, 60)); | 265 .AddMode(MakeDisplayMode(1024, 600, true, 60)) |
273 modes.push_back( | 266 .AddMode(MakeDisplayMode(1024, 600, false, 70)) |
274 base::MakeUnique<ui::DisplayMode>(gfx::Size(1280, 720), false, 60)); | 267 .AddMode(MakeDisplayMode(1024, 600, false, 60)) |
275 | 268 // Just one interlaced mode. |
276 // Interlaced only. | 269 .AddMode(MakeDisplayMode(640, 480, true, 60)) |
277 modes.push_back( | 270 .Build(); |
278 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 768), true, 70)); | |
279 modes.push_back( | |
280 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 768), true, 60)); | |
281 | |
282 // Mixed. | |
283 modes.push_back( | |
284 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 600), true, 60)); | |
285 modes.push_back( | |
286 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 600), false, 70)); | |
287 modes.push_back( | |
288 base::MakeUnique<ui::DisplayMode>(gfx::Size(1024, 600), false, 60)); | |
289 | |
290 // Just one interlaced mode. | |
291 modes.push_back( | |
292 base::MakeUnique<ui::DisplayMode>(gfx::Size(640, 480), true, 60)); | |
293 | |
294 ui::TestDisplaySnapshot display_snapshot; | |
295 display_snapshot.set_native_mode(modes[0].get()); | |
296 display_snapshot.set_modes(std::move(modes)); | |
297 | 271 |
298 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 272 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
299 DisplayChangeObserver::GetExternalManagedDisplayModeList( | 273 DisplayChangeObserver::GetExternalManagedDisplayModeList( |
300 display_snapshot); | 274 *display_snapshot); |
301 display::ManagedDisplayInfo info(1, "", false); | 275 display::ManagedDisplayInfo info(1, "", false); |
302 info.SetManagedDisplayModes(display_modes); // Sort as external display. | 276 info.SetManagedDisplayModes(display_modes); // Sort as external display. |
303 display_modes = info.display_modes(); | 277 display_modes = info.display_modes(); |
304 | 278 |
305 ASSERT_EQ(9u, display_modes.size()); | 279 ASSERT_EQ(9u, display_modes.size()); |
306 EXPECT_EQ("640x480", display_modes[0]->size().ToString()); | 280 EXPECT_EQ("640x480", display_modes[0]->size().ToString()); |
307 EXPECT_TRUE(display_modes[0]->is_interlaced()); | 281 EXPECT_TRUE(display_modes[0]->is_interlaced()); |
308 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); | 282 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); |
309 | 283 |
310 EXPECT_EQ("1024x600", display_modes[1]->size().ToString()); | 284 EXPECT_EQ("1024x600", display_modes[1]->size().ToString()); |
(...skipping 25 matching lines...) Expand all Loading... |
336 EXPECT_EQ("3840x2160", display_modes[7]->size().ToString()); | 310 EXPECT_EQ("3840x2160", display_modes[7]->size().ToString()); |
337 EXPECT_FALSE(display_modes[7]->is_interlaced()); | 311 EXPECT_FALSE(display_modes[7]->is_interlaced()); |
338 EXPECT_FALSE(display_modes[7]->native()); | 312 EXPECT_FALSE(display_modes[7]->native()); |
339 EXPECT_EQ(display_modes[7]->refresh_rate(), 30); | 313 EXPECT_EQ(display_modes[7]->refresh_rate(), 30); |
340 EXPECT_EQ(display_modes[7]->device_scale_factor(), 1.25); | 314 EXPECT_EQ(display_modes[7]->device_scale_factor(), 1.25); |
341 | 315 |
342 EXPECT_EQ("3840x2160", display_modes[8]->size().ToString()); | 316 EXPECT_EQ("3840x2160", display_modes[8]->size().ToString()); |
343 EXPECT_FALSE(display_modes[8]->is_interlaced()); | 317 EXPECT_FALSE(display_modes[8]->is_interlaced()); |
344 EXPECT_TRUE(display_modes[8]->native()); | 318 EXPECT_TRUE(display_modes[8]->native()); |
345 EXPECT_EQ(display_modes[8]->refresh_rate(), 30); | 319 EXPECT_EQ(display_modes[8]->refresh_rate(), 30); |
346 | |
347 // Outputs without any modes shouldn't cause a crash. | |
348 modes.clear(); | |
349 display_snapshot.set_native_mode(NULL); | |
350 display_snapshot.set_modes(std::move(modes)); | |
351 | |
352 display_modes = DisplayChangeObserver::GetExternalManagedDisplayModeList( | |
353 display_snapshot); | |
354 EXPECT_EQ(0u, display_modes.size()); | |
355 } | 320 } |
356 | 321 |
357 namespace { | 322 TEST(DisplayChangeObserverTest, FindDeviceScaleFactor) { |
358 | |
359 float ComputeDeviceScaleFactor(float diagonal_inch, | |
360 const gfx::Rect& resolution) { | |
361 // We assume that displays have square pixel. | |
362 float diagonal_pixel = std::sqrt(std::pow(resolution.width(), 2) + | |
363 std::pow(resolution.height(), 2)); | |
364 float dpi = diagonal_pixel / diagonal_inch; | |
365 return DisplayChangeObserver::FindDeviceScaleFactor(dpi); | |
366 } | |
367 | |
368 } // namespace | |
369 | |
370 TEST_F(DisplayChangeObserverTest, FindDeviceScaleFactor) { | |
371 EXPECT_EQ(1.0f, ComputeDeviceScaleFactor(19.5f, gfx::Rect(1600, 900))); | 323 EXPECT_EQ(1.0f, ComputeDeviceScaleFactor(19.5f, gfx::Rect(1600, 900))); |
372 | 324 |
373 // 21.5" 1920x1080 | 325 // 21.5" 1920x1080 |
374 EXPECT_EQ(1.0f, ComputeDeviceScaleFactor(21.5f, gfx::Rect(1920, 1080))); | 326 EXPECT_EQ(1.0f, ComputeDeviceScaleFactor(21.5f, gfx::Rect(1920, 1080))); |
375 | 327 |
376 // 12.1" 1280x800 | 328 // 12.1" 1280x800 |
377 EXPECT_EQ(1.0f, ComputeDeviceScaleFactor(12.1f, gfx::Rect(1280, 800))); | 329 EXPECT_EQ(1.0f, ComputeDeviceScaleFactor(12.1f, gfx::Rect(1280, 800))); |
378 | 330 |
379 // 11.6" 1920x1080 | 331 // 11.6" 1920x1080 |
380 EXPECT_EQ(1.25f, ComputeDeviceScaleFactor(11.6f, gfx::Rect(1920, 1080))); | 332 EXPECT_EQ(1.25f, ComputeDeviceScaleFactor(11.6f, gfx::Rect(1920, 1080))); |
381 | 333 |
382 // 13.3" 1920x1080 | 334 // 13.3" 1920x1080 |
383 EXPECT_EQ(1.25f, ComputeDeviceScaleFactor(13.3f, gfx::Rect(1920, 1080))); | 335 EXPECT_EQ(1.25f, ComputeDeviceScaleFactor(13.3f, gfx::Rect(1920, 1080))); |
384 | 336 |
385 // 14" 1920x1080 | 337 // 14" 1920x1080 |
386 EXPECT_EQ(1.25f, ComputeDeviceScaleFactor(14.0f, gfx::Rect(1920, 1080))); | 338 EXPECT_EQ(1.25f, ComputeDeviceScaleFactor(14.0f, gfx::Rect(1920, 1080))); |
387 | 339 |
388 // 12.85" 2560x1700 | 340 // 12.85" 2560x1700 |
389 EXPECT_EQ(2.0f, ComputeDeviceScaleFactor(12.85f, gfx::Rect(2560, 1700))); | 341 EXPECT_EQ(2.0f, ComputeDeviceScaleFactor(12.85f, gfx::Rect(2560, 1700))); |
390 | 342 |
391 // Erroneous values should still work. | 343 // Erroneous values should still work. |
392 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(-100.0f)); | 344 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(-100.0f)); |
393 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(0.0f)); | 345 EXPECT_EQ(1.0f, DisplayChangeObserver::FindDeviceScaleFactor(0.0f)); |
394 EXPECT_EQ(2.0f, DisplayChangeObserver::FindDeviceScaleFactor(10000.0f)); | 346 EXPECT_EQ(2.0f, DisplayChangeObserver::FindDeviceScaleFactor(10000.0f)); |
395 } | 347 } |
396 | 348 |
397 TEST_F(DisplayChangeObserverTest, | 349 TEST(DisplayChangeObserverTest, FindExternalDisplayNativeModeWhenOverwritten) { |
398 FindExternalDisplayNativeModeWhenOverwritten) { | 350 std::unique_ptr<ui::DisplaySnapshot> display_snapshot = |
399 std::vector<std::unique_ptr<const ui::DisplayMode>> modes; | 351 display::FakeDisplaySnapshot::Builder() |
400 modes.push_back( | 352 .SetId(123) |
401 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), true, 60)); | 353 .SetNativeMode(MakeDisplayMode(1920, 1080, true, 60)) |
402 modes.push_back( | 354 .AddMode(MakeDisplayMode(1920, 1080, false, 60)) |
403 base::MakeUnique<ui::DisplayMode>(gfx::Size(1920, 1080), false, 60)); | 355 .Build(); |
404 | |
405 ui::TestDisplaySnapshot display_snapshot; | |
406 display_snapshot.set_native_mode(modes[0].get()); | |
407 display_snapshot.set_modes(std::move(modes)); | |
408 | 356 |
409 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = | 357 display::ManagedDisplayInfo::ManagedDisplayModeList display_modes = |
410 DisplayChangeObserver::GetExternalManagedDisplayModeList( | 358 DisplayChangeObserver::GetExternalManagedDisplayModeList( |
411 display_snapshot); | 359 *display_snapshot); |
412 ASSERT_EQ(2u, display_modes.size()); | 360 ASSERT_EQ(2u, display_modes.size()); |
413 EXPECT_EQ("1920x1080", display_modes[0]->size().ToString()); | 361 EXPECT_EQ("1920x1080", display_modes[0]->size().ToString()); |
414 EXPECT_FALSE(display_modes[0]->is_interlaced()); | 362 EXPECT_FALSE(display_modes[0]->is_interlaced()); |
415 EXPECT_FALSE(display_modes[0]->native()); | 363 EXPECT_FALSE(display_modes[0]->native()); |
416 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); | 364 EXPECT_EQ(display_modes[0]->refresh_rate(), 60); |
417 | 365 |
418 EXPECT_EQ("1920x1080", display_modes[1]->size().ToString()); | 366 EXPECT_EQ("1920x1080", display_modes[1]->size().ToString()); |
419 EXPECT_TRUE(display_modes[1]->is_interlaced()); | 367 EXPECT_TRUE(display_modes[1]->is_interlaced()); |
420 EXPECT_TRUE(display_modes[1]->native()); | 368 EXPECT_TRUE(display_modes[1]->native()); |
421 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); | 369 EXPECT_EQ(display_modes[1]->refresh_rate(), 60); |
422 } | 370 } |
423 | 371 |
424 } // namespace ash | 372 } // namespace ash |
OLD | NEW |