| 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/common/child_process_host_impl.h" | 5 #include "content/common/child_process_host_impl.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/atomic_sequence_num.h" | 9 #include "base/atomic_sequence_num.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "content/common/child_process_messages.h" | 25 #include "content/common/child_process_messages.h" |
| 26 #include "content/public/common/child_process_host_delegate.h" | 26 #include "content/public/common/child_process_host_delegate.h" |
| 27 #include "content/public/common/content_paths.h" | 27 #include "content/public/common/content_paths.h" |
| 28 #include "content/public/common/content_switches.h" | 28 #include "content/public/common/content_switches.h" |
| 29 #include "ipc/ipc.mojom.h" | 29 #include "ipc/ipc.mojom.h" |
| 30 #include "ipc/ipc_channel.h" | 30 #include "ipc/ipc_channel.h" |
| 31 #include "ipc/ipc_channel_mojo.h" | 31 #include "ipc/ipc_channel_mojo.h" |
| 32 #include "ipc/ipc_logging.h" | 32 #include "ipc/ipc_logging.h" |
| 33 #include "ipc/message_filter.h" | 33 #include "ipc/message_filter.h" |
| 34 #include "mojo/edk/embedder/embedder.h" | 34 #include "mojo/edk/embedder/embedder.h" |
| 35 #include "services/resource_coordinator/public/interfaces/memory/constants.mojom
.h" |
| 35 #include "services/service_manager/public/cpp/interface_provider.h" | 36 #include "services/service_manager/public/cpp/interface_provider.h" |
| 36 | 37 |
| 37 #if defined(OS_LINUX) | 38 #if defined(OS_LINUX) |
| 38 #include "base/linux_util.h" | 39 #include "base/linux_util.h" |
| 39 #elif defined(OS_WIN) | 40 #elif defined(OS_WIN) |
| 40 #include "content/common/font_cache_dispatcher_win.h" | 41 #include "content/common/font_cache_dispatcher_win.h" |
| 41 #endif // OS_LINUX | 42 #endif // OS_LINUX |
| 42 | 43 |
| 43 namespace { | 44 namespace { |
| 44 | 45 |
| 45 // Global atomic to generate child process unique IDs. | 46 // Global atomic to generate child process unique IDs. |
| 46 base::StaticAtomicSequenceNumber g_unique_id; | 47 base::StaticAtomicSequenceNumber g_unique_id; |
| 47 | 48 |
| 48 } // namespace | 49 } // namespace |
| 49 | 50 |
| 50 namespace content { | 51 namespace content { |
| 51 | 52 |
| 52 int ChildProcessHost::kInvalidUniqueID = -1; | 53 int ChildProcessHost::kInvalidUniqueID = -1; |
| 53 | 54 |
| 54 uint64_t ChildProcessHost::kBrowserTracingProcessId = | |
| 55 std::numeric_limits<uint64_t>::max(); | |
| 56 | |
| 57 // static | 55 // static |
| 58 ChildProcessHost* ChildProcessHost::Create(ChildProcessHostDelegate* delegate) { | 56 ChildProcessHost* ChildProcessHost::Create(ChildProcessHostDelegate* delegate) { |
| 59 return new ChildProcessHostImpl(delegate); | 57 return new ChildProcessHostImpl(delegate); |
| 60 } | 58 } |
| 61 | 59 |
| 62 // static | 60 // static |
| 63 base::FilePath ChildProcessHost::GetChildPath(int flags) { | 61 base::FilePath ChildProcessHost::GetChildPath(int flags) { |
| 64 base::FilePath child_path; | 62 base::FilePath child_path; |
| 65 | 63 |
| 66 child_path = base::CommandLine::ForCurrentProcess()->GetSwitchValuePath( | 64 child_path = base::CommandLine::ForCurrentProcess()->GetSwitchValuePath( |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 | 196 |
| 199 uint64_t ChildProcessHostImpl::ChildProcessUniqueIdToTracingProcessId( | 197 uint64_t ChildProcessHostImpl::ChildProcessUniqueIdToTracingProcessId( |
| 200 int child_process_id) { | 198 int child_process_id) { |
| 201 // In single process mode, all the children are hosted in the same process, | 199 // In single process mode, all the children are hosted in the same process, |
| 202 // therefore the generated memory dump guids should not be conditioned by the | 200 // therefore the generated memory dump guids should not be conditioned by the |
| 203 // child process id. The clients need not be aware of SPM and the conversion | 201 // child process id. The clients need not be aware of SPM and the conversion |
| 204 // takes care of the SPM special case while translating child process ids to | 202 // takes care of the SPM special case while translating child process ids to |
| 205 // tracing process ids. | 203 // tracing process ids. |
| 206 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 204 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 207 switches::kSingleProcess)) | 205 switches::kSingleProcess)) |
| 208 return ChildProcessHost::kBrowserTracingProcessId; | 206 return memory_instrumentation::mojom::kServiceTracingProcessId; |
| 209 | 207 |
| 210 // The hash value is incremented so that the tracing id is never equal to | 208 // The hash value is incremented so that the tracing id is never equal to |
| 211 // MemoryDumpManager::kInvalidTracingProcessId. | 209 // MemoryDumpManager::kInvalidTracingProcessId. |
| 212 return static_cast<uint64_t>( | 210 return static_cast<uint64_t>( |
| 213 base::Hash(reinterpret_cast<const char*>(&child_process_id), | 211 base::Hash(reinterpret_cast<const char*>(&child_process_id), |
| 214 sizeof(child_process_id))) + | 212 sizeof(child_process_id))) + |
| 215 1; | 213 1; |
| 216 } | 214 } |
| 217 | 215 |
| 218 bool ChildProcessHostImpl::OnMessageReceived(const IPC::Message& msg) { | 216 bool ChildProcessHostImpl::OnMessageReceived(const IPC::Message& msg) { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 void ChildProcessHostImpl::OnBadMessageReceived(const IPC::Message& message) { | 279 void ChildProcessHostImpl::OnBadMessageReceived(const IPC::Message& message) { |
| 282 delegate_->OnBadMessageReceived(message); | 280 delegate_->OnBadMessageReceived(message); |
| 283 } | 281 } |
| 284 | 282 |
| 285 void ChildProcessHostImpl::OnShutdownRequest() { | 283 void ChildProcessHostImpl::OnShutdownRequest() { |
| 286 if (delegate_->CanShutdown()) | 284 if (delegate_->CanShutdown()) |
| 287 Send(new ChildProcessMsg_Shutdown()); | 285 Send(new ChildProcessMsg_Shutdown()); |
| 288 } | 286 } |
| 289 | 287 |
| 290 } // namespace content | 288 } // namespace content |
| OLD | NEW |