diff options
author | thomasvl@chromium.org <thomasvl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-17 18:23:25 +0000 |
---|---|---|
committer | thomasvl@chromium.org <thomasvl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-17 18:23:25 +0000 |
commit | 95c1aac9bbd395e30fb4003d947f3f61089d6312 (patch) | |
tree | c50c31f0e1f9dad1fc306efaf07db1112e4f854d /chrome/test/chrome_process_util_mac.cc | |
parent | a7281024bc3adc15e818ed641acca01507130342 (diff) | |
download | chromium_src-95c1aac9bbd395e30fb4003d947f3f61089d6312.zip chromium_src-95c1aac9bbd395e30fb4003d947f3f61089d6312.tar.gz chromium_src-95c1aac9bbd395e30fb4003d947f3f61089d6312.tar.bz2 |
Add a helper on mac for collecting memory size info from a list of processes.
Spawn PS to collect the data and parse the output.
Add ifdef checks in the page cyclers so on mac we can use the other helper since base methods can't ever be made to work.
BUG=none
TEST=memory info should now show in the waterfall and on the perf graphs for the page cycler tests.
Review URL: http://codereview.chromium.org/125254
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18635 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/chrome_process_util_mac.cc')
-rw-r--r-- | chrome/test/chrome_process_util_mac.cc | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/chrome/test/chrome_process_util_mac.cc b/chrome/test/chrome_process_util_mac.cc index fa587b9..9b12e9c 100644 --- a/chrome/test/chrome_process_util_mac.cc +++ b/chrome/test/chrome_process_util_mac.cc @@ -55,3 +55,48 @@ base::ProcessId ChromeBrowserProcessId(const FilePath& data_dir) { return -1; } + +MacChromeProcessInfoList GetRunningMacProcessInfo( + const ChromeProcessList &process_list) { + MacChromeProcessInfoList result; + + // Build up the ps command line + std::vector<std::string> cmdline; + cmdline.push_back("ps"); + cmdline.push_back("-o"); + cmdline.push_back("pid=,rsz=,vsz="); // fields we need, no headings + ChromeProcessList::const_iterator process_iter; + for (process_iter = process_list.begin(); + process_iter != process_list.end(); + ++process_iter) { + cmdline.push_back("-p"); + cmdline.push_back(StringPrintf("%d", *process_iter)); + } + + // Invoke it + std::string ps_output; + if (!base::GetAppOutput(CommandLine(cmdline), &ps_output)) + return result; // All the pids might have exited + + // Process the results + std::vector<std::string> ps_output_lines; + SplitString(ps_output, '\n', &ps_output_lines); + std::vector<std::string>::const_iterator line_iter; + for (line_iter = ps_output_lines.begin(); + line_iter != ps_output_lines.end(); + ++line_iter) { + std::string line(CollapseWhitespaceASCII(*line_iter, false)); + std::vector<std::string> values; + SplitString(line, ' ', &values); + if (values.size() == 3) { + MacChromeProcessInfo proc_info; + proc_info.pid = StringToInt(values[0]); + proc_info.rsz_in_kb = StringToInt(values[1]); + proc_info.vsz_in_kb = StringToInt(values[2]); + if (proc_info.pid && proc_info.rsz_in_kb && proc_info.vsz_in_kb) + result.push_back(proc_info); + } + } + + return result; +} |