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

Unified Diff: tools/telemetry/telemetry/core/platform/linux_based_platform_backend.py

Issue 675843004: Telemetry: Implement idle wakeups counting on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address nit Created 6 years, 1 month 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
Index: tools/telemetry/telemetry/core/platform/linux_based_platform_backend.py
diff --git a/tools/telemetry/telemetry/core/platform/linux_based_platform_backend.py b/tools/telemetry/telemetry/core/platform/linux_based_platform_backend.py
index 9255303fc027f09f22b0b5ab57a2d260e5129150..d595f7ab20aebcef0d636d503f9cf6cd70f30fb4 100644
--- a/tools/telemetry/telemetry/core/platform/linux_based_platform_backend.py
+++ b/tools/telemetry/telemetry/core/platform/linux_based_platform_backend.py
@@ -10,6 +10,7 @@ except ImportError:
from telemetry import decorators
from telemetry.core import exceptions
from telemetry.core.platform import platform_backend
+from telemetry.core.platform import process_statistic_timeline_data
class LinuxBasedPlatformBackend(platform_backend.PlatformBackend):
@@ -50,6 +51,8 @@ class LinuxBasedPlatformBackend(platform_backend.PlatformBackend):
cpu_process_jiffies = utime + stime
clock_ticks = self.GetClockTicks()
results.update({'CpuProcessTime': cpu_process_jiffies / clock_ticks})
+ if self.CanMeasureIdleWakeUps():
+ results.update({'IdleWakeupCount': self._GetIdleWakeupCount(pid)})
return results
def GetCpuTimestamp(self):
@@ -109,6 +112,12 @@ class LinuxBasedPlatformBackend(platform_backend.PlatformBackend):
def RunCommand(self, cmd):
raise NotImplementedError()
+ def StartMeasuringIdleWakeUps(self):
+ self._EnableTimerStatsCollection(True)
+
+ def StopMeasuringIdleWakeUps(self):
+ self._EnableTimerStatsCollection(False)
+
@staticmethod
def ParseCStateSample(sample):
"""Parse a single c-state residency sample.
@@ -129,6 +138,30 @@ class LinuxBasedPlatformBackend(platform_backend.PlatformBackend):
assert pid, 'pid is required'
return bool(self.GetPsOutput(['pid'], pid) == str(pid))
+ def _GetIdleWakeupCount(self, pid):
+ """Find the given pid in the timer_stats and sum up the wake-up count.
+
+ Each row is in the form of: wake_up_count, pid process_name reason
+ Due to possibly multiple reasons, a given pid can appear in multiple rows.
+ """
+ contents = self.GetFileContents('/proc/timer_stats')
+ count = 0
+ split_lines = contents.splitlines()
+ for line in split_lines[:-1]:
+ line_split = line.split(',', 1)
+ if len(line_split) < 2:
+ continue
+ count_str, rest_str = line_split
+ current_pid = int(rest_str.strip().split(' ')[0])
+ if current_pid == pid:
+ count += int(count_str.strip())
+ return process_statistic_timeline_data.IdleWakeupTimelineData(pid, count)
+
+ def _EnableTimerStatsCollection(self, enable):
+ """Writes to /proc/timer_stats to start/stop measuring process wakeups."""
+ # TODO(thestig) Implement on Linux and CrOS.
+ raise NotImplementedError()
+
def _GetProcFileForPid(self, pid, filename):
try:
return self.GetFileContents('/proc/%s/%s' % (pid, filename))

Powered by Google App Engine
This is Rietveld 408576698