blob: 83cdf3af5fef29662773ca11c9028b2ffafbc84e [file] [log] [blame]
# Copyright (c) 2014 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
from autotest_lib.client.common_lib import error
from autotest_lib.server import autotest, test
# TODO(b/163372205): Some models before unibuild have ambient light sensors
# only on certain skus. However, has_ambient_light_sensor powerd pref has to
# be set for all skus. For these models, skip checking the existence of ambient
# light sensors against has_ambient_light_sensor powerd pref.
IGNORE_ALS_PREF_MODELS = ['caroline']
class power_BrightnessResetAfterReboot(test.test):
"""Verifies that the panel brightness level resets after device reboots.
"""
version = 2
def run_once(self, host, client_autotest):
"""This test verifies that the panel brightness level resets after
device reboots.
"""
if host.has_internal_display() is None:
raise error.TestNAError('Device has no internal display.')
autotest_client = autotest.Autotest(host)
host.reboot()
autotest_client.run_test(client_autotest,
exit_without_logout=True)
cmd = 'check_powerd_config --ambient_light_sensor'
num_als_pref = int(host.run_output(cmd, ignore_status=True))
cmd = 'backlight_tool --get_ambient_light_lux'
result = host.run(cmd, ignore_status=True)
als_exists = not result.exit_status # 0 is cmd success.
if num_als_pref and not als_exists:
model = host.get_platform()
msg = ('Powerd pref indicates %d ambient light sensor(s) but device '
'is unable to find it (them).' % num_als_pref)
if model in IGNORE_ALS_PREF_MODELS:
logging.info('%s However, skip this check for model: %s.',
msg, model)
else:
raise error.TestFail(msg)
initial_lux = -1
if als_exists:
initial_lux = int(result.stdout.rstrip())
lux_domain = [initial_lux / 2, initial_lux * 2]
brightness_range = \
[get_backlight(host, lux) for lux in lux_domain]
else:
brightness_range = [10.0, 90.0]
initial_brightness = get_backlight(host)
if (initial_brightness < brightness_range[0] or
initial_brightness > brightness_range[1]):
raise error.TestFail('Default brightness level is out of scope '
'(%d%% - %d%%): %f' % (brightness_range[0],
brightness_range[1],
initial_brightness))
brightness_min = 0.0
if (not set_backlight(host, brightness_min) or
get_backlight(host) != brightness_min):
raise error.TestFail('Unable to change the brightness to minimum '
'(%f%%) level.' % brightness_min)
brightness_max = 100.0
if (not set_backlight(host, brightness_max) or
get_backlight(host) != brightness_max):
raise error.TestFail('Unable to change the brightness to maximum '
'(%f%%) level.' % brightness_max)
host.reboot()
autotest_client.run_test(client_autotest,
exit_without_logout=True)
brightness_after_reboot = get_backlight(host)
if not als_exists and initial_brightness == brightness_after_reboot:
return
# If there is an ambient light sensor, allow a small change in internal
# display brightness, in case that the ambient light changes slightly.
if als_exists:
cushion = 0.2
lux_domain_after_reboot = [(1.0 - cushion) * initial_lux,
(1.0 + cushion) * initial_lux]
brightness_range_after_reboot = [get_backlight(host, lux) for lux
in lux_domain_after_reboot]
if (brightness_range_after_reboot[0] <=
brightness_after_reboot <=
brightness_range_after_reboot[1]):
return
raise error.TestFail('Unable to reset internal display brightness back '
'to default after reboot.\n'
'Previous boot default brightness: %f\n'
'Current boot default brightness: %f' %
(initial_brightness, brightness_after_reboot))
def set_backlight(host, percentage):
"""Executes backlight_tool to set internal display backlight.
@param host: host object representing the DUT.
@param percentage: linear percentage to set internal display
backlight to.
"""
cmd = 'backlight_tool --set_brightness_percent=%f' % percentage
try:
exit_status = host.run(cmd).exit_status
except error.CmdError:
raise error.TestFail(cmd)
return not exit_status # 0 is cmd success.
def get_backlight(host, lux=-1):
"""Executes backlight_tool to get internal display backlight.
@param host: host object representing the DUT.
"""
cmd = 'backlight_tool --get_brightness_percent'
if lux >= 0:
cmd = '%s --lux=%d' % (cmd, lux)
try:
result = host.run_output(cmd)
except error.CmdError:
raise error.TestFail(cmd)
return float(result)