Chromium Code Reviews| 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..3883debb4a07f06bd12bfc522f4c80533e8944e6 100644 |
| --- a/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
| +++ b/ui/ozone/platform/drm/gpu/drm_gpu_display_manager.cc |
| @@ -84,15 +84,26 @@ 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++); |
| + auto it = std::find_if( |
| + old_displays.begin(), old_displays.end(), |
|
spang
2015/05/13 19:01:20
I'm not a fan of this.
Can you update displays_ f
dnicoara
2015/05/13 19:10:36
Hmm, it is simpler to create the std::vector<Displ
|
| + DisplayComparator(drm, display_info->crtc()->crtc_id, |
| + display_info->connector()->connector_id)); |
| + gfx::Point origin; |
| + // Because each display has its own surface, display layout isn't tracked |
| + // at the DRM level. We must keep track of the display origins otherwise |
| + // we'll lose the layout information. |
| + if (it != old_displays.end()) |
| + origin = (*it)->origin(); |
| + |
| + DisplaySnapshot_Params params = CreateDisplaySnapshotParams( |
| + display_info, drm->get_fd(), index++, origin); |
| 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()))); |
| + GetDrmModeVector(display_info->connector()), origin)); |
| } |
| } |