| 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/browser/gpu/gpu_process_host.h" | 5 #include "content/browser/gpu/gpu_process_host.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 } | 397 } |
| 398 | 398 |
| 399 GpuProcessHost::GpuProcessHost(int host_id, GpuProcessKind kind) | 399 GpuProcessHost::GpuProcessHost(int host_id, GpuProcessKind kind) |
| 400 : host_id_(host_id), | 400 : host_id_(host_id), |
| 401 valid_(true), | 401 valid_(true), |
| 402 in_process_(false), | 402 in_process_(false), |
| 403 swiftshader_rendering_(false), | 403 swiftshader_rendering_(false), |
| 404 kind_(kind), | 404 kind_(kind), |
| 405 process_launched_(false), | 405 process_launched_(false), |
| 406 initialized_(false), | 406 initialized_(false), |
| 407 uma_memory_stats_received_(false) { | 407 uma_memory_stats_received_(false), |
| 408 permission_service_context_(new PermissionServiceContext(this)) { |
| 408 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 409 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 409 switches::kSingleProcess) || | 410 switches::kSingleProcess) || |
| 410 base::CommandLine::ForCurrentProcess()->HasSwitch( | 411 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 411 switches::kInProcessGPU)) { | 412 switches::kInProcessGPU)) { |
| 412 in_process_ = true; | 413 in_process_ = true; |
| 413 } | 414 } |
| 414 | 415 |
| 415 // If the 'single GPU process' policy ever changes, we still want to maintain | 416 // If the 'single GPU process' policy ever changes, we still want to maintain |
| 416 // it for 'gpu thread' mode and only create one instance of host and thread. | 417 // it for 'gpu thread' mode and only create one instance of host and thread. |
| 417 DCHECK(!in_process_ || g_gpu_process_hosts[kind] == NULL); | 418 DCHECK(!in_process_ || g_gpu_process_hosts[kind] == NULL); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 init_start_time_ = base::TimeTicks::Now(); | 534 init_start_time_ = base::TimeTicks::Now(); |
| 534 | 535 |
| 535 TRACE_EVENT_INSTANT0("gpu", "LaunchGpuProcess", TRACE_EVENT_SCOPE_THREAD); | 536 TRACE_EVENT_INSTANT0("gpu", "LaunchGpuProcess", TRACE_EVENT_SCOPE_THREAD); |
| 536 | 537 |
| 537 std::string channel_id = process_->GetHost()->CreateChannel(); | 538 std::string channel_id = process_->GetHost()->CreateChannel(); |
| 538 if (channel_id.empty()) | 539 if (channel_id.empty()) |
| 539 return false; | 540 return false; |
| 540 | 541 |
| 541 DCHECK(!mojo_application_host_); | 542 DCHECK(!mojo_application_host_); |
| 542 mojo_application_host_.reset(new MojoApplicationHost); | 543 mojo_application_host_.reset(new MojoApplicationHost); |
| 544 RegisterMojoServices(); |
| 543 | 545 |
| 544 gpu::GpuPreferences gpu_preferences = GetGpuPreferencesFromCommandLine(); | 546 gpu::GpuPreferences gpu_preferences = GetGpuPreferencesFromCommandLine(); |
| 545 if (in_process_) { | 547 if (in_process_) { |
| 546 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 548 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 547 DCHECK(g_gpu_main_thread_factory); | 549 DCHECK(g_gpu_main_thread_factory); |
| 548 in_process_gpu_thread_.reset( | 550 in_process_gpu_thread_.reset( |
| 549 g_gpu_main_thread_factory(InProcessChildThreadParams( | 551 g_gpu_main_thread_factory(InProcessChildThreadParams( |
| 550 channel_id, base::MessageLoop::current()->task_runner(), | 552 channel_id, base::MessageLoop::current()->task_runner(), |
| 551 std::string(), mojo_application_host_->GetToken()), | 553 std::string(), mojo_application_host_->GetToken()), |
| 552 gpu_preferences)); | 554 gpu_preferences)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 564 } else if (!LaunchGpuProcess(channel_id, &gpu_preferences)) { | 566 } else if (!LaunchGpuProcess(channel_id, &gpu_preferences)) { |
| 565 return false; | 567 return false; |
| 566 } | 568 } |
| 567 | 569 |
| 568 if (!Send(new GpuMsg_Initialize(gpu_preferences))) | 570 if (!Send(new GpuMsg_Initialize(gpu_preferences))) |
| 569 return false; | 571 return false; |
| 570 | 572 |
| 571 return true; | 573 return true; |
| 572 } | 574 } |
| 573 | 575 |
| 576 void GpuProcessHost::RegisterMojoServices() { |
| 577 mojo_application_host_->service_registry()->AddService( |
| 578 base::Bind(&PermissionServiceContext::CreateService, |
| 579 base::Unretained(permission_service_context_.get()))); |
| 580 } |
| 581 |
| 574 void GpuProcessHost::RouteOnUIThread(const IPC::Message& message) { | 582 void GpuProcessHost::RouteOnUIThread(const IPC::Message& message) { |
| 575 BrowserThread::PostTask( | 583 BrowserThread::PostTask( |
| 576 BrowserThread::UI, | 584 BrowserThread::UI, |
| 577 FROM_HERE, | 585 FROM_HERE, |
| 578 base::Bind(&RouteToGpuProcessHostUIShimTask, host_id_, message)); | 586 base::Bind(&RouteToGpuProcessHostUIShimTask, host_id_, message)); |
| 579 } | 587 } |
| 580 | 588 |
| 581 bool GpuProcessHost::Send(IPC::Message* msg) { | 589 bool GpuProcessHost::Send(IPC::Message* msg) { |
| 582 DCHECK(CalledOnValidThread()); | 590 DCHECK(CalledOnValidThread()); |
| 583 if (process_->GetHost()->IsChannelOpening()) { | 591 if (process_->GetHost()->IsChannelOpening()) { |
| (...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); | 1158 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); |
| 1151 ClientIdToShaderCacheMap::iterator iter = | 1159 ClientIdToShaderCacheMap::iterator iter = |
| 1152 client_id_to_shader_cache_.find(client_id); | 1160 client_id_to_shader_cache_.find(client_id); |
| 1153 // If the cache doesn't exist then this is an off the record profile. | 1161 // If the cache doesn't exist then this is an off the record profile. |
| 1154 if (iter == client_id_to_shader_cache_.end()) | 1162 if (iter == client_id_to_shader_cache_.end()) |
| 1155 return; | 1163 return; |
| 1156 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); | 1164 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); |
| 1157 } | 1165 } |
| 1158 | 1166 |
| 1159 } // namespace content | 1167 } // namespace content |
| OLD | NEW |