130 lines
5.5 KiB
Python
130 lines
5.5 KiB
Python
# 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)
|