Index: services/ui/service.cc |
diff --git a/services/ui/service.cc b/services/ui/service.cc |
index b7ff96918dc2a27bcbf7f241e2a52e78dbdd7947..3a85575ee642657800dbfab4dc60c6298caf06fc 100644 |
--- a/services/ui/service.cc |
+++ b/services/ui/service.cc |
@@ -52,6 +52,7 @@ |
#include "ui/base/x/x11_util.h" // nogncheck |
#include "ui/platform_window/x11/x11_window.h" |
#elif defined(USE_OZONE) |
+#include "services/ui/display/screen_manager_forwarding.h" |
#include "ui/events/ozone/layout/keyboard_layout_engine.h" |
#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" |
#include "ui/ozone/public/ozone_platform.h" |
@@ -86,7 +87,6 @@ struct Service::UserState { |
Service::Service() |
: test_config_(false), |
- screen_manager_(display::ScreenManager::Create()), |
ime_registrar_(&ime_server_) {} |
Service::~Service() { |
@@ -220,8 +220,6 @@ void Service::OnStart() { |
if (input_device_server_.IsRegisteredAsObserver()) |
input_device_server_.AddInterface(®istry_); |
- screen_manager_->AddInterfaces(®istry_); |
- |
#if defined(USE_OZONE) |
ui::OzonePlatform::GetInstance()->AddInterfaces(®istry_); |
#endif |
@@ -235,7 +233,10 @@ void Service::OnBindInterface(const service_manager::ServiceInfo& source_info, |
} |
void Service::StartDisplayInit() { |
- screen_manager_->Init(window_server_->display_manager()); |
+ DCHECK(!is_gpu_ready_); // This should only be called once. |
+ is_gpu_ready_ = true; |
+ if (screen_manager_) |
+ screen_manager_->Init(window_server_->display_manager()); |
} |
void Service::OnFirstDisplayReady() { |
@@ -261,6 +262,30 @@ bool Service::IsTestConfig() const { |
return test_config_; |
} |
+void Service::OnWillCreateTreeForWindowManager( |
+ bool automatically_create_display_roots) { |
+ if (screen_manager_config_ != ScreenManagerConfig::UNKNOWN) |
+ return; |
+ |
+ DVLOG(3) << "OnWillCreateTreeForWindowManager " |
+ << automatically_create_display_roots; |
+ screen_manager_config_ = automatically_create_display_roots |
+ ? ScreenManagerConfig::INTERNAL |
+ : ScreenManagerConfig::FORWARDING; |
+ if (screen_manager_config_ == ScreenManagerConfig::FORWARDING) { |
+#if defined(USE_OZONE) && defined(OS_CHROMEOS) |
+ screen_manager_ = base::MakeUnique<display::ScreenManagerForwarding>(); |
+#else |
+ CHECK(false); |
+#endif |
+ } else { |
+ screen_manager_ = display::ScreenManager::Create(); |
+ } |
+ screen_manager_->AddInterfaces(®istry_); |
+ if (is_gpu_ready_) |
+ screen_manager_->Init(window_server_->display_manager()); |
+} |
+ |
void Service::Create(const service_manager::Identity& remote_identity, |
mojom::AccessibilityManagerRequest request) { |
UserState* user_state = GetUserState(remote_identity); |