| Index: tools/telemetry/telemetry/internal/platform/power_monitor/android_fuelgauge_power_monitor.py
|
| diff --git a/tools/telemetry/telemetry/internal/platform/power_monitor/android_fuelgauge_power_monitor.py b/tools/telemetry/telemetry/internal/platform/power_monitor/android_fuelgauge_power_monitor.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..653bcf383c8c6e074795125c652ed3ba54d791fc
|
| --- /dev/null
|
| +++ b/tools/telemetry/telemetry/internal/platform/power_monitor/android_fuelgauge_power_monitor.py
|
| @@ -0,0 +1,55 @@
|
| +# 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
|
| +
|
| +from telemetry.internal.platform import power_monitor
|
| +
|
| +
|
| +class FuelGaugePowerMonitor(power_monitor.PowerMonitor):
|
| + """PowerMonitor that relies on the fuel gauge chips to monitor the power
|
| + consumption of a android device.
|
| + """
|
| + def __init__(self, battery, platform_backend):
|
| + """Constructor.
|
| +
|
| + Args:
|
| + battery: A BatteryUtil instance.
|
| + platform_backend: A LinuxBasedPlatformBackend instance.
|
| + """
|
| + super(FuelGaugePowerMonitor, self).__init__()
|
| + self._battery = battery
|
| + self._starting_fuel_gauge = None
|
| +
|
| + def CanMonitorPower(self):
|
| + return self._battery.SupportsFuelGauge()
|
| +
|
| + def StartMonitoringPower(self, browser):
|
| + self._battery.TieredSetCharging(False)
|
| + self._starting_fuel_gauge = self._battery.GetFuelGaugeChargeCounter()
|
| +
|
| + def StopMonitoringPower(self):
|
| + # Convert from nAh to mAh.
|
| + fuel_gauge_delta = (
|
| + float((self._starting_fuel_gauge) -
|
| + self._battery.GetFuelGaugeChargeCounter()) / 1000000)
|
| + self._battery.TieredSetCharging(True)
|
| +
|
| + voltage = self._battery.GetBatteryInfo().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
|
| +
|
| + return self.ProcessPowerData(voltage, fuel_gauge_delta)
|
| +
|
| + @staticmethod
|
| + def ProcessPowerData(voltage, fuel_gauge_delta):
|
| + power_results = {'identifier': 'fuel_gauge'}
|
| + power_results['fuel_gauge_energy_consumption_mwh'] = (
|
| + fuel_gauge_delta * voltage)
|
| + return power_results
|
|
|