101 lines
3.9 KiB
Python
Executable File
101 lines
3.9 KiB
Python
Executable File
# Copyright (c) 2012 The Chromium OS 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 time
|
|
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.common_lib.cros import chrome
|
|
from autotest_lib.client.cros.bluetooth import bluetooth_device_xmlrpc_server
|
|
from autotest_lib.client.cros.input_playback import keyboard
|
|
from autotest_lib.client.cros.power import power_test
|
|
from autotest_lib.client.cros.power import power_utils
|
|
|
|
|
|
class power_Idle(power_test.power_Test):
|
|
"""class for power_Idle test.
|
|
|
|
Collects power stats when machine is idle
|
|
|
|
Current tests,
|
|
|
|
| test# | seconds | display | bluetooth |
|
|
-------------------------------------------
|
|
| 1 | 120 | off | off |
|
|
| 2 | 120 | default | off |
|
|
| 3 | 120 | default | on - idle |
|
|
| 4 | 120 | off | on - idle |
|
|
|
|
"""
|
|
version = 1
|
|
first_test_warmup_secs = 60
|
|
|
|
def initialize(self, pdash_note='', seconds_period=10.,
|
|
force_discharge=False):
|
|
super(power_Idle, self).initialize(seconds_period=seconds_period,
|
|
pdash_note=pdash_note,
|
|
force_discharge=force_discharge)
|
|
|
|
def run_once(self, warmup_secs=20, idle_secs=120, default_only=False):
|
|
"""Collect power stats for idle tests."""
|
|
|
|
def measure_it(warmup_secs, idle_secs, tagname):
|
|
"""Helper function to wrap testing loop for each sub test."""
|
|
if self.is_first_test:
|
|
warmup_secs += self.first_test_warmup_secs
|
|
self.is_first_test = False
|
|
if warmup_secs > 0:
|
|
tstart = time.time()
|
|
time.sleep(warmup_secs)
|
|
self.checkpoint_measurements("warmup", tstart)
|
|
tstart = time.time()
|
|
time.sleep(idle_secs)
|
|
self.checkpoint_measurements(tagname, tstart)
|
|
|
|
bt_device = bluetooth_device_xmlrpc_server \
|
|
.BluetoothDeviceXmlRpcDelegate()
|
|
|
|
with chrome.Chrome() as self.cr:
|
|
self.is_first_test = True
|
|
|
|
# Measure power in full-screen blank tab
|
|
tab = self.cr.browser.tabs.New()
|
|
tab.Activate()
|
|
fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen')
|
|
if not fullscreen:
|
|
with keyboard.Keyboard() as keys:
|
|
keys.press_key('f4')
|
|
|
|
if default_only:
|
|
self.start_measurements()
|
|
measure_it(warmup_secs, idle_secs, 'all-default')
|
|
return
|
|
|
|
# test1 : display off, BT off
|
|
power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_OFF)
|
|
if not bt_device.set_powered(False):
|
|
raise error.TestFail('Cannot turn off bluetooth adapter.')
|
|
self.start_measurements()
|
|
measure_it(warmup_secs, idle_secs, 'display-off_bluetooth-off')
|
|
|
|
# test2 : display default, BT off
|
|
power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_ON)
|
|
measure_it(warmup_secs, idle_secs,
|
|
'display-default_bluetooth-off')
|
|
|
|
# test3 : display default, BT on
|
|
if not bt_device.set_powered(True):
|
|
logging.warning('Cannot turn on bluetooth adapter.')
|
|
return
|
|
measure_it(warmup_secs, idle_secs, 'display-default_bluetooth-on')
|
|
|
|
# test4 : display off, BT on
|
|
power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_OFF)
|
|
measure_it(warmup_secs, idle_secs, 'display-off_bluetooth-on')
|
|
|
|
def cleanup(self):
|
|
"""Reset to previous state."""
|
|
power_utils.set_display_power(power_utils.DISPLAY_POWER_ALL_ON)
|
|
super(power_Idle, self).cleanup()
|