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 |