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

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

Issue 887613002: Let cros_power_monitor use dump_power_status (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use split() Created 5 years, 11 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 | tools/telemetry/telemetry/core/platform/power_monitor/cros_power_monitor_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/platform/power_monitor/cros_power_monitor.py
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/cros_power_monitor.py b/tools/telemetry/telemetry/core/platform/power_monitor/cros_power_monitor.py
index 0c8168c51bf3599ec3e0eee5891ef3678f0ab876..7eba558e616590c4f3c777ef2c46211ddf9afd8e 100644
--- a/tools/telemetry/telemetry/core/platform/power_monitor/cros_power_monitor.py
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/cros_power_monitor.py
@@ -10,7 +10,7 @@ from telemetry.core.platform.power_monitor import sysfs_power_monitor
class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
- """PowerMonitor that relies on 'power_supply_info' to monitor power
+ """PowerMonitor that relies on 'dump_power_status' to monitor power
consumption of a single ChromeOS application.
"""
def __init__(self, platform_backend):
@@ -20,7 +20,7 @@ class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
platform_backend: A LinuxBasedPlatformBackend object.
Attributes:
- _initial_power: The result of 'power_supply_info' before the test.
+ _initial_power: The result of 'dump_power_status' before the test.
_start_time: The epoch time at which the test starts executing.
"""
super(CrosPowerMonitor, self).__init__(platform_backend)
@@ -34,7 +34,7 @@ class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
def StartMonitoringPower(self, browser):
super(CrosPowerMonitor, self).StartMonitoringPower(browser)
if self._IsOnBatteryPower():
- sample = self._platform.RunCommand(['power_supply_info;', 'date', '+%s'])
+ sample = self._platform.RunCommand(['dump_power_status;', 'date', '+%s'])
self._initial_power, self._start_time = CrosPowerMonitor.SplitSample(
sample)
@@ -42,7 +42,7 @@ class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
cpu_stats = super(CrosPowerMonitor, self).StopMonitoringPower()
power_stats = {}
if self._IsOnBatteryPower():
- sample = self._platform.RunCommand(['power_supply_info;', 'date', '+%s'])
+ sample = self._platform.RunCommand(['dump_power_status;', 'date', '+%s'])
final_power, end_time = CrosPowerMonitor.SplitSample(sample)
# The length of the test is used to measure energy consumption.
length_h = (end_time - self._start_time) / 3600.0
@@ -55,7 +55,7 @@ class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
"""Splits a power and time sample into the two separate values.
Args:
- sample: The result of calling 'power_supply_info; date +%s' on the
+ sample: The result of calling 'dump_power_status; date +%s' on the
device.
Returns:
@@ -72,17 +72,17 @@ class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
"""Determines if the devices is being charged.
Args:
- status: The parsed result of 'power_supply_info'
+ status: The parsed result of 'dump_power_status'
board: The name of the board running the test.
Returns:
True if the device is on battery power; False otherwise.
"""
- on_battery = status['Line Power']['online'] == 'no'
+ on_battery = status['line_power_connected'] == '0'
# Butterfly can incorrectly report AC online for some time after unplug.
# Check battery discharge state to confirm.
if board == 'butterfly':
- on_battery |= status['Battery']['state'] == 'Discharging'
+ on_battery |= status['battery_discharging'] == '1'
return on_battery
def _IsOnBatteryPower(self):
@@ -91,72 +91,63 @@ class CrosPowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
Returns:
True if the device is on battery power; False otherwise.
"""
- status = CrosPowerMonitor.ParsePowerSupplyInfo(
- self._platform.RunCommand(['power_supply_info']))
+ status = CrosPowerMonitor.ParsePowerStatus(
+ self._platform.RunCommand(['dump_power_status']))
board_data = self._platform.RunCommand(['cat', '/etc/lsb-release'])
board = re.search('BOARD=(.*)', board_data).group(1)
return CrosPowerMonitor.IsOnBatteryPower(status, board)
@staticmethod
- def ParsePowerSupplyInfo(sample):
- """Parses 'power_supply_info' command output.
+ def ParsePowerStatus(sample):
+ """Parses 'dump_power_status' command output.
Args:
- sample: The output of 'power_supply_info'
+ sample: The output of 'dump_power_status'
Returns:
- Dictionary containing all fields from 'power_supply_info'
+ Dictionary containing all fields from 'dump_power_status'
"""
rv = collections.defaultdict(dict)
- dev = None
for ln in sample.splitlines():
- result = re.findall(r'^Device:\s+(.*)', ln)
- if result:
- dev = result[0]
- continue
- result = re.findall(r'\s+(.+):\s+(.+)', ln)
- if result and dev:
- kname = re.findall(r'(.*)\s+\(\w+\)', result[0][0])
- if kname:
- rv[dev][kname[0]] = result[0][1]
- else:
- rv[dev][result[0][0]] = result[0][1]
+ words = ln.split()
+ assert len(words) == 2
+ rv[words[0]] = words[1]
return dict(rv)
@staticmethod
def ParsePower(initial_stats, final_stats, length_h):
- """Parse output of 'power_supply_info'
+ """Parse output of 'dump_power_status'
Args:
- initial_stats: The output of 'power_supply_info' before the test.
- final_stats: The output of 'power_supply_info' after the test.
+ initial_stats: The output of 'dump_power_status' before the test.
+ final_stats: The output of 'dump_power_status' after the test.
length_h: The length of the test in hours.
Returns:
Dictionary in the format returned by StopMonitoringPower().
"""
- out_dict = {'identifier': 'power_supply_info'}
+ out_dict = {'identifier': 'dump_power_status'}
component_utilization = {}
- initial = CrosPowerMonitor.ParsePowerSupplyInfo(initial_stats)
- final = CrosPowerMonitor.ParsePowerSupplyInfo(final_stats)
- # The charge value reported by 'power_supply_info' is not precise enough to
+ initial = CrosPowerMonitor.ParsePowerStatus(initial_stats)
+ final = CrosPowerMonitor.ParsePowerStatus(final_stats)
+ # The charge value reported by 'dump_power_status' is not precise enough to
# give meaningful results across shorter tests, so average energy rate and
# the length of the test are used.
- initial_power_mw = float(initial['Battery']['energy rate']) * 10 ** 3
- final_power_mw = float(final['Battery']['energy rate']) * 10 ** 3
+ initial_power_mw = float(initial['battery_energy_rate']) * 10 ** 3
+ final_power_mw = float(final['battery_energy_rate']) * 10 ** 3
average_power_mw = (initial_power_mw + final_power_mw) / 2.0
out_dict['power_samples_mw'] = [initial_power_mw, final_power_mw]
out_dict['energy_consumption_mwh'] = average_power_mw * length_h
# Duplicating CrOS battery fields where applicable.
battery = {}
- battery['charge_full'] = float(final['Battery']['full charge'])
+ battery['charge_full'] = float(final['battery_charge_full'])
battery['charge_full_design'] = (
- float(final['Battery']['full charge design']))
- battery['charge_now'] = float(final['Battery']['charge'])
- battery['current_now'] = float(final['Battery']['current'])
- battery['energy'] = float(final['Battery']['energy'])
- battery['energy_rate'] = float(final['Battery']['energy rate'])
- battery['voltage_now'] = float(final['Battery']['voltage'])
+ float(final['battery_charge_full_design']))
+ battery['charge_now'] = float(final['battery_charge'])
+ battery['current_now'] = float(final['battery_current'])
+ battery['energy'] = float(final['battery_energy'])
+ battery['energy_rate'] = float(final['battery_energy_rate'])
+ battery['voltage_now'] = float(final['battery_voltage'])
component_utilization['battery'] = battery
out_dict['component_utilization'] = component_utilization
return out_dict
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/platform/power_monitor/cros_power_monitor_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698