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

Unified Diff: tools/telemetry/telemetry/internal/platform/power_monitor/android_dumpsys_power_monitor.py

Issue 1432093002: Improve readability of power monitoring code and add additional (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix issue 556653 Created 5 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/internal/platform/power_monitor/android_dumpsys_power_monitor.py
diff --git a/tools/telemetry/telemetry/internal/platform/power_monitor/android_dumpsys_power_monitor.py b/tools/telemetry/telemetry/internal/platform/power_monitor/android_dumpsys_power_monitor.py
index 6e363bb6f741f2b06276690a0da7680cd9da9584..eefdae885a607fb875a7c7865f031f597afe7588 100644
--- a/tools/telemetry/telemetry/internal/platform/power_monitor/android_dumpsys_power_monitor.py
+++ b/tools/telemetry/telemetry/internal/platform/power_monitor/android_dumpsys_power_monitor.py
@@ -5,10 +5,9 @@
import csv
import logging
-from telemetry.internal.platform import power_monitor
+from telemetry.internal.platform.power_monitor import android_power_monitor_base
-
-class DumpsysPowerMonitor(power_monitor.PowerMonitor):
+class DumpsysPowerMonitor(android_power_monitor_base.AndroidPowerMonitorBase):
"""PowerMonitor that relies on the dumpsys batterystats to monitor the power
consumption of a single android application. This measure uses a heuristic
and is the same information end-users see with the battery application.
@@ -29,57 +28,42 @@ class DumpsysPowerMonitor(power_monitor.PowerMonitor):
def CanMonitorPower(self):
result = self._platform.RunCommand('dumpsys batterystats -c')
DUMP_VERSION_INDEX = 0
- csvreader = csv.reader(result)
# Dumpsys power data is present in dumpsys versions 8 and 9
# which is found on L+ devices.
- if csvreader.next()[DUMP_VERSION_INDEX] in ['8', '9']:
- return True
- return False
+ return (csv.reader(result).next()[DUMP_VERSION_INDEX] in ['8', '9'])
def StartMonitoringPower(self, browser):
+ self._CheckStart()
+ assert browser
self._browser = browser
# Disable the charging of the device over USB. This is necessary because the
# device only collects information about power usage when the device is not
# charging.
- self._battery.SetCharging(False)
+ self._ChargingOff(self._battery)
def StopMonitoringPower(self):
- self._battery.SetCharging(True)
- if self._browser:
- package = self._browser._browser_backend.package
- self._browser = None
+ self._CheckStop()
+ assert self._browser
+ self._ChargingOn(self._battery)
+ package = self._browser._browser_backend.package
+ self._browser = None
+ voltage = self._ParseVoltage(self._battery.GetBatteryInfo().get('voltage'))
power_data = self._battery.GetPowerData()
- battery_info = self._battery.GetBatteryInfo()
- voltage = battery_info.get('voltage')
- if voltage is None:
- # Converting at a nominal voltage of 4.0V, as those values are obtained by
- # a heuristic, and 4.0V is the voltage we set when using a monsoon device.
- voltage = 4.0
- logging.warning('Unable to get device voltage. Using %s.', voltage)
- else:
- voltage = float(voltage) / 1000
- logging.info('Device voltage at %s', voltage)
power_results = self.ProcessPowerData(power_data, voltage, package)
- if power_results['energy_consumption_mwh'] == 0:
- logging.warning('Power data is returning 0 for system total usage. %s'
- % (power_data))
- if power_results['application_energy_consumption_mwh'] == 0:
- logging.warning('Power data is returning 0 usage for %s. %s'
- % (package, power_data))
+ self._LogPowerAnomalies(power_results, package)
return power_results
@staticmethod
def ProcessPowerData(power_data, voltage, package):
- power_results = {'identifier': 'dumpsys', 'power_samples_mw': []}
- system_power = power_data['system_total']
- package_power = power_data['per_package'].get(package)
- if not package_power:
+ package_power_data = power_data['per_package'].get(package)
+ if not package_power_data:
logging.warning('No power data for %s in dumpsys output.' % package)
- package_consumption_mwh = 0
+ package_power = 0
else:
- package_consumption_mwh = sum(package_power['data']) * voltage
- power_results['application_energy_consumption_mwh'] = \
- package_consumption_mwh
- power_results['energy_consumption_mwh'] = system_power * voltage
- return power_results
+ package_power = sum(package_power_data['data'])
+
+ return {'identifier': 'dumpsys',
+ 'power_samples_mw': [],
+ 'energy_consumption_mwh': power_data['system_total'] * voltage,
+ 'application_energy_consumption_mwh': package_power * voltage}

Powered by Google App Engine
This is Rietveld 408576698