• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2018 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4import logging
5import os
6import time
7
8from autotest_lib.client.common_lib import error
9from autotest_lib.client.common_lib.cros import chrome
10from autotest_lib.client.cros.input_playback import keyboard
11from autotest_lib.client.cros.power import power_test
12
13class power_Display(power_test.power_Test):
14    """class for power_Display test.
15    """
16    version = 1
17
18    # TODO(tbroch) find more patterns that typical display vendors use to show
19    # average and worstcase display power.
20    PAGES = ['checker1', 'black', 'white', 'red', 'green', 'blue']
21    def run_once(self, pages=None, secs_per_page=60, brightness=''):
22        """run_once method.
23
24        @param pages: list of pages names that must be in
25            <testdir>/html/<name>.html
26        @param secs_per_page: time in seconds to display page and measure power.
27        @param brightness: flag for brightness setting to use for testing.
28                           possible value are 'max' (100%) and 'all' (all manual
29                           brightness steps in Chrome OS)
30        """
31        if pages is None:
32            pages = self.PAGES
33
34        with chrome.Chrome(init_network_controller=True) as self.cr:
35            http_path = os.path.join(self.job.testdir, 'power_Display', 'html')
36            self.cr.browser.platform.SetHTTPServerDirectories(http_path)
37            tab = self.cr.browser.tabs.New()
38            tab.Activate()
39
40            # Just measure power in full-screen.
41            fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen')
42            if not fullscreen:
43                with keyboard.Keyboard() as keys:
44                    keys.press_key('f4')
45
46            if brightness not in ['', 'all', 'max']:
47                raise error.TestFail(
48                        'Invalid brightness flag: %s' % (brightness))
49
50            if brightness == 'max':
51                self.backlight.set_percent(100)
52
53            brightnesses = []
54            if brightness == 'all':
55                self.backlight.set_percent(100)
56                for step in range(16, 0, -1):
57                    nonlinear = step * 6.25
58                    linear = self.backlight.nonlinear_to_linear(nonlinear)
59                    brightnesses.append((nonlinear, linear))
60            else:
61                linear = self.backlight.get_percent()
62                nonlinear = self.backlight.linear_to_nonlinear(linear)
63                brightnesses.append((nonlinear, linear))
64
65            self.start_measurements()
66
67            loop = 0
68            for name in pages:
69                url = os.path.join(http_path, name + '.html')
70                logging.info('Navigating to url: %s', url)
71                tab.Navigate(self.cr.browser.platform.http_server.UrlOf(url))
72                tab.WaitForDocumentReadyStateToBeComplete()
73
74                for nonlinear, linear in brightnesses:
75                    self.backlight.set_percent(linear)
76                    tagname = '%s_%s' % (self.tagged_testname, name)
77                    if len(brightnesses) > 1:
78                        tagname += '_%.2f' % (nonlinear)
79                    loop_start = time.time()
80                    self.loop_sleep(loop, secs_per_page)
81                    self.checkpoint_measurements(tagname, loop_start)
82                    loop += 1
83