Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: ui/ozone/platform/dri/screen_manager_unittest.cc

Issue 844343002: [Ozone-DRI] Add display observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/ozone/platform/dri/screen_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 #include "ui/ozone/platform/dri/dri_buffer.h" 6 #include "ui/ozone/platform/dri/dri_buffer.h"
7 #include "ui/ozone/platform/dri/hardware_display_controller.h" 7 #include "ui/ozone/platform/dri/hardware_display_controller.h"
8 #include "ui/ozone/platform/dri/screen_manager.h" 8 #include "ui/ozone/platform/dri/screen_manager.h"
9 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" 9 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h"
10 10
(...skipping 15 matching lines...) Expand all
26 : ScreenManager(dri, buffer_generator), dri_(dri) {} 26 : ScreenManager(dri, buffer_generator), dri_(dri) {}
27 27
28 void ForceInitializationOfPrimaryDisplay() override {} 28 void ForceInitializationOfPrimaryDisplay() override {}
29 29
30 private: 30 private:
31 ui::DriWrapper* dri_; 31 ui::DriWrapper* dri_;
32 32
33 DISALLOW_COPY_AND_ASSIGN(MockScreenManager); 33 DISALLOW_COPY_AND_ASSIGN(MockScreenManager);
34 }; 34 };
35 35
36 class TestDisplayChangeObserver : public ui::DisplayChangeObserver {
37 public:
38 TestDisplayChangeObserver()
39 : num_displays_changed_(0), num_displays_removed_(0) {}
40
41 ~TestDisplayChangeObserver() override {}
42
43 int num_displays_changed() const { return num_displays_changed_; }
44 int num_displays_removed() const { return num_displays_removed_; }
45
46 // TestDisplayChangeObserver:
47 void OnDisplayChanged(ui::HardwareDisplayController* controller) override {
48 num_displays_changed_++;
49 }
50
51 void OnDisplayRemoved(ui::HardwareDisplayController* controller) override {
52 num_displays_removed_++;
53 }
54
55 private:
56 int num_displays_changed_;
57 int num_displays_removed_;
58
59 DISALLOW_COPY_AND_ASSIGN(TestDisplayChangeObserver);
60 };
61
36 } // namespace 62 } // namespace
37 63
38 class ScreenManagerTest : public testing::Test { 64 class ScreenManagerTest : public testing::Test {
39 public: 65 public:
40 ScreenManagerTest() {} 66 ScreenManagerTest() {}
41 ~ScreenManagerTest() override {} 67 ~ScreenManagerTest() override {}
42 68
43 gfx::Rect GetPrimaryBounds() const { 69 gfx::Rect GetPrimaryBounds() const {
44 return gfx::Rect(0, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay); 70 return gfx::Rect(0, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay);
45 } 71 }
46 72
47 // Secondary is in extended mode, right-of primary. 73 // Secondary is in extended mode, right-of primary.
48 gfx::Rect GetSecondaryBounds() const { 74 gfx::Rect GetSecondaryBounds() const {
49 return gfx::Rect( 75 return gfx::Rect(
50 kDefaultMode.hdisplay, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay); 76 kDefaultMode.hdisplay, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay);
51 } 77 }
52 78
53 void SetUp() override { 79 void SetUp() override {
54 dri_.reset(new ui::MockDriWrapper(3)); 80 dri_.reset(new ui::MockDriWrapper(3));
55 buffer_generator_.reset(new ui::DriBufferGenerator(dri_.get())); 81 buffer_generator_.reset(new ui::DriBufferGenerator(dri_.get()));
56 screen_manager_.reset(new MockScreenManager( 82 screen_manager_.reset(new MockScreenManager(
57 dri_.get(), buffer_generator_.get())); 83 dri_.get(), buffer_generator_.get()));
84 screen_manager_->AddObserver(&observer_);
58 } 85 }
59 void TearDown() override { 86 void TearDown() override {
87 screen_manager_->RemoveObserver(&observer_);
60 screen_manager_.reset(); 88 screen_manager_.reset();
61 dri_.reset(); 89 dri_.reset();
62 } 90 }
63 91
64 protected: 92 protected:
65 scoped_ptr<ui::MockDriWrapper> dri_; 93 scoped_ptr<ui::MockDriWrapper> dri_;
66 scoped_ptr<ui::DriBufferGenerator> buffer_generator_; 94 scoped_ptr<ui::DriBufferGenerator> buffer_generator_;
67 scoped_ptr<MockScreenManager> screen_manager_; 95 scoped_ptr<MockScreenManager> screen_manager_;
68 96
97 TestDisplayChangeObserver observer_;
98
69 private: 99 private:
70 DISALLOW_COPY_AND_ASSIGN(ScreenManagerTest); 100 DISALLOW_COPY_AND_ASSIGN(ScreenManagerTest);
71 }; 101 };
72 102
73 TEST_F(ScreenManagerTest, CheckWithNoControllers) { 103 TEST_F(ScreenManagerTest, CheckWithNoControllers) {
74 EXPECT_FALSE(screen_manager_->GetDisplayController(GetPrimaryBounds())); 104 EXPECT_FALSE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
75 } 105 }
76 106
77 TEST_F(ScreenManagerTest, CheckWithValidController) { 107 TEST_F(ScreenManagerTest, CheckWithValidController) {
78 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 108 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
79 kPrimaryConnector); 109 kPrimaryConnector);
80 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 110 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
81 kPrimaryConnector, 111 kPrimaryConnector,
82 GetPrimaryBounds().origin(), 112 GetPrimaryBounds().origin(),
83 kDefaultMode); 113 kDefaultMode);
84 base::WeakPtr<ui::HardwareDisplayController> controller = 114 ui::HardwareDisplayController* controller =
85 screen_manager_->GetDisplayController(GetPrimaryBounds()); 115 screen_manager_->GetDisplayController(GetPrimaryBounds());
86 116
87 EXPECT_TRUE(controller); 117 EXPECT_TRUE(controller);
88 EXPECT_TRUE(controller->HasCrtc(kPrimaryCrtc)); 118 EXPECT_TRUE(controller->HasCrtc(kPrimaryCrtc));
89 } 119 }
90 120
91 TEST_F(ScreenManagerTest, CheckWithInvalidBounds) { 121 TEST_F(ScreenManagerTest, CheckWithInvalidBounds) {
92 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 122 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
93 kPrimaryConnector); 123 kPrimaryConnector);
94 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 124 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
(...skipping 22 matching lines...) Expand all
117 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds())); 147 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
118 } 148 }
119 149
120 TEST_F(ScreenManagerTest, CheckControllerAfterItIsRemoved) { 150 TEST_F(ScreenManagerTest, CheckControllerAfterItIsRemoved) {
121 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 151 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
122 kPrimaryConnector); 152 kPrimaryConnector);
123 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 153 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
124 kPrimaryConnector, 154 kPrimaryConnector,
125 GetPrimaryBounds().origin(), 155 GetPrimaryBounds().origin(),
126 kDefaultMode); 156 kDefaultMode);
127 base::WeakPtr<ui::HardwareDisplayController> controller = 157 EXPECT_EQ(1, observer_.num_displays_changed());
128 screen_manager_->GetDisplayController(GetPrimaryBounds()); 158 EXPECT_EQ(0, observer_.num_displays_removed());
159 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
129 160
130 EXPECT_TRUE(controller);
131 screen_manager_->RemoveDisplayController(kPrimaryCrtc); 161 screen_manager_->RemoveDisplayController(kPrimaryCrtc);
132 EXPECT_FALSE(controller); 162 EXPECT_EQ(1, observer_.num_displays_changed());
163 EXPECT_EQ(1, observer_.num_displays_removed());
164 EXPECT_FALSE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
133 } 165 }
134 166
135 TEST_F(ScreenManagerTest, CheckDuplicateConfiguration) { 167 TEST_F(ScreenManagerTest, CheckDuplicateConfiguration) {
136 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 168 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
137 kPrimaryConnector); 169 kPrimaryConnector);
138 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 170 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
139 kPrimaryConnector, 171 kPrimaryConnector,
140 GetPrimaryBounds().origin(), 172 GetPrimaryBounds().origin(),
141 kDefaultMode); 173 kDefaultMode);
142 uint32_t framebuffer = dri_->current_framebuffer(); 174 uint32_t framebuffer = dri_->current_framebuffer();
143 175
144 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 176 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
145 kPrimaryConnector, 177 kPrimaryConnector,
146 GetPrimaryBounds().origin(), 178 GetPrimaryBounds().origin(),
147 kDefaultMode); 179 kDefaultMode);
148 180
149 // Should reuse existing framebuffer. 181 // Should reuse existing framebuffer.
150 EXPECT_EQ(framebuffer, dri_->current_framebuffer()); 182 EXPECT_EQ(framebuffer, dri_->current_framebuffer());
151 183
184 EXPECT_EQ(2, observer_.num_displays_changed());
185 EXPECT_EQ(0, observer_.num_displays_removed());
186
152 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); 187 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
153 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); 188 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
154 } 189 }
155 190
156 TEST_F(ScreenManagerTest, CheckChangingMode) { 191 TEST_F(ScreenManagerTest, CheckChangingMode) {
157 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 192 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
158 kPrimaryConnector); 193 kPrimaryConnector);
159 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 194 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
160 kPrimaryConnector, 195 kPrimaryConnector,
161 GetPrimaryBounds().origin(), 196 GetPrimaryBounds().origin(),
162 kDefaultMode); 197 kDefaultMode);
163 drmModeModeInfo new_mode = kDefaultMode; 198 drmModeModeInfo new_mode = kDefaultMode;
164 new_mode.vdisplay = 10; 199 new_mode.vdisplay = 10;
165 screen_manager_->ConfigureDisplayController( 200 screen_manager_->ConfigureDisplayController(
166 kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), new_mode); 201 kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), new_mode);
167 202
203 EXPECT_EQ(2, observer_.num_displays_changed());
204 EXPECT_EQ(0, observer_.num_displays_removed());
205
168 gfx::Rect new_bounds(0, 0, new_mode.hdisplay, new_mode.vdisplay); 206 gfx::Rect new_bounds(0, 0, new_mode.hdisplay, new_mode.vdisplay);
169 EXPECT_TRUE(screen_manager_->GetDisplayController(new_bounds)); 207 EXPECT_TRUE(screen_manager_->GetDisplayController(new_bounds));
170 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); 208 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
171 drmModeModeInfo mode = 209 drmModeModeInfo mode =
172 screen_manager_->GetDisplayController(new_bounds)->get_mode(); 210 screen_manager_->GetDisplayController(new_bounds)->get_mode();
173 EXPECT_EQ(new_mode.vdisplay, mode.vdisplay); 211 EXPECT_EQ(new_mode.vdisplay, mode.vdisplay);
174 EXPECT_EQ(new_mode.hdisplay, mode.hdisplay); 212 EXPECT_EQ(new_mode.hdisplay, mode.hdisplay);
175 } 213 }
176 214
177 TEST_F(ScreenManagerTest, CheckForControllersInMirroredMode) { 215 TEST_F(ScreenManagerTest, CheckForControllersInMirroredMode) {
178 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 216 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
179 kPrimaryConnector); 217 kPrimaryConnector);
180 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 218 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
181 kPrimaryConnector, 219 kPrimaryConnector,
182 GetPrimaryBounds().origin(), 220 GetPrimaryBounds().origin(),
183 kDefaultMode); 221 kDefaultMode);
184 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc, 222 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc,
185 kSecondaryConnector); 223 kSecondaryConnector);
186 screen_manager_->ConfigureDisplayController(kSecondaryCrtc, 224 screen_manager_->ConfigureDisplayController(kSecondaryCrtc,
187 kSecondaryConnector, 225 kSecondaryConnector,
188 GetPrimaryBounds().origin(), 226 GetPrimaryBounds().origin(),
189 kDefaultMode); 227 kDefaultMode);
190 228
229 EXPECT_EQ(2, observer_.num_displays_changed());
230 EXPECT_EQ(1, observer_.num_displays_removed());
191 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); 231 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
192 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); 232 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
193 } 233 }
194 234
195 TEST_F(ScreenManagerTest, CheckMirrorModeTransitions) { 235 TEST_F(ScreenManagerTest, CheckMirrorModeTransitions) {
196 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 236 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
197 kPrimaryConnector); 237 kPrimaryConnector);
198 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 238 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
199 kPrimaryConnector, 239 kPrimaryConnector,
200 GetPrimaryBounds().origin(), 240 GetPrimaryBounds().origin(),
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 kPrimaryConnector, 279 kPrimaryConnector,
240 GetPrimaryBounds().origin(), 280 GetPrimaryBounds().origin(),
241 kDefaultMode); 281 kDefaultMode);
242 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc, 282 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc,
243 kSecondaryConnector); 283 kSecondaryConnector);
244 screen_manager_->ConfigureDisplayController(kSecondaryCrtc, 284 screen_manager_->ConfigureDisplayController(kSecondaryCrtc,
245 kSecondaryConnector, 285 kSecondaryConnector,
246 GetPrimaryBounds().origin(), 286 GetPrimaryBounds().origin(),
247 kDefaultMode); 287 kDefaultMode);
248 288
289 EXPECT_EQ(2, observer_.num_displays_changed());
290 EXPECT_EQ(1, observer_.num_displays_removed());
291
249 screen_manager_->RemoveDisplayController(kSecondaryCrtc); 292 screen_manager_->RemoveDisplayController(kSecondaryCrtc);
250 EXPECT_TRUE( 293 EXPECT_TRUE(
251 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, 294 screen_manager_->ConfigureDisplayController(kPrimaryCrtc,
252 kPrimaryConnector, 295 kPrimaryConnector,
253 GetPrimaryBounds().origin(), 296 GetPrimaryBounds().origin(),
254 kDefaultMode)); 297 kDefaultMode));
298 EXPECT_EQ(3, observer_.num_displays_changed());
299 EXPECT_EQ(1, observer_.num_displays_removed());
300
255 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); 301 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds()));
256 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); 302 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds()));
257 } 303 }
258 304
259 TEST_F(ScreenManagerTest, DoNotEnterMirrorModeUnlessSameBounds) { 305 TEST_F(ScreenManagerTest, DoNotEnterMirrorModeUnlessSameBounds) {
260 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc, 306 screen_manager_->AddDisplayController(dri_.get(), kPrimaryCrtc,
261 kPrimaryConnector); 307 kPrimaryConnector);
262 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc, 308 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc,
263 kSecondaryConnector); 309 kSecondaryConnector);
264 310
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 GetPrimaryBounds().origin(), 353 GetPrimaryBounds().origin(),
308 kDefaultMode); 354 kDefaultMode);
309 screen_manager_->DisableDisplayController(kPrimaryCrtc); 355 screen_manager_->DisableDisplayController(kPrimaryCrtc);
310 356
311 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc, 357 screen_manager_->AddDisplayController(dri_.get(), kSecondaryCrtc,
312 kSecondaryConnector); 358 kSecondaryConnector);
313 screen_manager_->ConfigureDisplayController( 359 screen_manager_->ConfigureDisplayController(
314 kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), 360 kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(),
315 kDefaultMode); 361 kDefaultMode);
316 362
317 base::WeakPtr<ui::HardwareDisplayController> controller = 363 ui::HardwareDisplayController* controller =
318 screen_manager_->GetDisplayController(GetPrimaryBounds()); 364 screen_manager_->GetDisplayController(GetPrimaryBounds());
319 EXPECT_TRUE(controller); 365 EXPECT_TRUE(controller);
320 EXPECT_FALSE(controller->IsMirrored()); 366 EXPECT_FALSE(controller->IsMirrored());
321 367
322 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, kPrimaryConnector, 368 screen_manager_->ConfigureDisplayController(kPrimaryCrtc, kPrimaryConnector,
323 GetPrimaryBounds().origin(), 369 GetPrimaryBounds().origin(),
324 kDefaultMode); 370 kDefaultMode);
325 EXPECT_TRUE(controller); 371 EXPECT_TRUE(controller);
326 EXPECT_TRUE(controller->IsMirrored()); 372 EXPECT_TRUE(controller->IsMirrored());
327 } 373 }
OLDNEW
« no previous file with comments | « ui/ozone/platform/dri/screen_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698