diff options
author | gspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-23 22:57:55 +0000 |
---|---|---|
committer | gspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-23 22:57:55 +0000 |
commit | cfa25bde323a4c21b8814cbc1df61ccbfa9d9314 (patch) | |
tree | 3e6797427d89e2fbc70401da278c7e3e7c3a3a0a /chrome/browser/zygote_host_linux.cc | |
parent | 47a68cff12f3b60e16a585b90643f493a7732337 (diff) | |
download | chromium_src-cfa25bde323a4c21b8814cbc1df61ccbfa9d9314.zip chromium_src-cfa25bde323a4c21b8814cbc1df61ccbfa9d9314.tar.gz chromium_src-cfa25bde323a4c21b8814cbc1df61ccbfa9d9314.tar.bz2 |
This change implements OOM priority management for ChromeOS
This adds periodic OOM score adjustment, based on the last access time of the tab, whether or not it is pinned, and (of course) how much memory it is using.
BUG=http://crosbug.com/8990
TEST=Ran some ui_tests, ran on device.
Review URL: http://codereview.chromium.org/4498001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67175 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/zygote_host_linux.cc')
-rw-r--r-- | chrome/browser/zygote_host_linux.cc | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/chrome/browser/zygote_host_linux.cc b/chrome/browser/zygote_host_linux.cc index 5536eaf..b6115f1 100644 --- a/chrome/browser/zygote_host_linux.cc +++ b/chrome/browser/zygote_host_linux.cc @@ -242,6 +242,13 @@ pid_t ZygoteHost::ForkRenderer( return base::kNullProcessHandle; } + const int kRendererScore = 5; + AdjustRendererOOMScore(pid, kRendererScore); + + return pid; +} + +void ZygoteHost::AdjustRendererOOMScore(base::ProcessHandle pid, int score) { // 1) You can't change the oom_adj of a non-dumpable process (EPERM) unless // you're root. Because of this, we can't set the oom_adj from the browser // process. @@ -274,27 +281,23 @@ pid_t ZygoteHost::ForkRenderer( selinux_valid = true; } - const int kRendererScore = 5; if (using_suid_sandbox_ && !selinux) { base::ProcessHandle sandbox_helper_process; - base::file_handle_mapping_vector dummy_map; std::vector<std::string> adj_oom_score_cmdline; adj_oom_score_cmdline.push_back(sandbox_binary_); adj_oom_score_cmdline.push_back(base::kAdjustOOMScoreSwitch); adj_oom_score_cmdline.push_back(base::Int64ToString(pid)); - adj_oom_score_cmdline.push_back(base::IntToString(kRendererScore)); + adj_oom_score_cmdline.push_back(base::IntToString(score)); CommandLine adj_oom_score_cmd(adj_oom_score_cmdline); - if (base::LaunchApp(adj_oom_score_cmdline, dummy_map, false, + if (base::LaunchApp(adj_oom_score_cmd, false, true, &sandbox_helper_process)) { ProcessWatcher::EnsureProcessGetsReaped(sandbox_helper_process); } } else if (!using_suid_sandbox_) { - if (!base::AdjustOOMScore(pid, kRendererScore)) - LOG(ERROR) << "Failed to adjust OOM score of renderer"; + if (!base::AdjustOOMScore(pid, score)) + PLOG(ERROR) << "Failed to adjust OOM score of renderer with pid " << pid; } - - return pid; } void ZygoteHost::EnsureProcessTerminated(pid_t process) { |