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/internal/platform/power_monitor/android_ds2784_power_monitor.py

Issue 1243233002: [Android][Telemetry] Remove android_ds2784 power monitor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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/internal/platform/power_monitor/android_ds2784_power_monitor.py
diff --git a/tools/telemetry/telemetry/internal/platform/power_monitor/android_ds2784_power_monitor.py b/tools/telemetry/telemetry/internal/platform/power_monitor/android_ds2784_power_monitor.py
deleted file mode 100644
index 9b4d73e519ad3dfff7aa9e0ab8c5ebc2f7ff3cb5..0000000000000000000000000000000000000000
--- a/tools/telemetry/telemetry/internal/platform/power_monitor/android_ds2784_power_monitor.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# 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.
-
-import logging
-import os
-
-# pylint: disable=C0301
-from telemetry.core import util
-from telemetry import decorators
-from telemetry.internal.platform.power_monitor import sysfs_power_monitor
-from telemetry.internal.platform.profiler import android_prebuilt_profiler_helper
-# pylint: enable=C0301
-
-util.AddDirToPythonPath(util.GetChromiumSrcDir(), 'build', 'android')
-from pylib.device import battery_utils # pylint: disable=F0401
-
-
-SAMPLE_RATE_HZ = 2 # The data is collected from the ds2784 fuel gauge chip
- # that only updates its data every 3.5s.
-FUEL_GAUGE_PATH = '/sys/class/power_supply/ds2784-fuelgauge'
-CHARGE_COUNTER = os.path.join(FUEL_GAUGE_PATH, 'charge_counter_ext')
-CURRENT = os.path.join(FUEL_GAUGE_PATH, 'current_now')
-VOLTAGE = os.path.join(FUEL_GAUGE_PATH, 'voltage_now')
-
-
-class DS2784PowerMonitor(sysfs_power_monitor.SysfsPowerMonitor):
- """PowerMonitor that relies on the ds2784 fuel gauge chip.
-
- The ds2784 chip is in some Android devices, for example the nexus 10.
- This gives reliable energy numbers on Android L and higher releases.
- """
- def __init__(self, device, platform_backend):
- super(DS2784PowerMonitor, self).__init__(platform_backend)
- self._device = device
- self._device_battery = battery_utils.BatteryUtils(self._device)
- self._powermonitor_process_port = None
- self._file_poller_binary = android_prebuilt_profiler_helper.GetDevicePath(
- 'file_poller')
-
- @decorators.Cache
- def _HasFuelGauge(self):
- return self._device.FileExists(CHARGE_COUNTER)
-
- def CanMonitorPower(self):
- if not self._HasFuelGauge():
- return False
- try:
- if self._device_battery.GetCharging():
- logging.warning("Can't monitor power usage since device is charging.")
- return False
- except:
- logging.exception('New exception caused by DeviceUtils conversion')
- raise
- return True
-
- def StartMonitoringPower(self, browser):
- assert not self._powermonitor_process_port, (
- 'Must call StopMonitoringPower().')
- super(DS2784PowerMonitor, self).StartMonitoringPower(browser)
- android_prebuilt_profiler_helper.InstallOnDevice(
- self._device, 'file_poller')
- self._powermonitor_process_port = int(
- self._device.RunShellCommand(
- '%s %d %s %s %s' % (self._file_poller_binary, SAMPLE_RATE_HZ,
- CHARGE_COUNTER, CURRENT, VOLTAGE))[0])
-
- def StopMonitoringPower(self):
- assert self._powermonitor_process_port, (
- 'StartMonitoringPower() not called.')
- try:
- cpu_stats = super(DS2784PowerMonitor, self).StopMonitoringPower()
- result = '\n'.join(self._device.RunShellCommand(
- '%s %d' % (self._file_poller_binary,
- self._powermonitor_process_port)))
- assert result, 'PowerMonitor produced no output'
- return super(DS2784PowerMonitor, self).CombineResults(
- cpu_stats, DS2784PowerMonitor.ParseSamplingOutput(result))
- finally:
- self._powermonitor_process_port = None
-
- @staticmethod
- def ParseSamplingOutput(powermonitor_output):
- """Parse output of powermonitor command line utility.
-
- Returns:
- Dictionary in the format returned by StopMonitoringPower().
- """
- power_samples = []
- total_energy_consumption_mwh = 0
- def ParseSample(sample):
- values = [float(x) for x in sample.split(' ')]
- res = {}
- (res['timestamp_s'],
- res['charge_nah'],
- res['current_ua'],
- res['voltage_uv']) = values
- return res
- # The output contains a sample per line.
- samples = map(ParseSample, powermonitor_output.split('\n')[:-1])
- # Keep track of the last sample that found an updated reading.
- last_updated_sample = samples[0]
- # Compute average voltage.
- voltage_sum_uv = 0
- voltage_count = 0
- for sample in samples:
- if sample['charge_nah'] != last_updated_sample['charge_nah']:
- charge_difference_nah = (sample['charge_nah'] -
- last_updated_sample['charge_nah'])
- # Use average voltage for the energy consumption.
- voltage_sum_uv += sample['voltage_uv']
- voltage_count += 1
- average_voltage_uv = voltage_sum_uv / voltage_count
- total_energy_consumption_mwh += (-charge_difference_nah *
- average_voltage_uv / 10 ** 12)
- last_updated_sample = sample
- voltage_sum_uv = 0
- voltage_count = 0
- # Update average voltage.
- voltage_sum_uv += sample['voltage_uv']
- voltage_count += 1
- # Compute energy of the sample.
- energy_consumption_mw = (-sample['current_ua'] * sample['voltage_uv'] /
- 10 ** 9)
-
- power_samples.append(energy_consumption_mw)
- # Because the data is stalled for a few seconds, compute the remaining
- # energy consumption using the last available current reading.
- last_sample = samples[-1]
- remaining_time_h = (
- last_sample['timestamp_s'] - last_updated_sample['timestamp_s']) / 3600
- average_voltage_uv = voltage_sum_uv / voltage_count
-
- remaining_energy_consumption_mwh = (-last_updated_sample['current_ua'] *
- average_voltage_uv *
- remaining_time_h / 10 ** 9)
- total_energy_consumption_mwh += remaining_energy_consumption_mwh
-
- # -------- Collect and Process Data -------------
- out_dict = {}
- # Raw power usage samples.
- out_dict['identifier'] = 'ds2784'
- out_dict['power_samples_mw'] = power_samples
- out_dict['energy_consumption_mwh'] = total_energy_consumption_mwh
-
- return out_dict

Powered by Google App Engine
This is Rietveld 408576698