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 "components/mus/mus_app.h" | 5 #include "components/mus/mus_app.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
13 #include "base/threading/platform_thread.h" | 13 #include "base/threading/platform_thread.h" |
14 #include "build/build_config.h" | 14 #include "build/build_config.h" |
15 #include "components/mus/clipboard/clipboard_impl.h" | 15 #include "components/mus/clipboard/clipboard_impl.h" |
16 #include "components/mus/common/switches.h" | 16 #include "components/mus/common/switches.h" |
17 #include "components/mus/gles2/gpu_impl.h" | 17 #include "components/mus/gles2/gpu_impl.h" |
| 18 #include "components/mus/gpu/gpu_service_impl.h" |
| 19 #include "components/mus/gpu/gpu_service_mus.h" |
18 #include "components/mus/ws/display.h" | 20 #include "components/mus/ws/display.h" |
19 #include "components/mus/ws/display_binding.h" | 21 #include "components/mus/ws/display_binding.h" |
20 #include "components/mus/ws/display_manager.h" | 22 #include "components/mus/ws/display_manager.h" |
21 #include "components/mus/ws/platform_screen.h" | 23 #include "components/mus/ws/platform_screen.h" |
22 #include "components/mus/ws/user_display_manager.h" | 24 #include "components/mus/ws/user_display_manager.h" |
23 #include "components/mus/ws/window_server.h" | 25 #include "components/mus/ws/window_server.h" |
24 #include "components/mus/ws/window_server_test_impl.h" | 26 #include "components/mus/ws/window_server_test_impl.h" |
25 #include "components/mus/ws/window_tree.h" | 27 #include "components/mus/ws/window_tree.h" |
26 #include "components/mus/ws/window_tree_binding.h" | 28 #include "components/mus/ws/window_tree_binding.h" |
27 #include "components/mus/ws/window_tree_factory.h" | 29 #include "components/mus/ws/window_tree_factory.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 std::unique_ptr<mojo::InterfaceRequest<mojom::WindowTreeFactory>> wtf_request; | 71 std::unique_ptr<mojo::InterfaceRequest<mojom::WindowTreeFactory>> wtf_request; |
70 }; | 72 }; |
71 | 73 |
72 struct MusApp::UserState { | 74 struct MusApp::UserState { |
73 std::unique_ptr<clipboard::ClipboardImpl> clipboard; | 75 std::unique_ptr<clipboard::ClipboardImpl> clipboard; |
74 std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory; | 76 std::unique_ptr<ws::WindowTreeHostFactory> window_tree_host_factory; |
75 }; | 77 }; |
76 | 78 |
77 MusApp::MusApp() | 79 MusApp::MusApp() |
78 : test_config_(false), | 80 : test_config_(false), |
| 81 use_chrome_gpu_command_buffer_(false), |
79 platform_screen_(ws::PlatformScreen::Create()), | 82 platform_screen_(ws::PlatformScreen::Create()), |
80 weak_ptr_factory_(this) {} | 83 weak_ptr_factory_(this) {} |
81 | 84 |
82 MusApp::~MusApp() { | 85 MusApp::~MusApp() { |
83 // Destroy |window_server_| first, since it depends on |event_source_|. | 86 // Destroy |window_server_| first, since it depends on |event_source_|. |
84 // WindowServer (or more correctly its Displays) may have state that needs to | 87 // WindowServer (or more correctly its Displays) may have state that needs to |
85 // be destroyed before GpuState as well. | 88 // be destroyed before GpuState as well. |
86 window_server_.reset(); | 89 window_server_.reset(); |
87 | 90 |
88 if (platform_display_init_params_.gpu_state) | 91 if (platform_display_init_params_.gpu_state) |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 const shell::Identity& identity, | 137 const shell::Identity& identity, |
135 uint32_t id) { | 138 uint32_t id) { |
136 platform_display_init_params_.surfaces_state = new SurfacesState; | 139 platform_display_init_params_.surfaces_state = new SurfacesState; |
137 | 140 |
138 base::PlatformThread::SetName("mus"); | 141 base::PlatformThread::SetName("mus"); |
139 tracing_.Initialize(connector, identity.name()); | 142 tracing_.Initialize(connector, identity.name()); |
140 TRACE_EVENT0("mus", "MusApp::Initialize started"); | 143 TRACE_EVENT0("mus", "MusApp::Initialize started"); |
141 | 144 |
142 test_config_ = base::CommandLine::ForCurrentProcess()->HasSwitch( | 145 test_config_ = base::CommandLine::ForCurrentProcess()->HasSwitch( |
143 switches::kUseTestConfig); | 146 switches::kUseTestConfig); |
| 147 use_chrome_gpu_command_buffer_ = |
| 148 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 149 switches::kUseChromeGpuCommandBufferInMus); |
144 #if defined(USE_X11) | 150 #if defined(USE_X11) |
145 XInitThreads(); | 151 XInitThreads(); |
146 if (test_config_) | 152 if (test_config_) |
147 ui::test::SetUseOverrideRedirectWindowByDefault(true); | 153 ui::test::SetUseOverrideRedirectWindowByDefault(true); |
148 #endif | 154 #endif |
149 | 155 |
150 InitializeResources(connector); | 156 InitializeResources(connector); |
151 | 157 |
152 #if defined(USE_OZONE) | 158 #if defined(USE_OZONE) |
153 // The ozone platform can provide its own event source. So initialize the | 159 // The ozone platform can provide its own event source. So initialize the |
(...skipping 13 matching lines...) Expand all Loading... |
167 DCHECK(ui::ClientNativePixmapFactory::GetInstance()); | 173 DCHECK(ui::ClientNativePixmapFactory::GetInstance()); |
168 #endif | 174 #endif |
169 | 175 |
170 // TODO(rjkroege): Enter sandbox here before we start threads in GpuState | 176 // TODO(rjkroege): Enter sandbox here before we start threads in GpuState |
171 // http://crbug.com/584532 | 177 // http://crbug.com/584532 |
172 | 178 |
173 #if !defined(OS_ANDROID) | 179 #if !defined(OS_ANDROID) |
174 event_source_ = ui::PlatformEventSource::CreateDefault(); | 180 event_source_ = ui::PlatformEventSource::CreateDefault(); |
175 #endif | 181 #endif |
176 | 182 |
177 // TODO(rjkroege): It is possible that we might want to generalize the | 183 if (use_chrome_gpu_command_buffer_) { |
178 // GpuState object. | 184 GpuServiceMus::GetInstance(); |
179 platform_display_init_params_.gpu_state = new GpuState(); | 185 } else { |
| 186 // TODO(rjkroege): It is possible that we might want to generalize the |
| 187 // GpuState object. |
| 188 platform_display_init_params_.gpu_state = new GpuState(); |
| 189 } |
180 | 190 |
181 // Gpu must be running before the PlatformScreen can be initialized. | 191 // Gpu must be running before the PlatformScreen can be initialized. |
182 platform_screen_->Init(); | 192 platform_screen_->Init(); |
183 window_server_.reset( | 193 window_server_.reset( |
184 new ws::WindowServer(this, platform_display_init_params_.surfaces_state)); | 194 new ws::WindowServer(this, platform_display_init_params_.surfaces_state)); |
185 } | 195 } |
186 | 196 |
187 bool MusApp::AcceptConnection(Connection* connection) { | 197 bool MusApp::AcceptConnection(Connection* connection) { |
188 connection->AddInterface<Gpu>(this); | 198 connection->AddInterface<Gpu>(this); |
189 connection->AddInterface<mojom::Clipboard>(this); | 199 connection->AddInterface<mojom::Clipboard>(this); |
190 connection->AddInterface<mojom::DisplayManager>(this); | 200 connection->AddInterface<mojom::DisplayManager>(this); |
191 connection->AddInterface<mojom::UserAccessManager>(this); | 201 connection->AddInterface<mojom::UserAccessManager>(this); |
192 connection->AddInterface<WindowTreeHostFactory>(this); | 202 connection->AddInterface<WindowTreeHostFactory>(this); |
193 connection->AddInterface<mojom::WindowManagerFactoryService>(this); | 203 connection->AddInterface<mojom::WindowManagerFactoryService>(this); |
194 connection->AddInterface<mojom::WindowTreeFactory>(this); | 204 connection->AddInterface<mojom::WindowTreeFactory>(this); |
195 if (test_config_) | 205 if (test_config_) |
196 connection->AddInterface<WindowServerTest>(this); | 206 connection->AddInterface<WindowServerTest>(this); |
| 207 |
| 208 if (use_chrome_gpu_command_buffer_) { |
| 209 connection->AddInterface<mojom::GpuService>(this); |
| 210 } else { |
| 211 connection->AddInterface<Gpu>(this); |
| 212 } |
| 213 |
197 return true; | 214 return true; |
198 } | 215 } |
199 | 216 |
200 void MusApp::OnFirstDisplayReady() { | 217 void MusApp::OnFirstDisplayReady() { |
201 PendingRequests requests; | 218 PendingRequests requests; |
202 requests.swap(pending_requests_); | 219 requests.swap(pending_requests_); |
203 for (auto& request : requests) | 220 for (auto& request : requests) |
204 Create(request->connection, std::move(*request->wtf_request)); | 221 Create(request->connection, std::move(*request->wtf_request)); |
205 } | 222 } |
206 | 223 |
(...skipping 23 matching lines...) Expand all Loading... |
230 } | 247 } |
231 | 248 |
232 void MusApp::Create(shell::Connection* connection, | 249 void MusApp::Create(shell::Connection* connection, |
233 mojom::DisplayManagerRequest request) { | 250 mojom::DisplayManagerRequest request) { |
234 window_server_->display_manager() | 251 window_server_->display_manager() |
235 ->GetUserDisplayManager(connection->GetRemoteIdentity().user_id()) | 252 ->GetUserDisplayManager(connection->GetRemoteIdentity().user_id()) |
236 ->AddDisplayManagerBinding(std::move(request)); | 253 ->AddDisplayManagerBinding(std::move(request)); |
237 } | 254 } |
238 | 255 |
239 void MusApp::Create(shell::Connection* connection, mojom::GpuRequest request) { | 256 void MusApp::Create(shell::Connection* connection, mojom::GpuRequest request) { |
| 257 if (use_chrome_gpu_command_buffer_) |
| 258 return; |
240 DCHECK(platform_display_init_params_.gpu_state); | 259 DCHECK(platform_display_init_params_.gpu_state); |
241 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state); | 260 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state); |
242 } | 261 } |
243 | 262 |
244 void MusApp::Create(shell::Connection* connection, | 263 void MusApp::Create(shell::Connection* connection, |
| 264 mojom::GpuServiceRequest request) { |
| 265 if (!use_chrome_gpu_command_buffer_) |
| 266 return; |
| 267 new GpuServiceImpl(std::move(request), connection); |
| 268 } |
| 269 |
| 270 void MusApp::Create(shell::Connection* connection, |
245 mojom::UserAccessManagerRequest request) { | 271 mojom::UserAccessManagerRequest request) { |
246 window_server_->user_id_tracker()->Bind(std::move(request)); | 272 window_server_->user_id_tracker()->Bind(std::move(request)); |
247 } | 273 } |
248 | 274 |
249 void MusApp::Create(shell::Connection* connection, | 275 void MusApp::Create(shell::Connection* connection, |
250 mojom::WindowManagerFactoryServiceRequest request) { | 276 mojom::WindowManagerFactoryServiceRequest request) { |
251 AddUserIfNecessary(connection); | 277 AddUserIfNecessary(connection); |
252 window_server_->window_manager_factory_registry()->Register( | 278 window_server_->window_manager_factory_registry()->Register( |
253 connection->GetRemoteIdentity().user_id(), std::move(request)); | 279 connection->GetRemoteIdentity().user_id(), std::move(request)); |
254 } | 280 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 platform_display_init_params_.display_bounds = bounds; | 319 platform_display_init_params_.display_bounds = bounds; |
294 platform_display_init_params_.display_id = id; | 320 platform_display_init_params_.display_id = id; |
295 | 321 |
296 // Display manages its own lifetime. | 322 // Display manages its own lifetime. |
297 ws::Display* host_impl = | 323 ws::Display* host_impl = |
298 new ws::Display(window_server_.get(), platform_display_init_params_); | 324 new ws::Display(window_server_.get(), platform_display_init_params_); |
299 host_impl->Init(nullptr); | 325 host_impl->Init(nullptr); |
300 } | 326 } |
301 | 327 |
302 } // namespace mus | 328 } // namespace mus |
OLD | NEW |