| 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 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 gfx::Rect(controller->origin(), controller->GetModeSize())); | 285 gfx::Rect(controller->origin(), controller->GetModeSize())); |
| 286 if (!window) | 286 if (!window) |
| 287 continue; | 287 continue; |
| 288 | 288 |
| 289 window_to_controller_map[window] = controller; | 289 window_to_controller_map[window] = controller; |
| 290 } | 290 } |
| 291 | 291 |
| 292 // Apply the new mapping to all windows. | 292 // Apply the new mapping to all windows. |
| 293 for (auto pair : window_map_) { | 293 for (auto pair : window_map_) { |
| 294 auto it = window_to_controller_map.find(pair.second); | 294 auto it = window_to_controller_map.find(pair.second); |
| 295 HardwareDisplayController* controller = nullptr; |
| 295 if (it != window_to_controller_map.end()) | 296 if (it != window_to_controller_map.end()) |
| 296 pair.second->SetController(it->second); | 297 controller = it->second; |
| 297 else | 298 |
| 298 pair.second->SetController(nullptr); | 299 bool should_enable = |
| 300 controller && pair.second->GetController() != controller; |
| 301 pair.second->SetController(controller); |
| 302 |
| 303 // If we're moving windows between controllers modeset the controller |
| 304 // otherwise the controller may be waiting for a page flip while the window |
| 305 // tries to schedule another buffer. |
| 306 if (should_enable) |
| 307 EnableController(controller, controller->origin(), |
| 308 controller->get_mode()); |
| 299 } | 309 } |
| 300 } | 310 } |
| 301 | 311 |
| 302 bool ScreenManager::EnableController(HardwareDisplayController* controller, | 312 bool ScreenManager::EnableController(HardwareDisplayController* controller, |
| 303 const gfx::Point& origin, | 313 const gfx::Point& origin, |
| 304 const drmModeModeInfo& mode) { | 314 const drmModeModeInfo& mode) { |
| 305 DCHECK(!controller->crtc_controllers().empty()); | 315 DCHECK(!controller->crtc_controllers().empty()); |
| 306 gfx::Rect rect(origin, gfx::Size(mode.hdisplay, mode.vdisplay)); | 316 gfx::Rect rect(origin, gfx::Size(mode.hdisplay, mode.vdisplay)); |
| 307 controller->set_origin(origin); | 317 controller->set_origin(origin); |
| 308 | 318 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 339 DrmWindow* ScreenManager::FindWindowAt(const gfx::Rect& bounds) const { | 349 DrmWindow* ScreenManager::FindWindowAt(const gfx::Rect& bounds) const { |
| 340 for (auto pair : window_map_) { | 350 for (auto pair : window_map_) { |
| 341 if (pair.second->bounds() == bounds) | 351 if (pair.second->bounds() == bounds) |
| 342 return pair.second; | 352 return pair.second; |
| 343 } | 353 } |
| 344 | 354 |
| 345 return nullptr; | 355 return nullptr; |
| 346 } | 356 } |
| 347 | 357 |
| 348 } // namespace ui | 358 } // namespace ui |
| OLD | NEW |