1# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import logging 6import time 7 8from autotest_lib.client.common_lib import error 9from autotest_lib.client.common_lib.cros import chrome 10from autotest_lib.client.cros.bluetooth import bluetooth_device_xmlrpc_server 11from autotest_lib.client.cros.input_playback import keyboard 12from autotest_lib.client.cros.power import power_test 13from autotest_lib.client.cros.power import power_utils 14 15 16class power_Idle(power_test.power_Test): 17 """class for power_Idle test. 18 19 Collects power stats when machine is idle 20 21 Current tests, 22 23 | test# | seconds | display | bluetooth | 24 ------------------------------------------- 25 | 1 | 120 | off | off | 26 | 2 | 120 | default | off | 27 | 3 | 120 | default | on - idle | 28 | 4 | 120 | off | on - idle | 29 30 """ 31 version = 1 32 first_test_warmup_secs = 60 33 34 def initialize(self, pdash_note='', seconds_period=10., 35 force_discharge=False): 36 super(power_Idle, self).initialize(seconds_period=seconds_period, 37 pdash_note=pdash_note, 38 force_discharge=force_discharge) 39 40 def run_once(self, warmup_secs=20, idle_secs=120, default_only=False): 41 """Collect power stats for idle tests.""" 42 43 def measure_it(warmup_secs, idle_secs, tagname): 44 """Helper function to wrap testing loop for each sub test.""" 45 if self.is_first_test: 46 warmup_secs += self.first_test_warmup_secs 47 self.is_first_test = False 48 if warmup_secs > 0: 49 tstart = time.time() 50 time.sleep(warmup_secs) 51 self.checkpoint_measurements("warmup", tstart) 52 tstart = time.time() 53 time.sleep(idle_secs) 54 self.checkpoint_measurements(tagname, tstart) 55 56 bt_device = bluetooth_device_xmlrpc_server \ 57 .BluetoothDeviceXmlRpcDelegate() 58 59 with chrome.Chrome() as self.cr: 60 self.is_first_test = True 61 62 # Measure power in full-screen blank tab 63 tab = self.cr.browser.tabs.New() 64 tab.Activate() 65 fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen') 66 if not fullscreen: 67 with keyboard.Keyboard() as keys: 68 keys.press_key('f4') 69 70 if default_only: 71 self.start_measurements() 72 measure_it(warmup_secs, idle_secs, 'all-default') 73 return 74 75 # test1 : display off, BT off 76 power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_OFF) 77 if not bt_device.set_powered(False): 78 raise error.TestFail('Cannot turn off bluetooth adapter.') 79 self.start_measurements() 80 measure_it(warmup_secs, idle_secs, 'display-off_bluetooth-off') 81 82 # test2 : display default, BT off 83 power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_ON) 84 measure_it(warmup_secs, idle_secs, 85 'display-default_bluetooth-off') 86 87 # test3 : display default, BT on 88 if not bt_device.set_powered(True): 89 logging.warning('Cannot turn on bluetooth adapter.') 90 return 91 measure_it(warmup_secs, idle_secs, 'display-default_bluetooth-on') 92 93 # test4 : display off, BT on 94 power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_OFF) 95 measure_it(warmup_secs, idle_secs, 'display-off_bluetooth-on') 96 97 def cleanup(self): 98 """Reset to previous state.""" 99 power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_ON) 100 super(power_Idle, self).cleanup() 101