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 97bdfe33dbcf6647bc69aa920fe05deea7f88690..a80024b6ff4b0aa441afc1b9733803cfc5a0a243 100644 |
--- a/ui/ozone/platform/drm/gpu/screen_manager.cc |
+++ b/ui/ozone/platform/drm/gpu/screen_manager.cc |
@@ -314,10 +314,19 @@ 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); |
} |
} |