blob: e38ebc5b88bfc941fb0bd206735b7591fd993368 [file] [log] [blame]
# 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 unittest
from telemetry.internal.platform.power_monitor import android_dumpsys_power_monitor
from telemetry.internal.platform.power_monitor import pm_mock
_PACKAGE = 'com.google.android.apps.chrome'
_TYPICAL_POWER_DATA = {
'system_total': 2000.0,
'per_package': {
_PACKAGE: {'data': [23.9], 'uid': '12345'}
}
}
_TYPICAL_POWER_DATA_MULTISAMPLE = {
'system_total': 2000.0,
'per_package': {
_PACKAGE: {'data': [23.9, 26.1], 'uid': '12345'}
}
}
class DumpsysPowerMonitorMonitorTest(unittest.TestCase):
def testApplicationEnergyConsumption(self):
results = (
android_dumpsys_power_monitor.DumpsysPowerMonitor.ProcessPowerData(
_TYPICAL_POWER_DATA, 4.0, _PACKAGE))
self.assertEqual(results['identifier'], 'dumpsys')
self.assertAlmostEqual(results['application_energy_consumption_mwh'], 95.6)
def testSystemEnergyConsumption(self):
power_data = {
'system_total': 2000.0,
'per_package': {}
}
results = (
android_dumpsys_power_monitor.DumpsysPowerMonitor.ProcessPowerData(
power_data, 4.0, 'some.package'))
self.assertEqual(results['identifier'], 'dumpsys')
self.assertEqual(results['application_energy_consumption_mwh'], 0)
self.assertEqual(results['energy_consumption_mwh'], 8000.0)
def testMonitorCycle(self):
browser = pm_mock.MockBrowser(_PACKAGE)
battery = pm_mock.MockBattery(_TYPICAL_POWER_DATA_MULTISAMPLE, voltage=5.0)
backend = pm_mock.MockPlatformBackend()
pm = android_dumpsys_power_monitor.DumpsysPowerMonitor(battery, backend)
pm.StartMonitoringPower(browser)
result = pm.StopMonitoringPower()
self.assertEqual(result['identifier'], 'dumpsys')
self.assertEqual(result['power_samples_mw'], [])
self.assertAlmostEqual(result['application_energy_consumption_mwh'], 250.0)
self.assertAlmostEqual(result['energy_consumption_mwh'], 10000.0)
def testDoubleStop(self):
browser = pm_mock.MockBrowser(_PACKAGE)
battery = pm_mock.MockBattery(_TYPICAL_POWER_DATA_MULTISAMPLE, voltage=5.0)
backend = pm_mock.MockPlatformBackend()
pm = android_dumpsys_power_monitor.DumpsysPowerMonitor(battery, backend)
pm.StartMonitoringPower(browser)
pm.StopMonitoringPower()
with self.assertRaises(AssertionError):
pm.StopMonitoringPower()
def testDoubleStart(self):
browser = pm_mock.MockBrowser(_PACKAGE)
battery = pm_mock.MockBattery(_TYPICAL_POWER_DATA_MULTISAMPLE, voltage=5.0)
backend = pm_mock.MockPlatformBackend()
pm = android_dumpsys_power_monitor.DumpsysPowerMonitor(battery, backend)
pm.StartMonitoringPower(browser)
with self.assertRaises(AssertionError):
pm.StartMonitoringPower(browser)
def testBatteryChargingState(self):
browser = pm_mock.MockBrowser(_PACKAGE)
battery = pm_mock.MockBattery(_TYPICAL_POWER_DATA_MULTISAMPLE, voltage=5.0)
backend = pm_mock.MockPlatformBackend()
pm = android_dumpsys_power_monitor.DumpsysPowerMonitor(battery, backend)
self.assertEqual(battery.GetCharging(), True)
pm.StartMonitoringPower(browser)
self.assertEqual(battery.GetCharging(), True)
pm.StopMonitoringPower()
self.assertEqual(battery.GetCharging(), True)
if __name__ == '__main__':
unittest.main()