OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "services/ui/gpu/gpu_main.h" | 5 #include "services/ui/gpu/gpu_main.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/power_monitor/power_monitor_device_source.h" | 10 #include "base/power_monitor/power_monitor_device_source.h" |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 void GpuMain::CreateFrameSinkManagerInternal( | 167 void GpuMain::CreateFrameSinkManagerInternal( |
168 cc::mojom::FrameSinkManagerRequest request, | 168 cc::mojom::FrameSinkManagerRequest request, |
169 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { | 169 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { |
170 DCHECK(!gpu_command_service_); | 170 DCHECK(!gpu_command_service_); |
171 DCHECK(gpu_service_); | 171 DCHECK(gpu_service_); |
172 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread()); | 172 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread()); |
173 gpu_command_service_ = new gpu::GpuInProcessThreadService( | 173 gpu_command_service_ = new gpu::GpuInProcessThreadService( |
174 gpu_thread_task_runner_, gpu_service_->sync_point_manager(), | 174 gpu_thread_task_runner_, gpu_service_->sync_point_manager(), |
175 gpu_service_->mailbox_manager(), gpu_service_->share_group()); | 175 gpu_service_->mailbox_manager(), gpu_service_->share_group()); |
176 | 176 |
177 gpu::ImageFactory* image_factory = gpu_service_->gpu_image_factory(); | |
178 | |
179 // If the FrameSinkManager creation was delayed because GpuService had not | |
180 // been created yet, then this is called, in gpu thread, right after | |
181 // GpuService is created. | |
182 mojom::GpuServicePtr gpu_service; | |
183 BindGpuInternalOnGpuThread(mojo::MakeRequest(&gpu_service)); | |
184 compositor_thread_task_runner_->PostTask( | 177 compositor_thread_task_runner_->PostTask( |
185 FROM_HERE, base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread, | 178 FROM_HERE, |
186 base::Unretained(this), image_factory, | 179 base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread, |
187 base::Passed(gpu_service.PassInterface()), | 180 base::Unretained(this), base::Passed(std::move(request)), |
188 base::Passed(std::move(request)), | 181 base::Passed(std::move(client_info)))); |
189 base::Passed(std::move(client_info)))); | |
190 } | 182 } |
191 | 183 |
192 void GpuMain::CreateFrameSinkManagerOnCompositorThread( | 184 void GpuMain::CreateFrameSinkManagerOnCompositorThread( |
193 gpu::ImageFactory* image_factory, | |
194 mojom::GpuServicePtrInfo gpu_service_info, | |
195 cc::mojom::FrameSinkManagerRequest request, | 185 cc::mojom::FrameSinkManagerRequest request, |
196 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { | 186 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { |
197 DCHECK(!frame_sink_manager_); | 187 DCHECK(!frame_sink_manager_); |
198 cc::mojom::FrameSinkManagerClientPtr client; | 188 cc::mojom::FrameSinkManagerClientPtr client; |
199 client.Bind(std::move(client_info)); | 189 client.Bind(std::move(client_info)); |
200 | 190 |
201 gpu_internal_.Bind(std::move(gpu_service_info)); | |
202 | |
203 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>( | 191 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>( |
204 gpu_command_service_, | 192 gpu_command_service_, gpu_service_->gpu_channel_manager()); |
205 base::MakeUnique<viz::ServerGpuMemoryBufferManager>(gpu_internal_.get(), | |
206 1 /* client_id */), | |
207 image_factory); | |
208 | 193 |
209 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>( | 194 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>( |
210 true, display_provider_.get()); | 195 true, display_provider_.get()); |
211 frame_sink_manager_->BindPtrAndSetClient(std::move(request), | 196 frame_sink_manager_->BindPtrAndSetClient(std::move(request), |
212 std::move(client)); | 197 std::move(client)); |
213 } | 198 } |
214 | 199 |
215 void GpuMain::TearDownOnCompositorThread() { | 200 void GpuMain::TearDownOnCompositorThread() { |
216 frame_sink_manager_.reset(); | 201 frame_sink_manager_.reset(); |
217 display_provider_.reset(); | 202 display_provider_.reset(); |
218 gpu_internal_.reset(); | |
219 } | 203 } |
220 | 204 |
221 void GpuMain::TearDownOnGpuThread() { | 205 void GpuMain::TearDownOnGpuThread() { |
222 binding_.Close(); | 206 binding_.Close(); |
223 gpu_service_.reset(); | 207 gpu_service_.reset(); |
224 gpu_memory_buffer_factory_.reset(); | 208 gpu_memory_buffer_factory_.reset(); |
225 gpu_init_.reset(); | 209 gpu_init_.reset(); |
226 } | 210 } |
227 | 211 |
228 void GpuMain::CreateGpuServiceOnGpuThread( | 212 void GpuMain::CreateGpuServiceOnGpuThread( |
229 mojom::GpuServiceRequest request, | 213 mojom::GpuServiceRequest request, |
230 mojom::GpuHostPtr gpu_host, | 214 mojom::GpuHostPtr gpu_host, |
231 const gpu::GpuPreferences& preferences, | 215 const gpu::GpuPreferences& preferences, |
232 gpu::GpuProcessActivityFlags activity_flags) { | 216 gpu::GpuProcessActivityFlags activity_flags) { |
233 gpu_service_->UpdateGPUInfoFromPreferences(preferences); | 217 gpu_service_->UpdateGPUInfoFromPreferences(preferences); |
234 gpu_service_->InitializeWithHost(std::move(gpu_host), | 218 gpu_service_->InitializeWithHost(std::move(gpu_host), |
235 std::move(activity_flags)); | 219 std::move(activity_flags)); |
236 gpu_service_->Bind(std::move(request)); | 220 gpu_service_->Bind(std::move(request)); |
237 | 221 |
238 if (pending_frame_sink_manager_request_.is_pending()) { | 222 if (pending_frame_sink_manager_request_.is_pending()) { |
239 CreateFrameSinkManagerInternal( | 223 CreateFrameSinkManagerInternal( |
240 std::move(pending_frame_sink_manager_request_), | 224 std::move(pending_frame_sink_manager_request_), |
241 std::move(pending_frame_sink_manager_client_info_)); | 225 std::move(pending_frame_sink_manager_client_info_)); |
242 } | 226 } |
243 } | 227 } |
244 | 228 |
245 void GpuMain::BindGpuInternalOnGpuThread(mojom::GpuServiceRequest request) { | |
246 gpu_service_->Bind(std::move(request)); | |
247 } | |
248 | |
249 void GpuMain::PreSandboxStartup() { | 229 void GpuMain::PreSandboxStartup() { |
250 // TODO(sad): https://crbug.com/645602 | 230 // TODO(sad): https://crbug.com/645602 |
251 } | 231 } |
252 | 232 |
253 bool GpuMain::EnsureSandboxInitialized( | 233 bool GpuMain::EnsureSandboxInitialized( |
254 gpu::GpuWatchdogThread* watchdog_thread) { | 234 gpu::GpuWatchdogThread* watchdog_thread) { |
255 // TODO(sad): https://crbug.com/645602 | 235 // TODO(sad): https://crbug.com/645602 |
256 return true; | 236 return true; |
257 } | 237 } |
258 | 238 |
259 } // namespace ui | 239 } // namespace ui |
OLD | NEW |