Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(405)

Unified Diff: services/ui/service.cc

Issue 2829733002: mus: Changes SetDisplayRoot() to create actual display (Closed)
Patch Set: screenmanagerforwarding only ozone Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/ui/service.cc
diff --git a/services/ui/service.cc b/services/ui/service.cc
index b7ff96918dc2a27bcbf7f241e2a52e78dbdd7947..ada338c46c813b4c991435124456c8e105bdd193 100644
--- a/services/ui/service.cc
+++ b/services/ui/service.cc
@@ -42,6 +42,7 @@
#include "ui/base/platform_window_defaults.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/ui_base_paths.h"
+#include "ui/display/screen_base.h"
#include "ui/events/event_switches.h"
#include "ui/events/platform/platform_event_source.h"
#include "ui/gfx/geometry/rect.h"
@@ -52,6 +53,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 +88,6 @@ struct Service::UserState {
Service::Service()
: test_config_(false),
- screen_manager_(display::ScreenManager::Create()),
ime_registrar_(&ime_server_) {}
Service::~Service() {
@@ -98,6 +99,9 @@ Service::~Service() {
#if defined(USE_OZONE)
OzonePlatform::Shutdown();
#endif
+
+ if (screen_)
+ display::Screen::SetScreenInstance(nullptr);
}
void Service::InitializeResources(service_manager::Connector* connector) {
@@ -220,8 +224,6 @@ void Service::OnStart() {
if (input_device_server_.IsRegisteredAsObserver())
input_device_server_.AddInterface(&registry_);
- screen_manager_->AddInterfaces(&registry_);
-
#if defined(USE_OZONE)
ui::OzonePlatform::GetInstance()->AddInterfaces(&registry_);
#endif
@@ -235,7 +237,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 +266,36 @@ bool Service::IsTestConfig() const {
return test_config_;
}
+void Service::OnWillCreateTreeForWindowManager(
kylechar 2017/04/19 18:06:08 What's the expected order that StartDisplayInit()
sky 2017/04/19 19:30:03 You are correct. One is not guaranteed to be calle
+ 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) {
+ screen_ = base::MakeUnique<display::ScreenBase>();
+ display::Screen::SetScreenInstance(screen_.get());
+#if defined(USE_OZONE)
+ screen_manager_ = base::MakeUnique<display::ScreenManagerForwarding>();
+#else
+ CHECK(false);
+#endif
+ } else {
+ screen_manager_ = display::ScreenManager::Create();
+ }
+ screen_manager_->AddInterfaces(&registry_);
+ if (is_gpu_ready_)
+ screen_manager_->Init(window_server_->display_manager());
+}
+
+display::ScreenBase* Service::GetScreen() {
+ return screen_.get();
+}
+
void Service::Create(const service_manager::Identity& remote_identity,
mojom::AccessibilityManagerRequest request) {
UserState* user_state = GetUserState(remote_identity);

Powered by Google App Engine
This is Rietveld 408576698