blob: 08aab7573b360d80be4c54a2c53b24135012935e [file] [log] [blame]
# Copyright (c) 2010 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, os, time
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import cros_ui, power_status
class power_Backlight(test.test):
version = 1
def run_once(self, delay=60, seconds=10, tries=20):
# disable powerd
os.system('stop powerd')
# disable screen blanking. Stopping screen-locker isn't
# synchronous :(. Add a sleep for now, till powerd comes around
# and fixes all this for us.
# TODO(davidjames): Power manager should support this feature directly
time.sleep(5)
cros_ui.xsystem('LD_LIBRARY_PATH=/usr/local/lib ' + 'xset s off')
cros_ui.xsystem('LD_LIBRARY_PATH=/usr/local/lib ' + 'xset dpms 0 0 0')
cros_ui.xsystem('LD_LIBRARY_PATH=/usr/local/lib ' + 'xset -dpms')
status = power_status.get_status()
if status.linepower[0].online:
raise error.TestFail('Machine must be unplugged')
cmd = 'backlight-tool --get_max_brightness'
max_brightness = int(utils.system_output(cmd).rstrip())
if max_brightness < 4:
raise error.TestFail('Must have at least 5 backlight levels')
keyvals = {}
rates = []
levels = [0, int(0.5*max_brightness), max_brightness]
for i in levels:
utils.system('backlight-tool --set_brightness %d' % i)
time.sleep(delay)
this_rate = []
for j in range(tries):
time.sleep(seconds)
status.refresh()
this_rate.append(status.battery[0].energy_rate)
rate = min(this_rate)
keyvals['w_bl_%d_rate' % i] = rate
rates.append(rate)
self.write_perf_keyval(keyvals)
for i in range(1, len(levels)):
if rates[i] <= rates[i-1]:
raise error.TestFail('Turning up the backlight ' \
'should increase energy consumption')
def cleanup(self):
# Re-enable screen locker and powerd. This also re-enables dpms.
os.system('start powerd')