| 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 |