summaryrefslogtreecommitdiffstats
path: root/base/process_util_linux.cc
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-29 14:14:25 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-29 14:14:25 +0000
commit07179a9013037207764553bba2f6a09880bf0001 (patch)
tree56c10bd505354ee55476e9bba9be459fe19ca137 /base/process_util_linux.cc
parent92a01cc52d3ab82765f8866801fe1335053101fa (diff)
downloadchromium_src-07179a9013037207764553bba2f6a09880bf0001.zip
chromium_src-07179a9013037207764553bba2f6a09880bf0001.tar.gz
chromium_src-07179a9013037207764553bba2f6a09880bf0001.tar.bz2
Linux: Parse some /proc fields as size_t values instead of ints.
Review URL: https://chromiumcodereview.appspot.com/11013002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159405 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/process_util_linux.cc')
-rw-r--r--base/process_util_linux.cc39
1 files changed, 29 insertions, 10 deletions
diff --git a/base/process_util_linux.cc b/base/process_util_linux.cc
index c5d2de6..342578a 100644
--- a/base/process_util_linux.cc
+++ b/base/process_util_linux.cc
@@ -113,9 +113,17 @@ int GetProcStatsFieldAsInt(const std::vector<std::string>& proc_stats,
CHECK_LT(static_cast<size_t>(field_num), proc_stats.size());
int value;
- if (base::StringToInt(proc_stats[field_num], &value))
- return value;
- return 0;
+ return base::StringToInt(proc_stats[field_num], &value) ? value : 0;
+}
+
+// Same as GetProcStatsFieldAsInt(), but for size_t values.
+size_t GetProcStatsFieldAsSizeT(const std::vector<std::string>& proc_stats,
+ ProcStatsFields field_num) {
+ DCHECK_GE(field_num, VM_PPID);
+ CHECK_LT(static_cast<size_t>(field_num), proc_stats.size());
+
+ size_t value;
+ return base::StringToSizeT(proc_stats[field_num], &value) ? value : 0;
}
// Convenience wrapper around GetProcStatsFieldAsInt(), ParseProcStats() and
@@ -130,6 +138,17 @@ int ReadProcStatsAndGetFieldAsInt(pid_t pid, ProcStatsFields field_num) {
return GetProcStatsFieldAsInt(proc_stats, field_num);
}
+// Same as ReadProcStatsAndGetFieldAsInt() but for size_t values.
+size_t ReadProcStatsAndGetFieldAsSizeT(pid_t pid, ProcStatsFields field_num) {
+ std::string stats_data;
+ if (!ReadProcStats(pid, &stats_data))
+ return 0;
+ std::vector<std::string> proc_stats;
+ if (!ParseProcStats(stats_data, &proc_stats))
+ return 0;
+ return GetProcStatsFieldAsSizeT(proc_stats, field_num);
+}
+
// Reads the |field_num|th field from |proc_stats|.
// Returns an empty string on failure.
// This version only handles VM_COMM and VM_STATE, which are the only fields
@@ -228,7 +247,7 @@ int GetProcessCPU(pid_t pid) {
// Read /proc/<pid>/status and returns the value for |field|, or 0 on failure.
// Only works for fields in the form of "Field: value kB".
-int ReadProcStatusAndGetFieldAsInt(pid_t pid, const std::string& field) {
+size_t ReadProcStatusAndGetFieldAsSizeT(pid_t pid, const std::string& field) {
FilePath stat_file = GetProcPidDir(pid).Append("status");
std::string status;
{
@@ -260,8 +279,8 @@ int ReadProcStatusAndGetFieldAsInt(pid_t pid, const std::string& field) {
NOTREACHED();
return 0;
}
- int value;
- if (!base::StringToInt(split_value_str[0], &value)) {
+ size_t value;
+ if (!base::StringToSizeT(split_value_str[0], &value)) {
NOTREACHED();
return 0;
}
@@ -392,22 +411,22 @@ ProcessMetrics* ProcessMetrics::CreateProcessMetrics(ProcessHandle process) {
// On linux, we return vsize.
size_t ProcessMetrics::GetPagefileUsage() const {
- return ReadProcStatsAndGetFieldAsInt(process_, VM_VSIZE);
+ return ReadProcStatsAndGetFieldAsSizeT(process_, VM_VSIZE);
}
// On linux, we return the high water mark of vsize.
size_t ProcessMetrics::GetPeakPagefileUsage() const {
- return ReadProcStatusAndGetFieldAsInt(process_, "VmPeak") * 1024;
+ return ReadProcStatusAndGetFieldAsSizeT(process_, "VmPeak") * 1024;
}
// On linux, we return RSS.
size_t ProcessMetrics::GetWorkingSetSize() const {
- return ReadProcStatsAndGetFieldAsInt(process_, VM_RSS) * getpagesize();
+ return ReadProcStatsAndGetFieldAsSizeT(process_, VM_RSS) * getpagesize();
}
// On linux, we return the high water mark of RSS.
size_t ProcessMetrics::GetPeakWorkingSetSize() const {
- return ReadProcStatusAndGetFieldAsInt(process_, "VmHWM") * 1024;
+ return ReadProcStatusAndGetFieldAsSizeT(process_, "VmHWM") * 1024;
}
bool ProcessMetrics::GetMemoryBytes(size_t* private_bytes,