Index: ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
diff --git a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
index bb29a42dfb292d4acf1240e7c79610cc54213e74..5cee091d8ca4051f020f6b56dbfb163a4027bdaf 100644 |
--- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
+++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
@@ -55,14 +55,6 @@ bool FindMatchingMode(const std::vector<drmModeModeInfo> modes, |
return false; |
} |
-std::vector<drmModeModeInfo> GetDrmModeVector(drmModeConnector* connector) { |
- std::vector<drmModeModeInfo> modes; |
- for (int i = 0; i < connector->count_modes; ++i) |
- modes.push_back(connector->modes[i]); |
- |
- return modes; |
-} |
- |
} // namespace |
DrmGpuDisplayManager::DrmGpuDisplayManager(ScreenManager* screen_manager, |
@@ -84,15 +76,18 @@ std::vector<DisplaySnapshot_Params> DrmGpuDisplayManager::GetDisplays() { |
ScopedVector<HardwareDisplayControllerInfo> display_infos = |
GetAvailableDisplayControllerInfos(drm->get_fd()); |
for (auto* display_info : display_infos) { |
- DisplaySnapshot_Params params = |
- CreateDisplaySnapshotParams(display_info, drm->get_fd(), index++); |
- params_list.push_back(params); |
- |
- displays_.push_back( |
- new DrmDisplay(screen_manager_, params.display_id, drm, |
- display_info->crtc()->crtc_id, |
- display_info->connector()->connector_id, |
- GetDrmModeVector(display_info->connector()))); |
+ auto it = std::find_if( |
+ old_displays.begin(), old_displays.end(), |
+ DisplayComparator(drm, display_info->crtc()->crtc_id, |
+ display_info->connector()->connector_id)); |
+ if (it != old_displays.end()) { |
+ displays_.push_back(*it); |
+ old_displays.weak_erase(it); |
+ } else { |
+ displays_.push_back(new DrmDisplay(screen_manager_, drm)); |
+ } |
+ |
+ params_list.push_back(displays_.back()->Update(display_info, index++)); |
} |
} |