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/zygote_host/zygote_host_impl_linux.h" | 5 #include "content/browser/zygote_host/zygote_host_impl_linux.h" |
6 | 6 |
7 #include <sys/socket.h> | 7 #include <sys/socket.h> |
8 #include <sys/stat.h> | 8 #include <sys/stat.h> |
9 #include <sys/types.h> | 9 #include <sys/types.h> |
10 #include <unistd.h> | 10 #include <unistd.h> |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 &sandbox_helper_process)) { | 400 &sandbox_helper_process)) { |
401 base::EnsureProcessGetsReaped(sandbox_helper_process); | 401 base::EnsureProcessGetsReaped(sandbox_helper_process); |
402 } | 402 } |
403 } else if (!using_suid_sandbox_) { | 403 } else if (!using_suid_sandbox_) { |
404 if (!base::AdjustOOMScore(pid, score)) | 404 if (!base::AdjustOOMScore(pid, score)) |
405 PLOG(ERROR) << "Failed to adjust OOM score of renderer with pid " << pid; | 405 PLOG(ERROR) << "Failed to adjust OOM score of renderer with pid " << pid; |
406 } | 406 } |
407 } | 407 } |
408 #endif | 408 #endif |
409 | 409 |
410 void ZygoteHostImpl::AdjustLowMemoryMargin(int64 margin_mb) { | |
411 #if defined(OS_CHROMEOS) | |
412 // You can't change the low memory margin unless you're root. Because of this, | |
413 // we can't set the low memory margin from the browser process. | |
414 // So, we use the SUID binary to change it for us. | |
415 if (using_suid_sandbox_) { | |
416 #if defined(USE_TCMALLOC) | |
417 // If heap profiling is running, these processes are not exiting, at least | |
418 // on ChromeOS. The easiest thing to do is not launch them when profiling. | |
419 // TODO(stevenjb): Investigate further and fix. | |
420 if (IsHeapProfilerRunning()) | |
421 return; | |
422 #endif | |
423 std::vector<std::string> adj_low_mem_commandline; | |
424 adj_low_mem_commandline.push_back(sandbox_binary_); | |
425 adj_low_mem_commandline.push_back(sandbox::kAdjustLowMemMarginSwitch); | |
426 adj_low_mem_commandline.push_back(base::Int64ToString(margin_mb)); | |
427 | |
428 base::ProcessHandle sandbox_helper_process; | |
429 if (base::LaunchProcess(adj_low_mem_commandline, base::LaunchOptions(), | |
430 &sandbox_helper_process)) { | |
431 base::EnsureProcessGetsReaped(sandbox_helper_process); | |
432 } else { | |
433 LOG(ERROR) << "Unable to run suid sandbox to set low memory margin."; | |
434 } | |
435 } | |
436 // Don't adjust memory margin if we're not running with the sandbox: this | |
437 // isn't very common, and not doing it has little impact. | |
438 #else | |
439 // Low memory notification is currently only implemented on ChromeOS. | |
440 NOTREACHED() << "AdjustLowMemoryMargin not implemented"; | |
441 #endif // defined(OS_CHROMEOS) | |
442 } | |
443 | |
444 | |
445 void ZygoteHostImpl::EnsureProcessTerminated(pid_t process) { | 410 void ZygoteHostImpl::EnsureProcessTerminated(pid_t process) { |
446 DCHECK(init_); | 411 DCHECK(init_); |
447 Pickle pickle; | 412 Pickle pickle; |
448 | 413 |
449 pickle.WriteInt(kZygoteCommandReap); | 414 pickle.WriteInt(kZygoteCommandReap); |
450 pickle.WriteInt(process); | 415 pickle.WriteInt(process); |
451 if (!SendMessage(pickle, NULL)) | 416 if (!SendMessage(pickle, NULL)) |
452 LOG(ERROR) << "Failed to send Reap message to zygote"; | 417 LOG(ERROR) << "Failed to send Reap message to zygote"; |
453 } | 418 } |
454 | 419 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
507 return RenderSandboxHostLinux::GetInstance()->pid(); | 472 return RenderSandboxHostLinux::GetInstance()->pid(); |
508 } | 473 } |
509 | 474 |
510 int ZygoteHostImpl::GetSandboxStatus() const { | 475 int ZygoteHostImpl::GetSandboxStatus() const { |
511 if (have_read_sandbox_status_word_) | 476 if (have_read_sandbox_status_word_) |
512 return sandbox_status_; | 477 return sandbox_status_; |
513 return 0; | 478 return 0; |
514 } | 479 } |
515 | 480 |
516 } // namespace content | 481 } // namespace content |
OLD | NEW |