OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/gpu/gpu_child_thread.h" | 5 #include "content/gpu/gpu_child_thread.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 in_browser_process_(false), | 155 in_browser_process_(false), |
156 gpu_memory_buffer_factory_(gpu_memory_buffer_factory) { | 156 gpu_memory_buffer_factory_(gpu_memory_buffer_factory) { |
157 watchdog_thread_ = watchdog_thread; | 157 watchdog_thread_ = watchdog_thread; |
158 #if defined(OS_WIN) | 158 #if defined(OS_WIN) |
159 target_services_ = NULL; | 159 target_services_ = NULL; |
160 #endif | 160 #endif |
161 g_thread_safe_sender.Get() = thread_safe_sender(); | 161 g_thread_safe_sender.Get() = thread_safe_sender(); |
162 } | 162 } |
163 | 163 |
164 GpuChildThread::GpuChildThread( | 164 GpuChildThread::GpuChildThread( |
165 const gpu::GpuPreferences& gpu_preferences, | |
166 const InProcessChildThreadParams& params, | 165 const InProcessChildThreadParams& params, |
167 gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory) | 166 gpu::GpuMemoryBufferFactory* gpu_memory_buffer_factory) |
168 : ChildThreadImpl(ChildThreadImpl::Options::Builder() | 167 : ChildThreadImpl(ChildThreadImpl::Options::Builder() |
169 .InBrowserProcess(params) | 168 .InBrowserProcess(params) |
170 .UseMojoChannel(true) | 169 .UseMojoChannel(true) |
171 .AddStartupFilter(new GpuMemoryBufferMessageFilter( | 170 .AddStartupFilter(new GpuMemoryBufferMessageFilter( |
172 gpu_memory_buffer_factory)) | 171 gpu_memory_buffer_factory)) |
173 .ConnectToBrowser(true) | 172 .ConnectToBrowser(true) |
174 .Build()), | 173 .Build()), |
175 gpu_preferences_(gpu_preferences), | |
176 dead_on_arrival_(false), | 174 dead_on_arrival_(false), |
177 in_browser_process_(true), | 175 in_browser_process_(true), |
178 gpu_memory_buffer_factory_(gpu_memory_buffer_factory) { | 176 gpu_memory_buffer_factory_(gpu_memory_buffer_factory) { |
179 #if defined(OS_WIN) | 177 #if defined(OS_WIN) |
180 target_services_ = NULL; | 178 target_services_ = NULL; |
181 #endif | 179 #endif |
182 DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | 180 DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( |
183 switches::kSingleProcess) || | 181 switches::kSingleProcess) || |
184 base::CommandLine::ForCurrentProcess()->HasSwitch( | 182 base::CommandLine::ForCurrentProcess()->HasSwitch( |
185 switches::kInProcessGPU)); | 183 switches::kInProcessGPU)); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 } | 308 } |
311 #endif | 309 #endif |
312 | 310 |
313 void GpuChildThread::StoreShaderToDisk(int32_t client_id, | 311 void GpuChildThread::StoreShaderToDisk(int32_t client_id, |
314 const std::string& key, | 312 const std::string& key, |
315 const std::string& shader) { | 313 const std::string& shader) { |
316 Send(new GpuHostMsg_CacheShader(client_id, key, shader)); | 314 Send(new GpuHostMsg_CacheShader(client_id, key, shader)); |
317 } | 315 } |
318 | 316 |
319 void GpuChildThread::OnInitialize(const gpu::GpuPreferences& gpu_preferences) { | 317 void GpuChildThread::OnInitialize(const gpu::GpuPreferences& gpu_preferences) { |
320 gpu_preferences_ = gpu_preferences; | |
321 | |
322 gpu_info_.video_decode_accelerator_capabilities = | 318 gpu_info_.video_decode_accelerator_capabilities = |
323 media::GpuVideoDecodeAccelerator::GetCapabilities(gpu_preferences_); | 319 media::GpuVideoDecodeAccelerator::GetCapabilities(gpu_preferences); |
324 gpu_info_.video_encode_accelerator_supported_profiles = | 320 gpu_info_.video_encode_accelerator_supported_profiles = |
325 media::GpuVideoEncodeAccelerator::GetSupportedProfiles( | 321 media::GpuVideoEncodeAccelerator::GetSupportedProfiles(gpu_preferences); |
326 gpu_preferences_); | |
327 gpu_info_.jpeg_decode_accelerator_supported = | 322 gpu_info_.jpeg_decode_accelerator_supported = |
328 media::GpuJpegDecodeAccelerator::IsSupported(); | 323 media::GpuJpegDecodeAccelerator::IsSupported(); |
329 | 324 |
330 // Record initialization only after collecting the GPU info because that can | 325 // Record initialization only after collecting the GPU info because that can |
331 // take a significant amount of time. | 326 // take a significant amount of time. |
332 gpu_info_.initialization_time = base::Time::Now() - process_start_time_; | 327 gpu_info_.initialization_time = base::Time::Now() - process_start_time_; |
333 Send(new GpuHostMsg_Initialized(!dead_on_arrival_, gpu_info_)); | 328 Send(new GpuHostMsg_Initialized(!dead_on_arrival_, gpu_info_)); |
334 while (!deferred_messages_.empty()) { | 329 while (!deferred_messages_.empty()) { |
335 Send(deferred_messages_.front()); | 330 Send(deferred_messages_.front()); |
336 deferred_messages_.pop(); | 331 deferred_messages_.pop(); |
(...skipping 17 matching lines...) Expand all Loading... |
354 if (!sync_point_manager) { | 349 if (!sync_point_manager) { |
355 if (!owned_sync_point_manager_) { | 350 if (!owned_sync_point_manager_) { |
356 owned_sync_point_manager_.reset(new gpu::SyncPointManager(false)); | 351 owned_sync_point_manager_.reset(new gpu::SyncPointManager(false)); |
357 } | 352 } |
358 sync_point_manager = owned_sync_point_manager_.get(); | 353 sync_point_manager = owned_sync_point_manager_.get(); |
359 } | 354 } |
360 | 355 |
361 // Defer creation of the render thread. This is to prevent it from handling | 356 // Defer creation of the render thread. This is to prevent it from handling |
362 // IPC messages before the sandbox has been enabled and all other necessary | 357 // IPC messages before the sandbox has been enabled and all other necessary |
363 // initialization has succeeded. | 358 // initialization has succeeded. |
364 gpu_channel_manager_.reset( | 359 gpu_channel_manager_.reset(new gpu::GpuChannelManager( |
365 new gpu::GpuChannelManager(gpu_preferences_, this, watchdog_thread_.get(), | 360 gpu_preferences, this, watchdog_thread_.get(), |
366 base::ThreadTaskRunnerHandle::Get().get(), | 361 base::ThreadTaskRunnerHandle::Get().get(), |
367 ChildProcess::current()->io_task_runner(), | 362 ChildProcess::current()->io_task_runner(), |
368 ChildProcess::current()->GetShutDownEvent(), | 363 ChildProcess::current()->GetShutDownEvent(), sync_point_manager, |
369 sync_point_manager, gpu_memory_buffer_factory_)); | 364 gpu_memory_buffer_factory_)); |
370 | 365 |
371 media_service_.reset(new media::MediaService(gpu_channel_manager_.get())); | 366 media_service_.reset(new media::MediaService(gpu_channel_manager_.get())); |
372 | 367 |
373 // Only set once per process instance. | 368 // Only set once per process instance. |
374 service_factory_.reset(new GpuServiceFactory); | 369 service_factory_.reset(new GpuServiceFactory); |
375 | 370 |
376 GetInterfaceRegistry()->AddInterface(base::Bind( | 371 GetInterfaceRegistry()->AddInterface(base::Bind( |
377 &GpuChildThread::BindServiceFactoryRequest, base::Unretained(this))); | 372 &GpuChildThread::BindServiceFactoryRequest, base::Unretained(this))); |
378 | 373 |
379 if (GetContentClient()->gpu()) { // NULL in tests. | 374 if (GetContentClient()->gpu()) { // NULL in tests. |
380 GetContentClient()->gpu()->ExposeInterfacesToBrowser( | 375 GetContentClient()->gpu()->ExposeInterfacesToBrowser(GetInterfaceRegistry(), |
381 GetInterfaceRegistry(), gpu_preferences_); | 376 gpu_preferences); |
382 GetContentClient()->gpu()->ConsumeInterfacesFromBrowser( | 377 GetContentClient()->gpu()->ConsumeInterfacesFromBrowser( |
383 GetRemoteInterfaces()); | 378 GetRemoteInterfaces()); |
384 } | 379 } |
385 | 380 |
386 GetInterfaceRegistry()->ResumeBinding(); | 381 GetInterfaceRegistry()->ResumeBinding(); |
387 } | 382 } |
388 | 383 |
389 void GpuChildThread::OnFinalize() { | 384 void GpuChildThread::OnFinalize() { |
390 // Quit the GPU process | 385 // Quit the GPU process |
391 base::MessageLoop::current()->QuitWhenIdle(); | 386 base::MessageLoop::current()->QuitWhenIdle(); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 | 548 |
554 void GpuChildThread::BindServiceFactoryRequest( | 549 void GpuChildThread::BindServiceFactoryRequest( |
555 shell::mojom::ServiceFactoryRequest request) { | 550 shell::mojom::ServiceFactoryRequest request) { |
556 DVLOG(1) << "GPU: Binding shell::mojom::ServiceFactoryRequest"; | 551 DVLOG(1) << "GPU: Binding shell::mojom::ServiceFactoryRequest"; |
557 DCHECK(service_factory_); | 552 DCHECK(service_factory_); |
558 service_factory_bindings_.AddBinding(service_factory_.get(), | 553 service_factory_bindings_.AddBinding(service_factory_.get(), |
559 std::move(request)); | 554 std::move(request)); |
560 } | 555 } |
561 | 556 |
562 } // namespace content | 557 } // namespace content |
OLD | NEW |