| Index: base/process/process_metrics_linux.cc
|
| diff --git a/base/process/process_metrics_linux.cc b/base/process/process_metrics_linux.cc
|
| index 5ecbcb976e2b7f0e55cc871ef34e1b4690df6423..eb7caf75fd9752f198c35c9b3c2c7a128ac6e33b 100644
|
| --- a/base/process/process_metrics_linux.cc
|
| +++ b/base/process/process_metrics_linux.cc
|
| @@ -57,17 +57,17 @@ static uint64_t ReadFileToUint64(const FilePath file) {
|
| // Read /proc/<pid>/status and return the value for |field|, or 0 on failure.
|
| // Only works for fields in the form of "Field: value kB".
|
| size_t ReadProcStatusAndGetFieldAsSizeT(pid_t pid, const std::string& field) {
|
| - std::string status;
|
| + std::string status_data;
|
| {
|
| // Synchronously reading files in /proc does not hit the disk.
|
| ThreadRestrictions::ScopedAllowIO allow_io;
|
| - FilePath stat_file = internal::GetProcPidDir(pid).Append("status");
|
| - if (!ReadFileToString(stat_file, &status))
|
| + FilePath status_file = internal::GetProcPidDir(pid).Append("status");
|
| + if (!ReadFileToString(status_file, &status_data))
|
| return 0;
|
| }
|
|
|
| StringPairs pairs;
|
| - SplitStringIntoKeyValuePairs(status, ':', '\n', &pairs);
|
| + SplitStringIntoKeyValuePairs(status_data, ':', '\n', &pairs);
|
| TrimKeyValuePairs(&pairs);
|
| for (size_t i = 0; i < pairs.size(); ++i) {
|
| const std::string& key = pairs[i].first;
|
| @@ -93,23 +93,23 @@ size_t ReadProcStatusAndGetFieldAsSizeT(pid_t pid, const std::string& field) {
|
| }
|
|
|
| #if defined(OS_LINUX) || defined(OS_AIX)
|
| -// Read /proc/<pid>/sched and look for |field|. On succes, return true and
|
| +// Read /proc/<pid>/status and look for |field|. On success, return true and
|
| // write the value for |field| into |result|.
|
| // Only works for fields in the form of "field : uint_value"
|
| -bool ReadProcSchedAndGetFieldAsUint64(pid_t pid,
|
| - const std::string& field,
|
| - uint64_t* result) {
|
| - std::string sched_data;
|
| +bool ReadProcStatusAndGetFieldAsUint64(pid_t pid,
|
| + const std::string& field,
|
| + uint64_t* result) {
|
| + std::string status_data;
|
| {
|
| // Synchronously reading files in /proc does not hit the disk.
|
| ThreadRestrictions::ScopedAllowIO allow_io;
|
| - FilePath sched_file = internal::GetProcPidDir(pid).Append("sched");
|
| - if (!ReadFileToString(sched_file, &sched_data))
|
| + FilePath status_file = internal::GetProcPidDir(pid).Append("status");
|
| + if (!ReadFileToString(status_file, &status_data))
|
| return false;
|
| }
|
|
|
| StringPairs pairs;
|
| - SplitStringIntoKeyValuePairs(sched_data, ':', '\n', &pairs);
|
| + SplitStringIntoKeyValuePairs(status_data, ':', '\n', &pairs);
|
| TrimKeyValuePairs(&pairs);
|
| for (size_t i = 0; i < pairs.size(); ++i) {
|
| const std::string& key = pairs[i].first;
|
| @@ -959,10 +959,11 @@ void GetSwapInfo(SwapInfo* swap_info) {
|
|
|
| #if defined(OS_LINUX) || defined(OS_AIX)
|
| int ProcessMetrics::GetIdleWakeupsPerSecond() {
|
| - uint64_t wake_ups;
|
| - const char kWakeupStat[] = "se.statistics.nr_wakeups";
|
| - return ReadProcSchedAndGetFieldAsUint64(process_, kWakeupStat, &wake_ups) ?
|
| - CalculateIdleWakeupsPerSecond(wake_ups) : 0;
|
| + uint64_t num_switches;
|
| + static const char kSwitchStat[] = "voluntary_ctxt_switches";
|
| + return ReadProcStatusAndGetFieldAsUint64(process_, kSwitchStat, &num_switches)
|
| + ? CalculateIdleWakeupsPerSecond(num_switches)
|
| + : 0;
|
| }
|
| #endif // defined(OS_LINUX) || defined(OS_AIX)
|
|
|
|
|