| OLD | NEW |
| 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/crtc_controller.h" | 6 #include "ui/ozone/platform/dri/crtc_controller.h" |
| 7 #include "ui/ozone/platform/dri/dri_buffer.h" | 7 #include "ui/ozone/platform/dri/dri_buffer.h" |
| 8 #include "ui/ozone/platform/dri/hardware_display_controller.h" | 8 #include "ui/ozone/platform/dri/hardware_display_controller.h" |
| 9 #include "ui/ozone/platform/dri/screen_manager.h" | 9 #include "ui/ozone/platform/dri/screen_manager.h" |
| 10 #include "ui/ozone/platform/dri/test/mock_dri_wrapper.h" | 10 #include "ui/ozone/platform/dri/test/mock_drm_device.h" |
| 11 | 11 |
| 12 namespace { | 12 namespace { |
| 13 | 13 |
| 14 // Create a basic mode for a 6x4 screen. | 14 // Create a basic mode for a 6x4 screen. |
| 15 const drmModeModeInfo kDefaultMode = | 15 const drmModeModeInfo kDefaultMode = |
| 16 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; | 16 {0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, {'\0'}}; |
| 17 | 17 |
| 18 const uint32_t kPrimaryCrtc = 1; | 18 const uint32_t kPrimaryCrtc = 1; |
| 19 const uint32_t kPrimaryConnector = 2; | 19 const uint32_t kPrimaryConnector = 2; |
| 20 const uint32_t kSecondaryCrtc = 3; | 20 const uint32_t kSecondaryCrtc = 3; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 return gfx::Rect(0, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay); | 57 return gfx::Rect(0, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay); |
| 58 } | 58 } |
| 59 | 59 |
| 60 // Secondary is in extended mode, right-of primary. | 60 // Secondary is in extended mode, right-of primary. |
| 61 gfx::Rect GetSecondaryBounds() const { | 61 gfx::Rect GetSecondaryBounds() const { |
| 62 return gfx::Rect( | 62 return gfx::Rect( |
| 63 kDefaultMode.hdisplay, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay); | 63 kDefaultMode.hdisplay, 0, kDefaultMode.hdisplay, kDefaultMode.vdisplay); |
| 64 } | 64 } |
| 65 | 65 |
| 66 void SetUp() override { | 66 void SetUp() override { |
| 67 dri_ = new ui::MockDriWrapper(); | 67 drm_ = new ui::MockDrmDevice(); |
| 68 buffer_generator_.reset(new ui::DriBufferGenerator()); | 68 buffer_generator_.reset(new ui::DriBufferGenerator()); |
| 69 screen_manager_.reset(new ui::ScreenManager(buffer_generator_.get())); | 69 screen_manager_.reset(new ui::ScreenManager(buffer_generator_.get())); |
| 70 screen_manager_->AddObserver(&observer_); | 70 screen_manager_->AddObserver(&observer_); |
| 71 } | 71 } |
| 72 void TearDown() override { | 72 void TearDown() override { |
| 73 screen_manager_->RemoveObserver(&observer_); | 73 screen_manager_->RemoveObserver(&observer_); |
| 74 screen_manager_.reset(); | 74 screen_manager_.reset(); |
| 75 dri_ = nullptr; | 75 drm_ = nullptr; |
| 76 } | 76 } |
| 77 | 77 |
| 78 protected: | 78 protected: |
| 79 scoped_refptr<ui::MockDriWrapper> dri_; | 79 scoped_refptr<ui::MockDrmDevice> drm_; |
| 80 scoped_ptr<ui::DriBufferGenerator> buffer_generator_; | 80 scoped_ptr<ui::DriBufferGenerator> buffer_generator_; |
| 81 scoped_ptr<ui::ScreenManager> screen_manager_; | 81 scoped_ptr<ui::ScreenManager> screen_manager_; |
| 82 | 82 |
| 83 TestDisplayChangeObserver observer_; | 83 TestDisplayChangeObserver observer_; |
| 84 | 84 |
| 85 private: | 85 private: |
| 86 DISALLOW_COPY_AND_ASSIGN(ScreenManagerTest); | 86 DISALLOW_COPY_AND_ASSIGN(ScreenManagerTest); |
| 87 }; | 87 }; |
| 88 | 88 |
| 89 TEST_F(ScreenManagerTest, CheckWithNoControllers) { | 89 TEST_F(ScreenManagerTest, CheckWithNoControllers) { |
| 90 EXPECT_FALSE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 90 EXPECT_FALSE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 91 } | 91 } |
| 92 | 92 |
| 93 TEST_F(ScreenManagerTest, CheckWithValidController) { | 93 TEST_F(ScreenManagerTest, CheckWithValidController) { |
| 94 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 94 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 95 screen_manager_->ConfigureDisplayController( | 95 screen_manager_->ConfigureDisplayController( |
| 96 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 96 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 97 kDefaultMode); | 97 kDefaultMode); |
| 98 ui::HardwareDisplayController* controller = | 98 ui::HardwareDisplayController* controller = |
| 99 screen_manager_->GetDisplayController(GetPrimaryBounds()); | 99 screen_manager_->GetDisplayController(GetPrimaryBounds()); |
| 100 | 100 |
| 101 EXPECT_TRUE(controller); | 101 EXPECT_TRUE(controller); |
| 102 EXPECT_TRUE(controller->HasCrtc(dri_, kPrimaryCrtc)); | 102 EXPECT_TRUE(controller->HasCrtc(drm_, kPrimaryCrtc)); |
| 103 } | 103 } |
| 104 | 104 |
| 105 TEST_F(ScreenManagerTest, CheckWithInvalidBounds) { | 105 TEST_F(ScreenManagerTest, CheckWithInvalidBounds) { |
| 106 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 106 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 107 screen_manager_->ConfigureDisplayController( | 107 screen_manager_->ConfigureDisplayController( |
| 108 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 108 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 109 kDefaultMode); | 109 kDefaultMode); |
| 110 | 110 |
| 111 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 111 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 112 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 112 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 113 } | 113 } |
| 114 | 114 |
| 115 TEST_F(ScreenManagerTest, CheckForSecondValidController) { | 115 TEST_F(ScreenManagerTest, CheckForSecondValidController) { |
| 116 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 116 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 117 screen_manager_->ConfigureDisplayController( | 117 screen_manager_->ConfigureDisplayController( |
| 118 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 118 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 119 kDefaultMode); | 119 kDefaultMode); |
| 120 screen_manager_->AddDisplayController(dri_, kSecondaryCrtc, | 120 screen_manager_->AddDisplayController(drm_, kSecondaryCrtc, |
| 121 kSecondaryConnector); | 121 kSecondaryConnector); |
| 122 screen_manager_->ConfigureDisplayController( | 122 screen_manager_->ConfigureDisplayController( |
| 123 dri_, kSecondaryCrtc, kSecondaryConnector, GetSecondaryBounds().origin(), | 123 drm_, kSecondaryCrtc, kSecondaryConnector, GetSecondaryBounds().origin(), |
| 124 kDefaultMode); | 124 kDefaultMode); |
| 125 | 125 |
| 126 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 126 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 127 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 127 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 128 } | 128 } |
| 129 | 129 |
| 130 TEST_F(ScreenManagerTest, CheckControllerAfterItIsRemoved) { | 130 TEST_F(ScreenManagerTest, CheckControllerAfterItIsRemoved) { |
| 131 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 131 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 132 screen_manager_->ConfigureDisplayController( | 132 screen_manager_->ConfigureDisplayController( |
| 133 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 133 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 134 kDefaultMode); | 134 kDefaultMode); |
| 135 EXPECT_EQ(1, observer_.num_displays_changed()); | 135 EXPECT_EQ(1, observer_.num_displays_changed()); |
| 136 EXPECT_EQ(0, observer_.num_displays_removed()); | 136 EXPECT_EQ(0, observer_.num_displays_removed()); |
| 137 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 137 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 138 | 138 |
| 139 screen_manager_->RemoveDisplayController(dri_, kPrimaryCrtc); | 139 screen_manager_->RemoveDisplayController(drm_, kPrimaryCrtc); |
| 140 EXPECT_EQ(1, observer_.num_displays_changed()); | 140 EXPECT_EQ(1, observer_.num_displays_changed()); |
| 141 EXPECT_EQ(1, observer_.num_displays_removed()); | 141 EXPECT_EQ(1, observer_.num_displays_removed()); |
| 142 EXPECT_FALSE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 142 EXPECT_FALSE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 143 } | 143 } |
| 144 | 144 |
| 145 TEST_F(ScreenManagerTest, CheckDuplicateConfiguration) { | 145 TEST_F(ScreenManagerTest, CheckDuplicateConfiguration) { |
| 146 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 146 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 147 screen_manager_->ConfigureDisplayController( | 147 screen_manager_->ConfigureDisplayController( |
| 148 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 148 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 149 kDefaultMode); | 149 kDefaultMode); |
| 150 uint32_t framebuffer = dri_->current_framebuffer(); | 150 uint32_t framebuffer = drm_->current_framebuffer(); |
| 151 | 151 |
| 152 screen_manager_->ConfigureDisplayController( | 152 screen_manager_->ConfigureDisplayController( |
| 153 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 153 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 154 kDefaultMode); | 154 kDefaultMode); |
| 155 | 155 |
| 156 // Should reuse existing framebuffer. | 156 // Should reuse existing framebuffer. |
| 157 EXPECT_EQ(framebuffer, dri_->current_framebuffer()); | 157 EXPECT_EQ(framebuffer, drm_->current_framebuffer()); |
| 158 | 158 |
| 159 EXPECT_EQ(2, observer_.num_displays_changed()); | 159 EXPECT_EQ(2, observer_.num_displays_changed()); |
| 160 EXPECT_EQ(0, observer_.num_displays_removed()); | 160 EXPECT_EQ(0, observer_.num_displays_removed()); |
| 161 | 161 |
| 162 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 162 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 163 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 163 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 164 } | 164 } |
| 165 | 165 |
| 166 TEST_F(ScreenManagerTest, CheckChangingMode) { | 166 TEST_F(ScreenManagerTest, CheckChangingMode) { |
| 167 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 167 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 168 screen_manager_->ConfigureDisplayController( | 168 screen_manager_->ConfigureDisplayController( |
| 169 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 169 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 170 kDefaultMode); | 170 kDefaultMode); |
| 171 drmModeModeInfo new_mode = kDefaultMode; | 171 drmModeModeInfo new_mode = kDefaultMode; |
| 172 new_mode.vdisplay = 10; | 172 new_mode.vdisplay = 10; |
| 173 screen_manager_->ConfigureDisplayController( | 173 screen_manager_->ConfigureDisplayController( |
| 174 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 174 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 175 new_mode); | 175 new_mode); |
| 176 | 176 |
| 177 EXPECT_EQ(2, observer_.num_displays_changed()); | 177 EXPECT_EQ(2, observer_.num_displays_changed()); |
| 178 EXPECT_EQ(0, observer_.num_displays_removed()); | 178 EXPECT_EQ(0, observer_.num_displays_removed()); |
| 179 | 179 |
| 180 gfx::Rect new_bounds(0, 0, new_mode.hdisplay, new_mode.vdisplay); | 180 gfx::Rect new_bounds(0, 0, new_mode.hdisplay, new_mode.vdisplay); |
| 181 EXPECT_TRUE(screen_manager_->GetDisplayController(new_bounds)); | 181 EXPECT_TRUE(screen_manager_->GetDisplayController(new_bounds)); |
| 182 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 182 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 183 drmModeModeInfo mode = | 183 drmModeModeInfo mode = |
| 184 screen_manager_->GetDisplayController(new_bounds)->get_mode(); | 184 screen_manager_->GetDisplayController(new_bounds)->get_mode(); |
| 185 EXPECT_EQ(new_mode.vdisplay, mode.vdisplay); | 185 EXPECT_EQ(new_mode.vdisplay, mode.vdisplay); |
| 186 EXPECT_EQ(new_mode.hdisplay, mode.hdisplay); | 186 EXPECT_EQ(new_mode.hdisplay, mode.hdisplay); |
| 187 } | 187 } |
| 188 | 188 |
| 189 TEST_F(ScreenManagerTest, CheckForControllersInMirroredMode) { | 189 TEST_F(ScreenManagerTest, CheckForControllersInMirroredMode) { |
| 190 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 190 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 191 screen_manager_->ConfigureDisplayController( | 191 screen_manager_->ConfigureDisplayController( |
| 192 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 192 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 193 kDefaultMode); | 193 kDefaultMode); |
| 194 screen_manager_->AddDisplayController(dri_, kSecondaryCrtc, | 194 screen_manager_->AddDisplayController(drm_, kSecondaryCrtc, |
| 195 kSecondaryConnector); | 195 kSecondaryConnector); |
| 196 screen_manager_->ConfigureDisplayController( | 196 screen_manager_->ConfigureDisplayController( |
| 197 dri_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), | 197 drm_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), |
| 198 kDefaultMode); | 198 kDefaultMode); |
| 199 | 199 |
| 200 EXPECT_EQ(2, observer_.num_displays_changed()); | 200 EXPECT_EQ(2, observer_.num_displays_changed()); |
| 201 EXPECT_EQ(1, observer_.num_displays_removed()); | 201 EXPECT_EQ(1, observer_.num_displays_removed()); |
| 202 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 202 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 203 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 203 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 204 } | 204 } |
| 205 | 205 |
| 206 TEST_F(ScreenManagerTest, CheckMirrorModeTransitions) { | 206 TEST_F(ScreenManagerTest, CheckMirrorModeTransitions) { |
| 207 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 207 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 208 screen_manager_->ConfigureDisplayController( | 208 screen_manager_->ConfigureDisplayController( |
| 209 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 209 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 210 kDefaultMode); | 210 kDefaultMode); |
| 211 screen_manager_->AddDisplayController(dri_, kSecondaryCrtc, | 211 screen_manager_->AddDisplayController(drm_, kSecondaryCrtc, |
| 212 kSecondaryConnector); | 212 kSecondaryConnector); |
| 213 screen_manager_->ConfigureDisplayController( | 213 screen_manager_->ConfigureDisplayController( |
| 214 dri_, kSecondaryCrtc, kSecondaryConnector, GetSecondaryBounds().origin(), | 214 drm_, kSecondaryCrtc, kSecondaryConnector, GetSecondaryBounds().origin(), |
| 215 kDefaultMode); | 215 kDefaultMode); |
| 216 | 216 |
| 217 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 217 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 218 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 218 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 219 | 219 |
| 220 screen_manager_->ConfigureDisplayController( | 220 screen_manager_->ConfigureDisplayController( |
| 221 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 221 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 222 kDefaultMode); | 222 kDefaultMode); |
| 223 screen_manager_->ConfigureDisplayController( | 223 screen_manager_->ConfigureDisplayController( |
| 224 dri_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), | 224 drm_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), |
| 225 kDefaultMode); | 225 kDefaultMode); |
| 226 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 226 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 227 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 227 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 228 | 228 |
| 229 screen_manager_->ConfigureDisplayController( | 229 screen_manager_->ConfigureDisplayController( |
| 230 dri_, kPrimaryCrtc, kPrimaryConnector, GetSecondaryBounds().origin(), | 230 drm_, kPrimaryCrtc, kPrimaryConnector, GetSecondaryBounds().origin(), |
| 231 kDefaultMode); | 231 kDefaultMode); |
| 232 screen_manager_->ConfigureDisplayController( | 232 screen_manager_->ConfigureDisplayController( |
| 233 dri_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), | 233 drm_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), |
| 234 kDefaultMode); | 234 kDefaultMode); |
| 235 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 235 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 236 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 236 EXPECT_TRUE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 237 } | 237 } |
| 238 | 238 |
| 239 TEST_F(ScreenManagerTest, MonitorGoneInMirrorMode) { | 239 TEST_F(ScreenManagerTest, MonitorGoneInMirrorMode) { |
| 240 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 240 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 241 screen_manager_->ConfigureDisplayController( | 241 screen_manager_->ConfigureDisplayController( |
| 242 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 242 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 243 kDefaultMode); | 243 kDefaultMode); |
| 244 screen_manager_->AddDisplayController(dri_, kSecondaryCrtc, | 244 screen_manager_->AddDisplayController(drm_, kSecondaryCrtc, |
| 245 kSecondaryConnector); | 245 kSecondaryConnector); |
| 246 screen_manager_->ConfigureDisplayController( | 246 screen_manager_->ConfigureDisplayController( |
| 247 dri_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), | 247 drm_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), |
| 248 kDefaultMode); | 248 kDefaultMode); |
| 249 | 249 |
| 250 EXPECT_EQ(2, observer_.num_displays_changed()); | 250 EXPECT_EQ(2, observer_.num_displays_changed()); |
| 251 EXPECT_EQ(1, observer_.num_displays_removed()); | 251 EXPECT_EQ(1, observer_.num_displays_removed()); |
| 252 | 252 |
| 253 screen_manager_->RemoveDisplayController(dri_, kSecondaryCrtc); | 253 screen_manager_->RemoveDisplayController(drm_, kSecondaryCrtc); |
| 254 EXPECT_TRUE(screen_manager_->ConfigureDisplayController( | 254 EXPECT_TRUE(screen_manager_->ConfigureDisplayController( |
| 255 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 255 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 256 kDefaultMode)); | 256 kDefaultMode)); |
| 257 EXPECT_EQ(3, observer_.num_displays_changed()); | 257 EXPECT_EQ(3, observer_.num_displays_changed()); |
| 258 EXPECT_EQ(1, observer_.num_displays_removed()); | 258 EXPECT_EQ(1, observer_.num_displays_removed()); |
| 259 | 259 |
| 260 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); | 260 EXPECT_TRUE(screen_manager_->GetDisplayController(GetPrimaryBounds())); |
| 261 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); | 261 EXPECT_FALSE(screen_manager_->GetDisplayController(GetSecondaryBounds())); |
| 262 } | 262 } |
| 263 | 263 |
| 264 TEST_F(ScreenManagerTest, DoNotEnterMirrorModeUnlessSameBounds) { | 264 TEST_F(ScreenManagerTest, DoNotEnterMirrorModeUnlessSameBounds) { |
| 265 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 265 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 266 screen_manager_->AddDisplayController(dri_, kSecondaryCrtc, | 266 screen_manager_->AddDisplayController(drm_, kSecondaryCrtc, |
| 267 kSecondaryConnector); | 267 kSecondaryConnector); |
| 268 | 268 |
| 269 // Configure displays in extended mode. | 269 // Configure displays in extended mode. |
| 270 screen_manager_->ConfigureDisplayController( | 270 screen_manager_->ConfigureDisplayController( |
| 271 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 271 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 272 kDefaultMode); | 272 kDefaultMode); |
| 273 screen_manager_->ConfigureDisplayController( | 273 screen_manager_->ConfigureDisplayController( |
| 274 dri_, kSecondaryCrtc, kSecondaryConnector, GetSecondaryBounds().origin(), | 274 drm_, kSecondaryCrtc, kSecondaryConnector, GetSecondaryBounds().origin(), |
| 275 kDefaultMode); | 275 kDefaultMode); |
| 276 | 276 |
| 277 drmModeModeInfo new_mode = kDefaultMode; | 277 drmModeModeInfo new_mode = kDefaultMode; |
| 278 new_mode.vdisplay = 10; | 278 new_mode.vdisplay = 10; |
| 279 // Shouldn't enter mirror mode unless the display bounds are the same. | 279 // Shouldn't enter mirror mode unless the display bounds are the same. |
| 280 screen_manager_->ConfigureDisplayController( | 280 screen_manager_->ConfigureDisplayController( |
| 281 dri_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), | 281 drm_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), |
| 282 new_mode); | 282 new_mode); |
| 283 | 283 |
| 284 EXPECT_FALSE( | 284 EXPECT_FALSE( |
| 285 screen_manager_->GetDisplayController(GetPrimaryBounds())->IsMirrored()); | 285 screen_manager_->GetDisplayController(GetPrimaryBounds())->IsMirrored()); |
| 286 } | 286 } |
| 287 | 287 |
| 288 TEST_F(ScreenManagerTest, ReuseFramebufferIfDisabledThenReEnabled) { | 288 TEST_F(ScreenManagerTest, ReuseFramebufferIfDisabledThenReEnabled) { |
| 289 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 289 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 290 screen_manager_->ConfigureDisplayController( | 290 screen_manager_->ConfigureDisplayController( |
| 291 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 291 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 292 kDefaultMode); | 292 kDefaultMode); |
| 293 uint32_t framebuffer = dri_->current_framebuffer(); | 293 uint32_t framebuffer = drm_->current_framebuffer(); |
| 294 | 294 |
| 295 screen_manager_->DisableDisplayController(dri_, kPrimaryCrtc); | 295 screen_manager_->DisableDisplayController(drm_, kPrimaryCrtc); |
| 296 EXPECT_EQ(0u, dri_->current_framebuffer()); | 296 EXPECT_EQ(0u, drm_->current_framebuffer()); |
| 297 | 297 |
| 298 screen_manager_->ConfigureDisplayController( | 298 screen_manager_->ConfigureDisplayController( |
| 299 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 299 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 300 kDefaultMode); | 300 kDefaultMode); |
| 301 | 301 |
| 302 // Should reuse existing framebuffer. | 302 // Should reuse existing framebuffer. |
| 303 EXPECT_EQ(framebuffer, dri_->current_framebuffer()); | 303 EXPECT_EQ(framebuffer, drm_->current_framebuffer()); |
| 304 } | 304 } |
| 305 | 305 |
| 306 TEST_F(ScreenManagerTest, CheckMirrorModeAfterBeginReEnabled) { | 306 TEST_F(ScreenManagerTest, CheckMirrorModeAfterBeginReEnabled) { |
| 307 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 307 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 308 screen_manager_->ConfigureDisplayController( | 308 screen_manager_->ConfigureDisplayController( |
| 309 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 309 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 310 kDefaultMode); | 310 kDefaultMode); |
| 311 screen_manager_->DisableDisplayController(dri_, kPrimaryCrtc); | 311 screen_manager_->DisableDisplayController(drm_, kPrimaryCrtc); |
| 312 | 312 |
| 313 screen_manager_->AddDisplayController(dri_, kSecondaryCrtc, | 313 screen_manager_->AddDisplayController(drm_, kSecondaryCrtc, |
| 314 kSecondaryConnector); | 314 kSecondaryConnector); |
| 315 screen_manager_->ConfigureDisplayController( | 315 screen_manager_->ConfigureDisplayController( |
| 316 dri_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), | 316 drm_, kSecondaryCrtc, kSecondaryConnector, GetPrimaryBounds().origin(), |
| 317 kDefaultMode); | 317 kDefaultMode); |
| 318 | 318 |
| 319 ui::HardwareDisplayController* controller = | 319 ui::HardwareDisplayController* controller = |
| 320 screen_manager_->GetDisplayController(GetPrimaryBounds()); | 320 screen_manager_->GetDisplayController(GetPrimaryBounds()); |
| 321 EXPECT_TRUE(controller); | 321 EXPECT_TRUE(controller); |
| 322 EXPECT_FALSE(controller->IsMirrored()); | 322 EXPECT_FALSE(controller->IsMirrored()); |
| 323 | 323 |
| 324 screen_manager_->ConfigureDisplayController( | 324 screen_manager_->ConfigureDisplayController( |
| 325 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 325 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 326 kDefaultMode); | 326 kDefaultMode); |
| 327 EXPECT_TRUE(controller); | 327 EXPECT_TRUE(controller); |
| 328 EXPECT_TRUE(controller->IsMirrored()); | 328 EXPECT_TRUE(controller->IsMirrored()); |
| 329 } | 329 } |
| 330 | 330 |
| 331 TEST_F(ScreenManagerTest, | 331 TEST_F(ScreenManagerTest, |
| 332 CheckProperConfigurationWithDifferentDeviceAndSameCrtc) { | 332 CheckProperConfigurationWithDifferentDeviceAndSameCrtc) { |
| 333 scoped_refptr<ui::MockDriWrapper> dri2 = new ui::MockDriWrapper(); | 333 scoped_refptr<ui::MockDrmDevice> drm2 = new ui::MockDrmDevice(); |
| 334 | 334 |
| 335 screen_manager_->AddDisplayController(dri_, kPrimaryCrtc, kPrimaryConnector); | 335 screen_manager_->AddDisplayController(drm_, kPrimaryCrtc, kPrimaryConnector); |
| 336 screen_manager_->AddDisplayController(dri2, kPrimaryCrtc, kPrimaryConnector); | 336 screen_manager_->AddDisplayController(drm2, kPrimaryCrtc, kPrimaryConnector); |
| 337 | 337 |
| 338 screen_manager_->ConfigureDisplayController( | 338 screen_manager_->ConfigureDisplayController( |
| 339 dri_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), | 339 drm_, kPrimaryCrtc, kPrimaryConnector, GetPrimaryBounds().origin(), |
| 340 kDefaultMode); | 340 kDefaultMode); |
| 341 screen_manager_->ConfigureDisplayController( | 341 screen_manager_->ConfigureDisplayController( |
| 342 dri2, kPrimaryCrtc, kPrimaryConnector, GetSecondaryBounds().origin(), | 342 drm2, kPrimaryCrtc, kPrimaryConnector, GetSecondaryBounds().origin(), |
| 343 kDefaultMode); | 343 kDefaultMode); |
| 344 | 344 |
| 345 ui::HardwareDisplayController* controller1 = | 345 ui::HardwareDisplayController* controller1 = |
| 346 screen_manager_->GetDisplayController(GetPrimaryBounds()); | 346 screen_manager_->GetDisplayController(GetPrimaryBounds()); |
| 347 ui::HardwareDisplayController* controller2 = | 347 ui::HardwareDisplayController* controller2 = |
| 348 screen_manager_->GetDisplayController(GetSecondaryBounds()); | 348 screen_manager_->GetDisplayController(GetSecondaryBounds()); |
| 349 | 349 |
| 350 EXPECT_NE(controller1, controller2); | 350 EXPECT_NE(controller1, controller2); |
| 351 EXPECT_EQ(dri_, controller1->crtc_controllers()[0]->drm()); | 351 EXPECT_EQ(drm_, controller1->crtc_controllers()[0]->drm()); |
| 352 EXPECT_EQ(dri2, controller2->crtc_controllers()[0]->drm()); | 352 EXPECT_EQ(drm2, controller2->crtc_controllers()[0]->drm()); |
| 353 } | 353 } |
| OLD | NEW |