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

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

Issue 402153002: Update parsing of dumpsys batterystats (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Follow review 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
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/platform/power_monitor/android_dumpsys_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/android_dumpsys_power_monitor.py
diff --git a/tools/telemetry/telemetry/core/platform/power_monitor/android_dumpsys_power_monitor.py b/tools/telemetry/telemetry/core/platform/power_monitor/android_dumpsys_power_monitor.py
index 9432d7079a9e96acfe9b4b0ed88084df2b2e4fa8..e1e58198e26d860d452dfe5d3de3ccef4bcb29ce 100644
--- a/tools/telemetry/telemetry/core/platform/power_monitor/android_dumpsys_power_monitor.py
+++ b/tools/telemetry/telemetry/core/platform/power_monitor/android_dumpsys_power_monitor.py
@@ -57,6 +57,9 @@ class DumpsysPowerMonitor(power_monitor.PowerMonitor):
def ParseSamplingOutput(package, dumpsys_output):
"""Parse output of 'dumpsys batterystats -c'
+ See:
+ https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/BatteryStats.java
+
Returns:
Dictionary in the format returned by StopMonitoringPower().
"""
@@ -65,32 +68,53 @@ class DumpsysPowerMonitor(power_monitor.PowerMonitor):
out_dict['identifier'] = 'dumpsys'
out_dict['power_samples_mw'] = []
- # csv columns
+ # The list of useful CSV columns.
+ # Index of the column containing the format version.
DUMP_VERSION_INDEX = 0
- COLUMN_TYPE_INDEX = 3
+ # Index of the column containing the type of the row.
+ ROW_TYPE_INDEX = 3
+
+ # Index for columns of type unique identifier ('uid')
+ # Index of the column containing the uid.
PACKAGE_UID_INDEX = 4
- PWI_POWER_COMSUMPTION_INDEX = 5
+ # Index of the column containing the application package.
+ PACKAGE_NAME_INDEX = 5
+
+ # Index for columns of type power use ('pwi')
+ # The column containing the uid of the item.
PWI_UID_INDEX = 1
+ # The column containing the type of consumption. Only consumtion since last
+ # charge are of interest here.
PWI_AGGREGATION_INDEX = 2
- PWI_SUBTYPE_INDEX = 4
+ # The column containing the amount of power used, in mah.
+ PWI_POWER_COMSUMPTION_INDEX = 5
csvreader = csv.reader(dumpsys_output)
- entries_by_type = defaultdict(list)
+ uid_entries = {}
+ pwi_entries = defaultdict(list)
for entry in csvreader:
- if len(entry) < 4 or entry[DUMP_VERSION_INDEX] != '7':
+ if entry[DUMP_VERSION_INDEX] != '8':
+ # Wrong file version.
+ break
tonyg 2014/07/22 03:12:50 Should we logging.warn here?
qsr 2014/07/22 07:51:23 We will warn line 112 if we reach this.
+ if ROW_TYPE_INDEX >= len(entry):
continue
- entries_by_type[entry[COLUMN_TYPE_INDEX]].append(entry)
+ if entry[ROW_TYPE_INDEX] == 'uid':
+ current_package = entry[PACKAGE_NAME_INDEX]
+ assert current_package not in uid_entries
+ uid_entries[current_package] = entry[PACKAGE_UID_INDEX]
+ elif (PWI_POWER_COMSUMPTION_INDEX < len(entry) and
+ entry[ROW_TYPE_INDEX] == 'pwi' and
+ entry[PWI_AGGREGATION_INDEX] == 'l'):
+ pwi_entries[entry[PWI_UID_INDEX]].append(
+ float(entry[PWI_POWER_COMSUMPTION_INDEX]))
+
# Find the uid of for the given package.
- if not package in entries_by_type:
- logging.warning('Unable to parse dumpsys output. Please upgrade the OS.')
+ if not package in uid_entries:
+ logging.warning('Unable to parse dumpsys output. ' +
+ 'Please upgrade the OS version of the device.')
out_dict['energy_consumption_mwh'] = 0
return out_dict
- assert len(entries_by_type[package]) == 1, 'Multiple entries for package.'
- uid = entries_by_type[package][0][PACKAGE_UID_INDEX]
- consumptions_mah = [float(entry[PWI_POWER_COMSUMPTION_INDEX])
- for entry in entries_by_type['pwi']
- if entry[PWI_UID_INDEX] == uid and
- entry[PWI_AGGREGATION_INDEX] == 't' and
- entry[PWI_SUBTYPE_INDEX] == 'uid']
+ uid = uid_entries[package]
+ consumptions_mah = pwi_entries[uid]
consumption_mah = sum(consumptions_mah)
# 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.
« no previous file with comments | « no previous file | tools/telemetry/telemetry/core/platform/power_monitor/android_dumpsys_power_monitor_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698