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 "ui/ozone/platform/drm/gpu/screen_manager.h" | 5 #include "ui/ozone/platform/drm/gpu/screen_manager.h" |
6 | 6 |
7 #include <xf86drmMode.h> | 7 #include <xf86drmMode.h> |
8 | 8 |
9 #include "third_party/skia/include/core/SkCanvas.h" | 9 #include "third_party/skia/include/core/SkCanvas.h" |
10 #include "ui/gfx/geometry/point.h" | 10 #include "ui/gfx/geometry/point.h" |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
91 controllers_.push_back(new HardwareDisplayController( | 91 controllers_.push_back(new HardwareDisplayController( |
92 scoped_ptr<CrtcController>(new CrtcController(drm, crtc, connector)))); | 92 scoped_ptr<CrtcController>(new CrtcController(drm, crtc, connector)))); |
93 } | 93 } |
94 | 94 |
95 void ScreenManager::RemoveDisplayController(const scoped_refptr<DrmDevice>& drm, | 95 void ScreenManager::RemoveDisplayController(const scoped_refptr<DrmDevice>& drm, |
96 uint32_t crtc) { | 96 uint32_t crtc) { |
97 HardwareDisplayControllers::iterator it = FindDisplayController(drm, crtc); | 97 HardwareDisplayControllers::iterator it = FindDisplayController(drm, crtc); |
98 if (it != controllers_.end()) { | 98 if (it != controllers_.end()) { |
99 bool is_mirrored = (*it)->IsMirrored(); | 99 bool is_mirrored = (*it)->IsMirrored(); |
100 (*it)->RemoveCrtc(drm, crtc); | 100 (*it)->RemoveCrtc(drm, crtc); |
101 if (!is_mirrored) { | 101 if (!is_mirrored) |
102 UpdateControllerToWindowMapping(); | 102 RemoveController(it); |
103 controllers_.erase(it); | |
alexst (slow to review)
2015/04/15 00:50:02
I want to say there was a reason why this was remo
spang
2015/04/15 02:12:11
I don't think we are intentionally invoking UB and
dnicoara
2015/04/15 13:43:41
Yeah, order is messed up.
| |
104 } | |
105 } | 103 } |
106 } | 104 } |
107 | 105 |
108 bool ScreenManager::ConfigureDisplayController( | 106 bool ScreenManager::ConfigureDisplayController( |
109 const scoped_refptr<DrmDevice>& drm, | 107 const scoped_refptr<DrmDevice>& drm, |
110 uint32_t crtc, | 108 uint32_t crtc, |
111 uint32_t connector, | 109 uint32_t connector, |
112 const gfx::Point& origin, | 110 const gfx::Point& origin, |
113 const drmModeModeInfo& mode) { | 111 const drmModeModeInfo& mode) { |
114 bool status = | 112 bool status = |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
277 } | 275 } |
278 | 276 |
279 bool ScreenManager::HandleMirrorMode( | 277 bool ScreenManager::HandleMirrorMode( |
280 HardwareDisplayControllers::iterator original, | 278 HardwareDisplayControllers::iterator original, |
281 HardwareDisplayControllers::iterator mirror, | 279 HardwareDisplayControllers::iterator mirror, |
282 const scoped_refptr<DrmDevice>& drm, | 280 const scoped_refptr<DrmDevice>& drm, |
283 uint32_t crtc, | 281 uint32_t crtc, |
284 uint32_t connector) { | 282 uint32_t connector) { |
285 (*mirror)->AddCrtc((*original)->RemoveCrtc(drm, crtc)); | 283 (*mirror)->AddCrtc((*original)->RemoveCrtc(drm, crtc)); |
286 if ((*mirror)->Enable()) { | 284 if ((*mirror)->Enable()) { |
287 controllers_.erase(original); | 285 RemoveController(original); |
dnicoara
2015/04/15 13:43:41
This will cause UpdateControllerToWindowMapping()
spang
2015/04/15 13:48:24
Done.
| |
288 return true; | 286 return true; |
289 } | 287 } |
290 | 288 |
291 LOG(ERROR) << "Failed to switch to mirror mode"; | 289 LOG(ERROR) << "Failed to switch to mirror mode"; |
292 | 290 |
293 // When things go wrong revert back to the previous configuration since | 291 // When things go wrong revert back to the previous configuration since |
294 // it is expected that the configuration would not have changed if | 292 // it is expected that the configuration would not have changed if |
295 // things fail. | 293 // things fail. |
296 (*original)->AddCrtc((*mirror)->RemoveCrtc(drm, crtc)); | 294 (*original)->AddCrtc((*mirror)->RemoveCrtc(drm, crtc)); |
297 (*original)->Enable(); | 295 (*original)->Enable(); |
(...skipping 28 matching lines...) Expand all Loading... | |
326 | 324 |
327 DrmWindow* ScreenManager::FindWindowAt(const gfx::Rect& bounds) const { | 325 DrmWindow* ScreenManager::FindWindowAt(const gfx::Rect& bounds) const { |
328 for (auto pair : window_map_) { | 326 for (auto pair : window_map_) { |
329 if (pair.second->bounds() == bounds) | 327 if (pair.second->bounds() == bounds) |
330 return pair.second; | 328 return pair.second; |
331 } | 329 } |
332 | 330 |
333 return nullptr; | 331 return nullptr; |
334 } | 332 } |
335 | 333 |
334 void ScreenManager::RemoveController( | |
335 HardwareDisplayControllers::iterator controller) { | |
336 controllers_.erase(controller); | |
337 UpdateControllerToWindowMapping(); | |
338 } | |
339 | |
336 } // namespace ui | 340 } // namespace ui |
OLD | NEW |