// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_TEST_BASE_CHROME_PROCESS_UTIL_H_ #define CHROME_TEST_BASE_CHROME_PROCESS_UTIL_H_ #include <vector> #include "base/memory/scoped_ptr.h" #include "base/process/process_handle.h" #include "base/process/process_metrics.h" typedef std::vector<base::ProcessId> ChromeProcessList; // Returns a vector of PIDs of all chrome processes (main and renderers etc) // based on |browser_pid|, the PID of the main browser process. ChromeProcessList GetRunningChromeProcesses(base::ProcessId browser_pid); // Attempts to terminate all chrome processes in |process_list|. void TerminateAllChromeProcesses(const ChromeProcessList& process_list); // A wrapper class for tests to use in fetching process metrics. // Delegates everything we need to base::ProcessMetrics, except // memory stats on Mac (which have to parse ps output due to privilege // restrictions, behavior we don't want in base). Long-term, if // the production base::ProcessMetrics gets updated to return // acceptable metrics on Mac, this class should disappear. class ChromeTestProcessMetrics { public: static ChromeTestProcessMetrics* CreateProcessMetrics( base::ProcessHandle process) { return new ChromeTestProcessMetrics(process); } size_t GetPagefileUsage(); size_t GetWorkingSetSize(); size_t GetPeakPagefileUsage() { return process_metrics_->GetPeakPagefileUsage(); } size_t GetPeakWorkingSetSize() { return process_metrics_->GetPeakWorkingSetSize(); } bool GetIOCounters(base::IoCounters* io_counters) { return process_metrics_->GetIOCounters(io_counters); } base::ProcessHandle process_handle_; ~ChromeTestProcessMetrics(); private: explicit ChromeTestProcessMetrics(base::ProcessHandle process); scoped_ptr<base::ProcessMetrics> process_metrics_; DISALLOW_COPY_AND_ASSIGN(ChromeTestProcessMetrics); }; #if defined(OS_MACOSX) // These types and API are here to fetch the information about a set of running // processes by ID on the Mac. There are also APIs in base, but fetching the // information for another process requires privileges that a normal executable // does not have. This API fetches the data by spawning ps (which is setuid so // it has the needed privileges) and processing its output. The API is provided // here because we don't want code spawning processes like this in base, where // someone writing cross platform code might use it without realizing that it's // a heavyweight call on the Mac. struct MacChromeProcessInfo { base::ProcessId pid; int rsz_in_kb; int vsz_in_kb; }; typedef std::vector<MacChromeProcessInfo> MacChromeProcessInfoList; // Any ProcessId that info can't be found for will be left out. MacChromeProcessInfoList GetRunningMacProcessInfo( const ChromeProcessList& process_list); #endif // defined(OS_MACOSX) #endif // CHROME_TEST_BASE_CHROME_PROCESS_UTIL_H_