Index: ui/ozone/platform/drm/gpu/screen_manager.cc |
diff --git a/ui/ozone/platform/drm/gpu/screen_manager.cc b/ui/ozone/platform/drm/gpu/screen_manager.cc |
index 4b4d3f13d75a1e813425e82198ceaa5b333a542a..72a14a1f17f7a65de3e9fb9a7a7a5bbadcbd7e61 100644 |
--- a/ui/ozone/platform/drm/gpu/screen_manager.cc |
+++ b/ui/ozone/platform/drm/gpu/screen_manager.cc |
@@ -292,10 +292,20 @@ void ScreenManager::UpdateControllerToWindowMapping() { |
// Apply the new mapping to all windows. |
for (auto pair : window_map_) { |
auto it = window_to_controller_map.find(pair.second); |
+ HardwareDisplayController* controller = nullptr; |
if (it != window_to_controller_map.end()) |
- pair.second->SetController(it->second); |
- else |
- pair.second->SetController(nullptr); |
+ controller = it->second; |
+ |
+ bool should_enable = |
+ controller && pair.second->GetController() != controller; |
+ pair.second->SetController(controller); |
+ |
+ // If we're moving windows between controllers modeset the controller |
+ // otherwise the controller may be waiting for a page flip while the window |
+ // tries to schedule another buffer. |
+ if (should_enable) |
+ EnableController(controller, controller->origin(), |
+ controller->get_mode()); |
} |
} |