Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Side by Side Diff: content/browser/child_process_launcher.cc

Issue 1391893003: NOT FOR REVIEW: Aura on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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/child_process_launcher.h" 5 #include "content/browser/child_process_launcher.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/i18n/icu_util.h" 10 #include "base/i18n/icu_util.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 // slower due to the rest of the browser initializing at the same time). 63 // slower due to the rest of the browser initializing at the same time).
64 static bool done_first_launch = false; 64 static bool done_first_launch = false;
65 if (done_first_launch) { 65 if (done_first_launch) {
66 UMA_HISTOGRAM_TIMES("MPArch.ChildProcessLaunchSubsequent", launch_time); 66 UMA_HISTOGRAM_TIMES("MPArch.ChildProcessLaunchSubsequent", launch_time);
67 } else { 67 } else {
68 UMA_HISTOGRAM_TIMES("MPArch.ChildProcessLaunchFirst", launch_time); 68 UMA_HISTOGRAM_TIMES("MPArch.ChildProcessLaunchFirst", launch_time);
69 done_first_launch = true; 69 done_first_launch = true;
70 } 70 }
71 } 71 }
72 72
73 #if defined(OS_ANDROID) 73 #if defined(OS_ANDROID)// && !defined(USE_AURA)
no sievers 2015/10/20 19:24:23 remove
74 // TODO(sievers): Remove this by defining better what happens on what 74 // TODO(sievers): Remove this by defining better what happens on what
75 // thread in the corresponding Java code. 75 // thread in the corresponding Java code.
76 void OnChildProcessStartedAndroid(const NotifyCallback& callback, 76 void OnChildProcessStartedAndroid(const NotifyCallback& callback,
77 BrowserThread::ID client_thread_id, 77 BrowserThread::ID client_thread_id,
78 const base::TimeTicks begin_launch_time, 78 const base::TimeTicks begin_launch_time,
79 base::ScopedFD ipcfd, 79 base::ScopedFD ipcfd,
80 base::ProcessHandle handle) { 80 base::ProcessHandle handle) {
81 // This can be called on the launcher thread or UI thread. 81 // This can be called on the launcher thread or UI thread.
82 base::TimeDelta launch_time = base::TimeTicks::Now() - begin_launch_time; 82 base::TimeDelta launch_time = base::TimeTicks::Now() - begin_launch_time;
83 BrowserThread::PostTask( 83 BrowserThread::PostTask(
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 if (process_type != switches::kZygoteProcess) { 172 if (process_type != switches::kZygoteProcess) {
173 cmd_line->AppendSwitch(::switches::kV8NativesPassedByFD); 173 cmd_line->AppendSwitch(::switches::kV8NativesPassedByFD);
174 if (snapshot_pf != -1) { 174 if (snapshot_pf != -1) {
175 cmd_line->AppendSwitch(::switches::kV8SnapshotPassedByFD); 175 cmd_line->AppendSwitch(::switches::kV8SnapshotPassedByFD);
176 } 176 }
177 } 177 }
178 #endif // defined(V8_USE_EXTERNAL_STARTUP_DATA) 178 #endif // defined(V8_USE_EXTERNAL_STARTUP_DATA)
179 #endif // defined(OS_POSIX) && !defined(OS_MACOSX) 179 #endif // defined(OS_POSIX) && !defined(OS_MACOSX)
180 180
181 #if defined(OS_ANDROID) 181 #if defined(OS_ANDROID)
182 //#if !defined(USE_AURA)
182 files_to_register->Share( 183 files_to_register->Share(
183 kAndroidICUDataDescriptor, 184 kAndroidICUDataDescriptor,
184 base::i18n::GetIcuDataFileHandle(&regions[kAndroidICUDataDescriptor])); 185 base::i18n::GetIcuDataFileHandle(&regions[kAndroidICUDataDescriptor]));
185 186
186 // Android WebView runs in single process, ensure that we never get here 187 // Android WebView runs in single process, ensure that we never get here
187 // when running in single process mode. 188 // when running in single process mode.
188 CHECK(!cmd_line->HasSwitch(switches::kSingleProcess)); 189 CHECK(!cmd_line->HasSwitch(switches::kSingleProcess));
189 190
190 StartChildProcess( 191 StartChildProcess(
191 cmd_line->argv(), child_process_id, files_to_register.Pass(), regions, 192 cmd_line->argv(), child_process_id, files_to_register.Pass(), regions,
192 base::Bind(&OnChildProcessStartedAndroid, callback, client_thread_id, 193 base::Bind(&OnChildProcessStartedAndroid, callback, client_thread_id,
193 begin_launch_time, base::Passed(&ipcfd))); 194 begin_launch_time, base::Passed(&ipcfd)));
194 195 //#endif
195 #elif defined(OS_POSIX) 196 #elif defined(OS_POSIX)
196 // We need to close the client end of the IPC channel to reliably detect 197 // We need to close the client end of the IPC channel to reliably detect
197 // child termination. 198 // child termination.
198 199
199 #if !defined(OS_MACOSX) 200 #if !defined(OS_MACOSX)
200 if (use_zygote) { 201 if (use_zygote) {
201 base::ProcessHandle handle = ZygoteHostImpl::GetInstance()->ForkRequest( 202 base::ProcessHandle handle = ZygoteHostImpl::GetInstance()->ForkRequest(
202 cmd_line->argv(), files_to_register.Pass(), process_type); 203 cmd_line->argv(), files_to_register.Pass(), process_type);
203 process = base::Process(handle); 204 process = base::Process(handle);
204 } else 205 } else
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 BrowserThread::PostTask(client_thread_id, FROM_HERE, 279 BrowserThread::PostTask(client_thread_id, FROM_HERE,
279 base::Bind(callback, 280 base::Bind(callback,
280 use_zygote, 281 use_zygote,
281 base::Passed(&process))); 282 base::Passed(&process)));
282 #endif // !defined(OS_ANDROID) 283 #endif // !defined(OS_ANDROID)
283 } 284 }
284 285
285 void TerminateOnLauncherThread(bool zygote, base::Process process) { 286 void TerminateOnLauncherThread(bool zygote, base::Process process) {
286 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER); 287 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER);
287 #if defined(OS_ANDROID) 288 #if defined(OS_ANDROID)
289 //#if !defined(USE_AURA)
no sievers 2015/10/20 19:24:23 We should keep the StopChildProcess() call.
288 VLOG(1) << "ChromeProcess: Stopping process with handle " 290 VLOG(1) << "ChromeProcess: Stopping process with handle "
289 << process.Handle(); 291 << process.Handle();
290 StopChildProcess(process.Handle()); 292 StopChildProcess(process.Handle());
293 //#endif
291 #else 294 #else
292 // Client has gone away, so just kill the process. Using exit code 0 295 // Client has gone away, so just kill the process. Using exit code 0
293 // means that UMA won't treat this as a crash. 296 // means that UMA won't treat this as a crash.
294 process.Terminate(RESULT_CODE_NORMAL_EXIT, false); 297 process.Terminate(RESULT_CODE_NORMAL_EXIT, false);
295 // On POSIX, we must additionally reap the child. 298 // On POSIX, we must additionally reap the child.
296 #if defined(OS_POSIX) 299 #if defined(OS_POSIX)
297 #if !defined(OS_MACOSX) 300 #if !defined(OS_MACOSX)
298 if (zygote) { 301 if (zygote) {
299 // If the renderer was created via a zygote, we have to proxy the reaping 302 // If the renderer was created via a zygote, we have to proxy the reaping
300 // through the zygote process. 303 // through the zygote process.
(...skipping 10 matching lines...) Expand all
311 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER); 314 DCHECK_CURRENTLY_ON(BrowserThread::PROCESS_LAUNCHER);
312 #if defined(OS_MACOSX) 315 #if defined(OS_MACOSX)
313 MachBroker* broker = MachBroker::GetInstance(); 316 MachBroker* broker = MachBroker::GetInstance();
314 mach_port_t task_port = broker->TaskForPid(process.Pid()); 317 mach_port_t task_port = broker->TaskForPid(process.Pid());
315 if (task_port != TASK_NULL) { 318 if (task_port != TASK_NULL) {
316 process.SetProcessBackgrounded(task_port, background); 319 process.SetProcessBackgrounded(task_port, background);
317 } 320 }
318 #else 321 #else
319 process.SetProcessBackgrounded(background); 322 process.SetProcessBackgrounded(background);
320 #endif // defined(OS_MACOSX) 323 #endif // defined(OS_MACOSX)
321 #if defined(OS_ANDROID) 324 #if defined(OS_ANDROID)// && !defined(USE_AURA)
322 SetChildProcessInForeground(process.Handle(), !background); 325 SetChildProcessInForeground(process.Handle(), !background);
323 #endif 326 #endif
324 } 327 }
325 328
326 } // anonymous namespace 329 } // anonymous namespace
327 330
328 ChildProcessLauncher::ChildProcessLauncher( 331 ChildProcessLauncher::ChildProcessLauncher(
329 SandboxedProcessLauncherDelegate* delegate, 332 SandboxedProcessLauncherDelegate* delegate,
330 base::CommandLine* cmd_line, 333 base::CommandLine* cmd_line,
331 int child_process_id, 334 int child_process_id,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 GetTerminationStatus(process_.Handle(), known_dead, &exit_code_); 408 GetTerminationStatus(process_.Handle(), known_dead, &exit_code_);
406 } else if (known_dead) { 409 } else if (known_dead) {
407 termination_status_ = 410 termination_status_ =
408 base::GetKnownDeadTerminationStatus(process_.Handle(), &exit_code_); 411 base::GetKnownDeadTerminationStatus(process_.Handle(), &exit_code_);
409 } else { 412 } else {
410 #elif defined(OS_MACOSX) 413 #elif defined(OS_MACOSX)
411 if (known_dead) { 414 if (known_dead) {
412 termination_status_ = 415 termination_status_ =
413 base::GetKnownDeadTerminationStatus(process_.Handle(), &exit_code_); 416 base::GetKnownDeadTerminationStatus(process_.Handle(), &exit_code_);
414 } else { 417 } else {
415 #elif defined(OS_ANDROID) 418 #elif defined(OS_ANDROID)// && !defined(USE_AURA)
416 if (IsChildProcessOomProtected(process_.Handle())) { 419 if (IsChildProcessOomProtected(process_.Handle())) {
417 termination_status_ = base::TERMINATION_STATUS_OOM_PROTECTED; 420 termination_status_ = base::TERMINATION_STATUS_OOM_PROTECTED;
418 } else { 421 } else {
419 #else 422 #else
420 { 423 {
421 #endif 424 #endif
422 termination_status_ = 425 termination_status_ =
423 base::GetTerminationStatus(process_.Handle(), &exit_code_); 426 base::GetTerminationStatus(process_.Handle(), &exit_code_);
424 } 427 }
425 } 428 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 } 544 }
542 545
543 ChildProcessLauncher::Client* ChildProcessLauncher::ReplaceClientForTest( 546 ChildProcessLauncher::Client* ChildProcessLauncher::ReplaceClientForTest(
544 Client* client) { 547 Client* client) {
545 Client* ret = client_; 548 Client* ret = client_;
546 client_ = client; 549 client_ = client;
547 return ret; 550 return ret;
548 } 551 }
549 552
550 } // namespace content 553 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698