summaryrefslogtreecommitdiffstats
path: root/chrome/browser/zygote_host_linux.cc
diff options
context:
space:
mode:
authorgspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-23 22:57:55 +0000
committergspencer@chromium.org <gspencer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-23 22:57:55 +0000
commitcfa25bde323a4c21b8814cbc1df61ccbfa9d9314 (patch)
tree3e6797427d89e2fbc70401da278c7e3e7c3a3a0a /chrome/browser/zygote_host_linux.cc
parent47a68cff12f3b60e16a585b90643f493a7732337 (diff)
downloadchromium_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.cc19
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) {