# Copyright 2018 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. '''Login with test account and display chart file using telemetry.''' import argparse import contextlib import logging import os import signal import sys import time # Set chart process preferred logging format before overridden by importing # common package. logging.basicConfig( level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') # This sets up import paths for autotest. import common from autotest_lib.client.bin import utils from autotest_lib.client.cros import constants from autotest_lib.client.cros.multimedia import display_facade_native from autotest_lib.client.cros.multimedia import facade_resource from autotest_lib.client.common_lib.cros import chrome @contextlib.contextmanager def set_display_brightness(display_level): SET_BRIGHTNESS_CMD = 'backlight_tool --set_brightness_percent=%s' original_display_level = utils.system_output( 'backlight_tool --get_brightness_percent') logging.info('Save original display brightness %r ' 'and fix display brightness to %r', original_display_level, display_level) utils.system(SET_BRIGHTNESS_CMD % display_level) utils.system('stop powerd', ignore_status=True) yield logging.info('Restore display brightness %r', original_display_level) utils.system('start powerd', ignore_status=True) utils.system(SET_BRIGHTNESS_CMD % original_display_level) def display(filepath): """Display chart with filepath on device by using telemetry.""" DISPLAY_LEVEL = 96.0 DISPLAY_ORIENTATION = 90 assert os.path.isfile(filepath), 'filepath %r not found.' % filepath filepath = os.path.abspath(filepath) logging.info('Setup SIGINT listener for stop displaying.') displaying = [True] def handler(signum, frame): """Wait signal to clear running flag.""" if signum == signal.SIGINT: displaying.pop() signal.signal(signal.SIGINT, handler) with chrome.Chrome( extension_paths=[constants.DISPLAY_TEST_EXTENSION], autotest_ext=True, init_network_controller=True) as cr, set_display_brightness( DISPLAY_LEVEL): logging.info('Set fullscreen.') facade = facade_resource.FacadeResource(cr) display_facade = display_facade_native.DisplayFacadeNative(facade) display_facade.set_fullscreen(True) logging.info('Fix screen rotation %d.', DISPLAY_ORIENTATION) internal_display_id = display_facade.get_internal_display_id() display_facade.set_display_rotation(internal_display_id, rotation=DISPLAY_ORIENTATION) logging.info('Display chart file of path %r.', filepath) cr.browser.platform.SetHTTPServerDirectories(os.path.dirname(filepath)) tab = cr.browser.tabs[0] tab.Navigate(cr.browser.platform.http_server.UrlOf(filepath)) tab.WaitForDocumentReadyStateToBeComplete() logging.info('Chart is ready.') # Flush the 'is ready' message for server test to sync with ready state. sys.stdout.flush() sys.stderr.flush() while displaying: time.sleep(1) if __name__ == '__main__': argparser = argparse.ArgumentParser( description='Display chart file on chrome by using telemetry.' ' Send SIGINT or keyboard interrupt to stop displaying.') argparser.add_argument('filepath', help='Path of displayed chart file.') args = argparser.parse_args() display(args.filepath)