blob: 3dc6e5b387f876451e78744c84c508b53b37a9b7 [file] [log] [blame]
# Copyright (c) 2013 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 os
import time
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import chrome
from autotest_lib.client.cros import upstart
from autotest_lib.client.cros.power import power_utils
class power_VideoDetector(test.test):
"""
Verify the backlight does not get dimmed while playing video.
"""
version = 1
def run_once(self, run_time_sec=60):
"""
@param run_time_sec: time to run the test
"""
if run_time_sec < 30:
raise error.TestError('Must run for at least 30 seconds')
with chrome.Chrome(init_network_controller=True) as cr:
# Start powerd if not started. Set timeouts for quick idle events.
run_time_ms = run_time_sec * 1000
# At the time of writing this test, the video detector gets a status
# update from Chrome every ten seconds.
dim_ms = 10000
off_ms = max(3600000, run_time_ms * 10)
prefs = { 'has_ambient_light_sensor' : 0,
'ignore_external_policy' : 1,
'plugged_dim_ms' : dim_ms,
'plugged_off_ms' : off_ms,
'unplugged_dim_ms' : dim_ms,
'unplugged_off_ms' : off_ms, }
self._pref_change = power_utils.PowerPrefChanger(prefs)
keyvals = {}
# Start with max brightness, so we can easily detect dimming.
power_utils.BacklightController().set_brightness_to_max()
backlight = power_utils.Backlight()
initial_brightness = \
utils.wait_for_value(backlight.get_max_level)
# Open a tab to play video.
cr.browser.platform.SetHTTPServerDirectories(self.bindir)
tab = cr.browser.tabs[0]
tab.Navigate(cr.browser.platform.http_server.UrlOf(
os.path.join(self.bindir, 'fade.html')))
tab.WaitForDocumentReadyStateToBeComplete()
# Sleep until the runtime is up.
time.sleep(run_time_sec)
# Stop powerd to avoid dimming when the video stops.
utils.system_output('stop powerd')
final_brightness = backlight.get_level()
# Check that the backlight stayed the same.
if initial_brightness != final_brightness:
raise error.TestFail(
('Backlight level changed from %d to %d when it should ' + \
'have stayed the same.') %
(initial_brightness, final_brightness))
keyvals['initial_brightness'] = initial_brightness
keyvals['final_brightness'] = final_brightness
self.write_perf_keyval(keyvals)
def cleanup(self):
"""
Cleanup powerd after test.
"""
upstart.restart_job('powerd')