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

Unified Diff: tools/telemetry/telemetry/core/platform/power_monitor/cros_sysfs_platform.py

Issue 352583007: Added frequency stats and c-state residency to CrOS power monitor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved the unittests to be with CrosSysfsPlatform after moving files. Created 6 years, 5 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
Index: tools/telemetry/telemetry/core/platform/power_monitor/cros_sysfs_platform.py
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/cros_sysfs_platform.py b/tools/telemetry/telemetry/core/platform/power_monitor/cros_sysfs_platform.py
new file mode 100644
index 0000000000000000000000000000000000000000..52573447be84a47cd2241c99696caa3fc059d99e
--- /dev/null
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/cros_sysfs_platform.py
@@ -0,0 +1,47 @@
+# Copyright 2014 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.
+
+from telemetry.core.platform.power_monitor import sysfs_platform
+
+
+class CrosSysfsPlatform(sysfs_platform.SysfsPlatform):
+ """A SysfsPlatform implementation to be used for ChromeOS devices."""
+ def __init__(self, cri):
+ """Constructor.
+
+ Args:
+ cri: Chrome interface.
+ """
+ super(CrosSysfsPlatform, self).__init__()
+ self._cri = cri
+
+ def RunShellCommand(self, command):
+ return self._cri.RunCmdOnDevice(command.split())[0]
+
+ @staticmethod
+ def ParseStateSample(sample, time):
+ sample_stats = {}
+ for cpu in sample:
+ cstates = {'C0': time * 10 ** 6}
+ values = sample[cpu].splitlines()
+ num_states = len(values) / 3
+ names = values[:num_states]
+ times = values[num_states:2 * num_states]
+ latencies = values[2 * num_states:]
+ for i, state in enumerate(names):
+ if names[i] == 'POLL' and not int(latencies[i]):
+ # C0 state. Kernel stats aren't right, so calculate by
+ # subtracting all other states from total time (using epoch
+ # timer since we calculate differences in the end anyway).
+ # NOTE: Only x86 lists C0 under cpuidle, ARM does not.
+ continue
+ cstates['C0'] -= int(times[i])
+ if names[i] == '<null>':
+ # Kernel race condition that can happen while a new C-state gets
+ # added (e.g. AC->battery). Don't know the 'name' of the state
+ # yet, but its 'time' would be 0 anyway.
+ continue
+ cstates[state] = int(times[i])
+ sample_stats[cpu] = cstates
+ return sample_stats

Powered by Google App Engine
This is Rietveld 408576698