Chromium Code Reviews| Index: base/process_util_linux.cc | 
| =================================================================== | 
| --- base/process_util_linux.cc (revision 31329) | 
| +++ base/process_util_linux.cc (working copy) | 
| @@ -450,4 +450,50 @@ | 
| return percentage; | 
| } | 
| +namespace { | 
| + | 
| +// The format of /proc/meminfo is: | 
| +// | 
| +// MemTotal: 8235324 kB | 
| +// MemFree: 1628304 kB | 
| +// Buffers: 429596 kB | 
| +// Cached: 4728232 kB | 
| +// ... | 
| +const size_t kMemTotalIndex = 1; | 
| +const size_t kMemFreeIndex = 4; | 
| +const size_t kMemBuffersIndex = 7; | 
| +const size_t kMemCacheIndex = 10; | 
| + | 
| +} // namespace | 
| + | 
| +size_t GetSystemCommitCharge() { | 
| + // Used memory is: total - free - buffers - caches | 
| + FilePath meminfo_file("/proc/meminfo"); | 
| + std::string meminfo_data; | 
| + if (!file_util::ReadFileToString(meminfo_file, &meminfo_data)) | 
| + LOG(ERROR) << "Failed to open /proc/meminfo."; | 
| 
 
vandebo (ex-Chrome)
2009/11/09 19:10:29
Should this be ERROR, or just WARNING?  It doesn't
 
 | 
| + return 0; | 
| + std::vector<std::string> meminfo_fields; | 
| + SplitStringAlongWhitespace(meminfo_data, &meminfo_fields); | 
| + | 
| + if (meminfo_fields.size() < kMemCacheIndex) { | 
| + LOG(ERROR) << "Failed to parse /proc/meminfo. Only found " << | 
| + meminfo_fields.size() << " fields."; | 
| + return 0; | 
| + } | 
| + | 
| + DCHECK_EQ(meminfo_fields[kMemTotalIndex-1], "MemTotal:"); | 
| + DCHECK_EQ(meminfo_fields[kMemFreeIndex-1], "MemFree:"); | 
| + DCHECK_EQ(meminfo_fields[kMemBuffersIndex-1], "Buffers:"); | 
| + DCHECK_EQ(meminfo_fields[kMemCacheIndex-1], "Cached:"); | 
| + | 
| + size_t result_in_kb; | 
| + result_in_kb = StringToInt(meminfo_fields[kMemTotalIndex]); | 
| + result_in_kb -= StringToInt(meminfo_fields[kMemFreeIndex]); | 
| + result_in_kb -= StringToInt(meminfo_fields[kMemBuffersIndex]); | 
| + result_in_kb -= StringToInt(meminfo_fields[kMemCacheIndex]); | 
| + | 
| + return result_in_kb; | 
| +} | 
| + | 
| } // namespace base |