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/drm_gpu_display_manager.h" | 5 #include "ui/ozone/platform/drm/gpu/drm_gpu_display_manager.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
| 9 #include "base/memory/ptr_util.h" |
9 #include "ui/display/types/gamma_ramp_rgb_entry.h" | 10 #include "ui/display/types/gamma_ramp_rgb_entry.h" |
10 #include "ui/ozone/common/display_util.h" | 11 #include "ui/ozone/common/display_util.h" |
11 #include "ui/ozone/platform/drm/common/drm_util.h" | 12 #include "ui/ozone/platform/drm/common/drm_util.h" |
12 #include "ui/ozone/platform/drm/gpu/drm_device.h" | 13 #include "ui/ozone/platform/drm/gpu/drm_device.h" |
13 #include "ui/ozone/platform/drm/gpu/drm_device_manager.h" | 14 #include "ui/ozone/platform/drm/gpu/drm_device_manager.h" |
14 #include "ui/ozone/platform/drm/gpu/drm_display.h" | 15 #include "ui/ozone/platform/drm/gpu/drm_display.h" |
15 #include "ui/ozone/platform/drm/gpu/screen_manager.h" | 16 #include "ui/ozone/platform/drm/gpu/screen_manager.h" |
16 | 17 |
17 namespace ui { | 18 namespace ui { |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 class DisplayComparator { | 22 class DisplayComparator { |
22 public: | 23 public: |
23 explicit DisplayComparator(const DrmDisplay* display) | 24 explicit DisplayComparator(const DrmDisplay* display) |
24 : drm_(display->drm()), | 25 : drm_(display->drm()), |
25 crtc_(display->crtc()), | 26 crtc_(display->crtc()), |
26 connector_(display->connector()) {} | 27 connector_(display->connector()) {} |
27 | 28 |
28 DisplayComparator(const scoped_refptr<DrmDevice>& drm, | 29 DisplayComparator(const scoped_refptr<DrmDevice>& drm, |
29 uint32_t crtc, | 30 uint32_t crtc, |
30 uint32_t connector) | 31 uint32_t connector) |
31 : drm_(drm), crtc_(crtc), connector_(connector) {} | 32 : drm_(drm), crtc_(crtc), connector_(connector) {} |
32 | 33 |
33 bool operator()(const scoped_ptr<DrmDisplay>& other) const { | 34 bool operator()(const std::unique_ptr<DrmDisplay>& other) const { |
34 return drm_ == other->drm() && connector_ == other->connector() && | 35 return drm_ == other->drm() && connector_ == other->connector() && |
35 crtc_ == other->crtc(); | 36 crtc_ == other->crtc(); |
36 } | 37 } |
37 | 38 |
38 private: | 39 private: |
39 scoped_refptr<DrmDevice> drm_; | 40 scoped_refptr<DrmDevice> drm_; |
40 uint32_t crtc_; | 41 uint32_t crtc_; |
41 uint32_t connector_; | 42 uint32_t connector_; |
42 }; | 43 }; |
43 | 44 |
(...skipping 17 matching lines...) Expand all Loading... |
61 | 62 |
62 DrmGpuDisplayManager::DrmGpuDisplayManager(ScreenManager* screen_manager, | 63 DrmGpuDisplayManager::DrmGpuDisplayManager(ScreenManager* screen_manager, |
63 DrmDeviceManager* drm_device_manager) | 64 DrmDeviceManager* drm_device_manager) |
64 : screen_manager_(screen_manager), drm_device_manager_(drm_device_manager) { | 65 : screen_manager_(screen_manager), drm_device_manager_(drm_device_manager) { |
65 } | 66 } |
66 | 67 |
67 DrmGpuDisplayManager::~DrmGpuDisplayManager() { | 68 DrmGpuDisplayManager::~DrmGpuDisplayManager() { |
68 } | 69 } |
69 | 70 |
70 std::vector<DisplaySnapshot_Params> DrmGpuDisplayManager::GetDisplays() { | 71 std::vector<DisplaySnapshot_Params> DrmGpuDisplayManager::GetDisplays() { |
71 std::vector<scoped_ptr<DrmDisplay>> old_displays; | 72 std::vector<std::unique_ptr<DrmDisplay>> old_displays; |
72 old_displays.swap(displays_); | 73 old_displays.swap(displays_); |
73 std::vector<DisplaySnapshot_Params> params_list; | 74 std::vector<DisplaySnapshot_Params> params_list; |
74 | 75 |
75 const DrmDeviceVector& devices = drm_device_manager_->GetDrmDevices(); | 76 const DrmDeviceVector& devices = drm_device_manager_->GetDrmDevices(); |
76 size_t device_index = 0; | 77 size_t device_index = 0; |
77 for (const auto& drm : devices) { | 78 for (const auto& drm : devices) { |
78 ScopedVector<HardwareDisplayControllerInfo> display_infos = | 79 ScopedVector<HardwareDisplayControllerInfo> display_infos = |
79 GetAvailableDisplayControllerInfos(drm->get_fd()); | 80 GetAvailableDisplayControllerInfos(drm->get_fd()); |
80 for (auto* display_info : display_infos) { | 81 for (auto* display_info : display_infos) { |
81 auto it = std::find_if( | 82 auto it = std::find_if( |
82 old_displays.begin(), old_displays.end(), | 83 old_displays.begin(), old_displays.end(), |
83 DisplayComparator(drm, display_info->crtc()->crtc_id, | 84 DisplayComparator(drm, display_info->crtc()->crtc_id, |
84 display_info->connector()->connector_id)); | 85 display_info->connector()->connector_id)); |
85 if (it != old_displays.end()) { | 86 if (it != old_displays.end()) { |
86 displays_.push_back(std::move(*it)); | 87 displays_.push_back(std::move(*it)); |
87 old_displays.erase(it); | 88 old_displays.erase(it); |
88 } else { | 89 } else { |
89 displays_.push_back( | 90 displays_.push_back( |
90 make_scoped_ptr(new DrmDisplay(screen_manager_, drm))); | 91 base::WrapUnique(new DrmDisplay(screen_manager_, drm))); |
91 } | 92 } |
92 params_list.push_back( | 93 params_list.push_back( |
93 displays_.back()->Update(display_info, device_index)); | 94 displays_.back()->Update(display_info, device_index)); |
94 } | 95 } |
95 device_index++; | 96 device_index++; |
96 } | 97 } |
97 | 98 |
98 NotifyScreenManager(displays_, old_displays); | 99 NotifyScreenManager(displays_, old_displays); |
99 return params_list; | 100 return params_list; |
100 } | 101 } |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 DrmDisplay* DrmGpuDisplayManager::FindDisplay(int64_t display_id) { | 213 DrmDisplay* DrmGpuDisplayManager::FindDisplay(int64_t display_id) { |
213 for (const auto& display : displays_) { | 214 for (const auto& display : displays_) { |
214 if (display->display_id() == display_id) | 215 if (display->display_id() == display_id) |
215 return display.get(); | 216 return display.get(); |
216 } | 217 } |
217 | 218 |
218 return nullptr; | 219 return nullptr; |
219 } | 220 } |
220 | 221 |
221 void DrmGpuDisplayManager::NotifyScreenManager( | 222 void DrmGpuDisplayManager::NotifyScreenManager( |
222 const std::vector<scoped_ptr<DrmDisplay>>& new_displays, | 223 const std::vector<std::unique_ptr<DrmDisplay>>& new_displays, |
223 const std::vector<scoped_ptr<DrmDisplay>>& old_displays) const { | 224 const std::vector<std::unique_ptr<DrmDisplay>>& old_displays) const { |
224 for (const auto& old_display : old_displays) { | 225 for (const auto& old_display : old_displays) { |
225 auto it = std::find_if(new_displays.begin(), new_displays.end(), | 226 auto it = std::find_if(new_displays.begin(), new_displays.end(), |
226 DisplayComparator(old_display.get())); | 227 DisplayComparator(old_display.get())); |
227 | 228 |
228 if (it == new_displays.end()) { | 229 if (it == new_displays.end()) { |
229 screen_manager_->RemoveDisplayController(old_display->drm(), | 230 screen_manager_->RemoveDisplayController(old_display->drm(), |
230 old_display->crtc()); | 231 old_display->crtc()); |
231 } | 232 } |
232 } | 233 } |
233 | 234 |
234 for (const auto& new_display : new_displays) { | 235 for (const auto& new_display : new_displays) { |
235 auto it = std::find_if(old_displays.begin(), old_displays.end(), | 236 auto it = std::find_if(old_displays.begin(), old_displays.end(), |
236 DisplayComparator(new_display.get())); | 237 DisplayComparator(new_display.get())); |
237 | 238 |
238 if (it == old_displays.end()) { | 239 if (it == old_displays.end()) { |
239 screen_manager_->AddDisplayController( | 240 screen_manager_->AddDisplayController( |
240 new_display->drm(), new_display->crtc(), new_display->connector()); | 241 new_display->drm(), new_display->crtc(), new_display->connector()); |
241 } | 242 } |
242 } | 243 } |
243 } | 244 } |
244 | 245 |
245 } // namespace ui | 246 } // namespace ui |
OLD | NEW |