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

Side by Side Diff: components/mus/mus_app.cc

Issue 1827453002: Handful of changes to get mus to shutdown correctly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « components/mus/gles2/gpu_state.cc ('k') | components/mus/ws/platform_display.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 }; 62 };
63 63
64 struct MandolineUIServicesApp::UserState { 64 struct MandolineUIServicesApp::UserState {
65 scoped_ptr<ws::WindowTreeFactory> window_tree_factory; 65 scoped_ptr<ws::WindowTreeFactory> window_tree_factory;
66 scoped_ptr<ws::WindowTreeHostFactory> window_tree_host_factory; 66 scoped_ptr<ws::WindowTreeHostFactory> window_tree_host_factory;
67 }; 67 };
68 68
69 MandolineUIServicesApp::MandolineUIServicesApp() {} 69 MandolineUIServicesApp::MandolineUIServicesApp() {}
70 70
71 MandolineUIServicesApp::~MandolineUIServicesApp() { 71 MandolineUIServicesApp::~MandolineUIServicesApp() {
72 // Destroy |window_server_| first, since it depends on |event_source_|.
73 // WindowServer (or more correctly its Displays) may have state that needs to
74 // be destroyed before GpuState as well.
75 window_server_.reset();
76
72 if (platform_display_init_params_.gpu_state) 77 if (platform_display_init_params_.gpu_state)
73 platform_display_init_params_.gpu_state->StopThreads(); 78 platform_display_init_params_.gpu_state->StopThreads();
74 // Destroy |window_server_| first, since it depends on |event_source_|.
75 window_server_.reset();
76 } 79 }
77 80
78 void MandolineUIServicesApp::InitializeResources(mojo::Connector* connector) { 81 void MandolineUIServicesApp::InitializeResources(mojo::Connector* connector) {
79 if (ui::ResourceBundle::HasSharedInstance()) 82 if (ui::ResourceBundle::HasSharedInstance())
80 return; 83 return;
81 84
82 std::set<std::string> resource_paths; 85 std::set<std::string> resource_paths;
83 resource_paths.insert(kResourceFileStrings); 86 resource_paths.insert(kResourceFileStrings);
84 resource_paths.insert(kResourceFile100); 87 resource_paths.insert(kResourceFile100);
85 resource_paths.insert(kResourceFile200); 88 resource_paths.insert(kResourceFile200);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 } 177 }
175 178
176 void MandolineUIServicesApp::OnFirstDisplayReady() { 179 void MandolineUIServicesApp::OnFirstDisplayReady() {
177 PendingRequests requests; 180 PendingRequests requests;
178 requests.swap(pending_requests_); 181 requests.swap(pending_requests_);
179 for (auto& request : requests) 182 for (auto& request : requests)
180 Create(request->connection, std::move(*request->wtf_request)); 183 Create(request->connection, std::move(*request->wtf_request));
181 } 184 }
182 185
183 void MandolineUIServicesApp::OnNoMoreDisplays() { 186 void MandolineUIServicesApp::OnNoMoreDisplays() {
184 base::MessageLoop::current()->QuitWhenIdle(); 187 // We may get here from the destructor, in which case there is no messageloop.
188 if (base::MessageLoop::current())
189 base::MessageLoop::current()->QuitWhenIdle();
185 } 190 }
186 191
187 scoped_ptr<ws::WindowTreeBinding> 192 scoped_ptr<ws::WindowTreeBinding>
188 MandolineUIServicesApp::CreateWindowTreeBindingForEmbedAtWindow( 193 MandolineUIServicesApp::CreateWindowTreeBindingForEmbedAtWindow(
189 ws::WindowServer* window_server, 194 ws::WindowServer* window_server,
190 ws::WindowTree* tree, 195 ws::WindowTree* tree,
191 mojom::WindowTreeRequest tree_request, 196 mojom::WindowTreeRequest tree_request,
192 mojom::WindowTreeClientPtr client) { 197 mojom::WindowTreeClientPtr client) {
193 return make_scoped_ptr(new ws::DefaultWindowTreeBinding( 198 return make_scoped_ptr(new ws::DefaultWindowTreeBinding(
194 tree, window_server, std::move(tree_request), std::move(client))); 199 tree, window_server, std::move(tree_request), std::move(client)));
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 user_state->window_tree_host_factory->AddBinding(std::move(request)); 259 user_state->window_tree_host_factory->AddBinding(std::move(request));
255 } 260 }
256 261
257 void MandolineUIServicesApp::Create(mojo::Connection* connection, 262 void MandolineUIServicesApp::Create(mojo::Connection* connection,
258 mojom::GpuRequest request) { 263 mojom::GpuRequest request) {
259 DCHECK(platform_display_init_params_.gpu_state); 264 DCHECK(platform_display_init_params_.gpu_state);
260 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state); 265 new GpuImpl(std::move(request), platform_display_init_params_.gpu_state);
261 } 266 }
262 267
263 } // namespace mus 268 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/gles2/gpu_state.cc ('k') | components/mus/ws/platform_display.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698