| 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" |
| 11 #include "base/single_thread_task_runner.h" | 11 #include "base/single_thread_task_runner.h" |
| 12 #include "components/viz/common/server_gpu_memory_buffer_manager.h" | |
| 13 #include "components/viz/service/display_compositor/gpu_display_provider.h" | 12 #include "components/viz/service/display_compositor/gpu_display_provider.h" |
| 14 #include "components/viz/service/frame_sinks/mojo_frame_sink_manager.h" | 13 #include "components/viz/service/frame_sinks/mojo_frame_sink_manager.h" |
| 15 #include "gpu/command_buffer/common/activity_flags.h" | 14 #include "gpu/command_buffer/common/activity_flags.h" |
| 16 #include "gpu/ipc/common/gpu_memory_buffer_support.h" | 15 #include "gpu/ipc/common/gpu_memory_buffer_support.h" |
| 17 #include "gpu/ipc/gpu_in_process_thread_service.h" | 16 #include "gpu/ipc/gpu_in_process_thread_service.h" |
| 18 #include "gpu/ipc/service/gpu_memory_buffer_factory.h" | 17 #include "gpu/ipc/service/gpu_memory_buffer_factory.h" |
| 19 #include "gpu/ipc/service/gpu_watchdog_thread.h" | 18 #include "gpu/ipc/service/gpu_watchdog_thread.h" |
| 20 #include "services/ui/gpu/gpu_service.h" | 19 #include "services/ui/gpu/gpu_service.h" |
| 21 | 20 |
| 22 #if defined(USE_OZONE) | 21 #if defined(USE_OZONE) |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 void GpuMain::CreateFrameSinkManagerInternal( | 166 void GpuMain::CreateFrameSinkManagerInternal( |
| 168 cc::mojom::FrameSinkManagerRequest request, | 167 cc::mojom::FrameSinkManagerRequest request, |
| 169 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { | 168 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { |
| 170 DCHECK(!gpu_command_service_); | 169 DCHECK(!gpu_command_service_); |
| 171 DCHECK(gpu_service_); | 170 DCHECK(gpu_service_); |
| 172 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread()); | 171 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread()); |
| 173 gpu_command_service_ = new gpu::GpuInProcessThreadService( | 172 gpu_command_service_ = new gpu::GpuInProcessThreadService( |
| 174 gpu_thread_task_runner_, gpu_service_->sync_point_manager(), | 173 gpu_thread_task_runner_, gpu_service_->sync_point_manager(), |
| 175 gpu_service_->mailbox_manager(), gpu_service_->share_group()); | 174 gpu_service_->mailbox_manager(), gpu_service_->share_group()); |
| 176 | 175 |
| 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( | 176 compositor_thread_task_runner_->PostTask( |
| 185 FROM_HERE, base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread, | 177 FROM_HERE, |
| 186 base::Unretained(this), image_factory, | 178 base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread, |
| 187 base::Passed(gpu_service.PassInterface()), | 179 base::Unretained(this), base::Passed(std::move(request)), |
| 188 base::Passed(std::move(request)), | 180 base::Passed(std::move(client_info)))); |
| 189 base::Passed(std::move(client_info)))); | |
| 190 } | 181 } |
| 191 | 182 |
| 192 void GpuMain::CreateFrameSinkManagerOnCompositorThread( | 183 void GpuMain::CreateFrameSinkManagerOnCompositorThread( |
| 193 gpu::ImageFactory* image_factory, | |
| 194 mojom::GpuServicePtrInfo gpu_service_info, | |
| 195 cc::mojom::FrameSinkManagerRequest request, | 184 cc::mojom::FrameSinkManagerRequest request, |
| 196 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { | 185 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { |
| 197 DCHECK(!frame_sink_manager_); | 186 DCHECK(!frame_sink_manager_); |
| 198 cc::mojom::FrameSinkManagerClientPtr client; | 187 cc::mojom::FrameSinkManagerClientPtr client; |
| 199 client.Bind(std::move(client_info)); | 188 client.Bind(std::move(client_info)); |
| 200 | 189 |
| 201 gpu_internal_.Bind(std::move(gpu_service_info)); | |
| 202 | |
| 203 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>( | 190 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>( |
| 204 gpu_command_service_, | 191 gpu_command_service_, gpu_service_->gpu_channel_manager()); |
| 205 base::MakeUnique<viz::ServerGpuMemoryBufferManager>(gpu_internal_.get(), | |
| 206 1 /* client_id */), | |
| 207 image_factory); | |
| 208 | 192 |
| 209 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>( | 193 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>( |
| 210 true, display_provider_.get()); | 194 true, display_provider_.get()); |
| 211 frame_sink_manager_->BindPtrAndSetClient(std::move(request), | 195 frame_sink_manager_->BindPtrAndSetClient(std::move(request), |
| 212 std::move(client)); | 196 std::move(client)); |
| 213 } | 197 } |
| 214 | 198 |
| 215 void GpuMain::TearDownOnCompositorThread() { | 199 void GpuMain::TearDownOnCompositorThread() { |
| 216 frame_sink_manager_.reset(); | 200 frame_sink_manager_.reset(); |
| 217 display_provider_.reset(); | 201 display_provider_.reset(); |
| 218 gpu_internal_.reset(); | |
| 219 } | 202 } |
| 220 | 203 |
| 221 void GpuMain::TearDownOnGpuThread() { | 204 void GpuMain::TearDownOnGpuThread() { |
| 222 binding_.Close(); | 205 binding_.Close(); |
| 223 gpu_service_.reset(); | 206 gpu_service_.reset(); |
| 224 gpu_memory_buffer_factory_.reset(); | 207 gpu_memory_buffer_factory_.reset(); |
| 225 gpu_init_.reset(); | 208 gpu_init_.reset(); |
| 226 } | 209 } |
| 227 | 210 |
| 228 void GpuMain::CreateGpuServiceOnGpuThread( | 211 void GpuMain::CreateGpuServiceOnGpuThread( |
| 229 mojom::GpuServiceRequest request, | 212 mojom::GpuServiceRequest request, |
| 230 mojom::GpuHostPtr gpu_host, | 213 mojom::GpuHostPtr gpu_host, |
| 231 const gpu::GpuPreferences& preferences, | 214 const gpu::GpuPreferences& preferences, |
| 232 gpu::GpuProcessActivityFlags activity_flags) { | 215 gpu::GpuProcessActivityFlags activity_flags) { |
| 233 gpu_service_->UpdateGPUInfoFromPreferences(preferences); | 216 gpu_service_->UpdateGPUInfoFromPreferences(preferences); |
| 234 gpu_service_->InitializeWithHost(std::move(gpu_host), | 217 gpu_service_->InitializeWithHost(std::move(gpu_host), |
| 235 std::move(activity_flags)); | 218 std::move(activity_flags)); |
| 236 gpu_service_->Bind(std::move(request)); | 219 gpu_service_->Bind(std::move(request)); |
| 237 | 220 |
| 238 if (pending_frame_sink_manager_request_.is_pending()) { | 221 if (pending_frame_sink_manager_request_.is_pending()) { |
| 239 CreateFrameSinkManagerInternal( | 222 CreateFrameSinkManagerInternal( |
| 240 std::move(pending_frame_sink_manager_request_), | 223 std::move(pending_frame_sink_manager_request_), |
| 241 std::move(pending_frame_sink_manager_client_info_)); | 224 std::move(pending_frame_sink_manager_client_info_)); |
| 242 } | 225 } |
| 243 } | 226 } |
| 244 | 227 |
| 245 void GpuMain::BindGpuInternalOnGpuThread(mojom::GpuServiceRequest request) { | |
| 246 gpu_service_->Bind(std::move(request)); | |
| 247 } | |
| 248 | |
| 249 void GpuMain::PreSandboxStartup() { | 228 void GpuMain::PreSandboxStartup() { |
| 250 // TODO(sad): https://crbug.com/645602 | 229 // TODO(sad): https://crbug.com/645602 |
| 251 } | 230 } |
| 252 | 231 |
| 253 bool GpuMain::EnsureSandboxInitialized( | 232 bool GpuMain::EnsureSandboxInitialized( |
| 254 gpu::GpuWatchdogThread* watchdog_thread) { | 233 gpu::GpuWatchdogThread* watchdog_thread) { |
| 255 // TODO(sad): https://crbug.com/645602 | 234 // TODO(sad): https://crbug.com/645602 |
| 256 return true; | 235 return true; |
| 257 } | 236 } |
| 258 | 237 |
| 259 } // namespace ui | 238 } // namespace ui |
| OLD | NEW |