Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(583)

Unified Diff: base/process/process_metrics_linux.cc

Issue 2859763002: Use another file and field for wakeups count (Closed)
Patch Set: Fix typo Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698