| Index: devil/devil/android/battery_utils.py
|
| diff --git a/devil/devil/android/battery_utils.py b/devil/devil/android/battery_utils.py
|
| index ff0bd708ab1a32ad93b42ad06b195052d7b1c523..4c8f54311c44c4f298879e7e76e3e0922baaac38 100644
|
| --- a/devil/devil/android/battery_utils.py
|
| +++ b/devil/devil/android/battery_utils.py
|
| @@ -116,6 +116,8 @@ _PWS_AGGREGATION_INDEX = _PWI_AGGREGATION_INDEX
|
| _PWI_POWER_CONSUMPTION_INDEX = 5
|
| _PWS_POWER_CONSUMPTION_INDEX = _PWI_POWER_CONSUMPTION_INDEX
|
|
|
| +_MAX_CHARGE_ERROR = 20
|
| +
|
|
|
| class BatteryUtils(object):
|
|
|
| @@ -131,7 +133,6 @@ class BatteryUtils(object):
|
| default_retries: An integer containing the default number or times an
|
| operation should be retried on failure if no explicit
|
| value is provided.
|
| -
|
| Raises:
|
| TypeError: If it is not passed a DeviceUtils instance.
|
| """
|
| @@ -441,9 +442,14 @@ class BatteryUtils(object):
|
| Args:
|
| level: level of charge to wait for.
|
| wait_period: time in seconds to wait between checking.
|
| + Raises:
|
| + device_errors.DeviceChargingError: If error while charging is detected.
|
| """
|
| self.SetCharging(True)
|
| -
|
| + charge_status = {
|
| + 'charge_failure_count': 0,
|
| + 'last_charge_value': 0
|
| + }
|
| def device_charged():
|
| battery_level = self.GetBatteryInfo().get('level')
|
| if battery_level is None:
|
| @@ -452,6 +458,19 @@ class BatteryUtils(object):
|
| else:
|
| logging.info('current battery level: %s', battery_level)
|
| battery_level = int(battery_level)
|
| +
|
| + # Use > so that it will not reset if charge is going down.
|
| + if battery_level > charge_status['last_charge_value']:
|
| + charge_status['last_charge_value'] = battery_level
|
| + charge_status['charge_failure_count'] = 0
|
| + else:
|
| + charge_status['charge_failure_count'] += 1
|
| +
|
| + if (not battery_level >= level
|
| + and charge_status['charge_failure_count'] >= _MAX_CHARGE_ERROR):
|
| + raise device_errors.DeviceChargingError(
|
| + 'Device not charging properly. Current level:%s Previous level:%s'
|
| + % (battery_level, charge_status['last_charge_value']))
|
| return battery_level >= level
|
|
|
| timeout_retry.WaitFor(device_charged, wait_period=wait_period)
|
|
|