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 "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/base_switches.h" | 8 #include "base/base_switches.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 } | 272 } |
273 } | 273 } |
274 | 274 |
275 private: | 275 private: |
276 CommandLine* cmd_line_; | 276 CommandLine* cmd_line_; |
277 }; | 277 }; |
278 #endif // defined(OS_WIN) | 278 #endif // defined(OS_WIN) |
279 | 279 |
280 } // anonymous namespace | 280 } // anonymous namespace |
281 | 281 |
| 282 // Single process not supported in multiple dll mode currently. |
| 283 #if !defined(CHROME_MULTIPLE_DLL) |
282 // This class creates a GPU thread (instead of a GPU process), when running | 284 // This class creates a GPU thread (instead of a GPU process), when running |
283 // with --in-process-gpu or --single-process. | 285 // with --in-process-gpu or --single-process. |
284 class GpuMainThread : public base::Thread { | 286 class GpuMainThread : public base::Thread { |
285 public: | 287 public: |
286 explicit GpuMainThread(const std::string& channel_id) | 288 explicit GpuMainThread(const std::string& channel_id) |
287 : base::Thread("Chrome_InProcGpuThread"), | 289 : base::Thread("Chrome_InProcGpuThread"), |
288 channel_id_(channel_id), | 290 channel_id_(channel_id), |
289 gpu_process_(NULL) { | 291 gpu_process_(NULL) { |
290 } | 292 } |
291 | 293 |
(...skipping 13 matching lines...) Expand all Loading... |
305 delete gpu_process_; | 307 delete gpu_process_; |
306 } | 308 } |
307 | 309 |
308 private: | 310 private: |
309 std::string channel_id_; | 311 std::string channel_id_; |
310 // Deleted in CleanUp() on the gpu thread, so don't use smart pointers. | 312 // Deleted in CleanUp() on the gpu thread, so don't use smart pointers. |
311 GpuProcess* gpu_process_; | 313 GpuProcess* gpu_process_; |
312 | 314 |
313 DISALLOW_COPY_AND_ASSIGN(GpuMainThread); | 315 DISALLOW_COPY_AND_ASSIGN(GpuMainThread); |
314 }; | 316 }; |
| 317 #endif // !CHROME_MULTIPLE_DLL |
315 | 318 |
316 // static | 319 // static |
317 bool GpuProcessHost::ValidateHost(GpuProcessHost* host) { | 320 bool GpuProcessHost::ValidateHost(GpuProcessHost* host) { |
318 if (!host) | 321 if (!host) |
319 return false; | 322 return false; |
320 | 323 |
321 // The Gpu process is invalid if it's not using SwiftShader, the card is | 324 // The Gpu process is invalid if it's not using SwiftShader, the card is |
322 // blacklisted, and we can kill it and start over. | 325 // blacklisted, and we can kill it and start over. |
323 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess) || | 326 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess) || |
324 CommandLine::ForCurrentProcess()->HasSwitch(switches::kInProcessGPU) || | 327 CommandLine::ForCurrentProcess()->HasSwitch(switches::kInProcessGPU) || |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 | 592 |
590 bool GpuProcessHost::Init() { | 593 bool GpuProcessHost::Init() { |
591 init_start_time_ = base::TimeTicks::Now(); | 594 init_start_time_ = base::TimeTicks::Now(); |
592 | 595 |
593 TRACE_EVENT_INSTANT0("gpu", "LaunchGpuProcess", TRACE_EVENT_SCOPE_THREAD); | 596 TRACE_EVENT_INSTANT0("gpu", "LaunchGpuProcess", TRACE_EVENT_SCOPE_THREAD); |
594 | 597 |
595 std::string channel_id = process_->GetHost()->CreateChannel(); | 598 std::string channel_id = process_->GetHost()->CreateChannel(); |
596 if (channel_id.empty()) | 599 if (channel_id.empty()) |
597 return false; | 600 return false; |
598 | 601 |
| 602 // Single process not supported in multiple dll mode currently. |
| 603 #if !defined(CHROME_MULTIPLE_DLL) |
599 if (in_process_) { | 604 if (in_process_) { |
600 CommandLine::ForCurrentProcess()->AppendSwitch( | 605 CommandLine::ForCurrentProcess()->AppendSwitch( |
601 switches::kDisableGpuWatchdog); | 606 switches::kDisableGpuWatchdog); |
602 | 607 |
603 in_process_gpu_thread_.reset(new GpuMainThread(channel_id)); | 608 in_process_gpu_thread_.reset(new GpuMainThread(channel_id)); |
604 in_process_gpu_thread_->Start(); | 609 in_process_gpu_thread_->Start(); |
605 | 610 |
606 OnProcessLaunched(); // Fake a callback that the process is ready. | 611 OnProcessLaunched(); // Fake a callback that the process is ready. |
607 } else if (!LaunchGpuProcess(channel_id)) { | 612 } else |
| 613 #endif // !CHROME_MULTIPLE_DLL |
| 614 if (!LaunchGpuProcess(channel_id)) { |
608 return false; | 615 return false; |
609 } | 616 } |
610 | 617 |
611 if (!Send(new GpuMsg_Initialize())) | 618 if (!Send(new GpuMsg_Initialize())) |
612 return false; | 619 return false; |
613 | 620 |
614 return true; | 621 return true; |
615 } | 622 } |
616 | 623 |
617 void GpuProcessHost::RouteOnUIThread(const IPC::Message& message) { | 624 void GpuProcessHost::RouteOnUIThread(const IPC::Message& message) { |
(...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1270 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); | 1277 TRACE_EVENT0("gpu", "GpuProcessHost::OnCacheShader"); |
1271 ClientIdToShaderCacheMap::iterator iter = | 1278 ClientIdToShaderCacheMap::iterator iter = |
1272 client_id_to_shader_cache_.find(client_id); | 1279 client_id_to_shader_cache_.find(client_id); |
1273 // If the cache doesn't exist then this is an off the record profile. | 1280 // If the cache doesn't exist then this is an off the record profile. |
1274 if (iter == client_id_to_shader_cache_.end()) | 1281 if (iter == client_id_to_shader_cache_.end()) |
1275 return; | 1282 return; |
1276 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); | 1283 iter->second->Cache(GetShaderPrefixKey() + ":" + key, shader); |
1277 } | 1284 } |
1278 | 1285 |
1279 } // namespace content | 1286 } // namespace content |
OLD | NEW |