# Copyright 2020 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 import time from autotest_lib.client.common_lib.cros import chrome from autotest_lib.client.cros.input_playback import keyboard from autotest_lib.client.cros.power import power_status from autotest_lib.client.cros.power import power_test class power_VideoEncode(power_test.power_Test): """class for power_VideoEncode test.""" version = 1 video_url = 'https://crospower.page.link/power_VideoEncode' formats = [ # Video call with fewer participants. ('vp9', 'hd', 24), ('vp9', 'vga', 24), ('vp9', 'qvga', 24), ('vp8', 'hd', 24), ('vp8', 'vga', 24), ('vp8', 'qvga', 24), ('h264', 'hd', 24), ('h264', 'vga', 24), # Video call with more participants. ('vp9', 'hvga', 24), ('vp9', 'qhvga', 20), ('vp8', 'hvga', 24), ('vp8', 'qhvga', 15), # Higher resolution video ('vp9', 'fhd', 24), ('vp8', 'fhd', 24), ('h264', 'fhd', 24), # AV1 for informational ('av1', 'hvga', 24), ('av1', 'qhvga', 15), ] def run_once(self, seconds_per_test=120, format=formats): """run_once method. @param seconds_per_test: time in seconds for each subtest. @param format: list of formats to test. Format is tuple of codec, resolution and framerate. """ extra_browser_args = self.get_extra_browser_args_for_camera_test() with chrome.Chrome(init_network_controller=True, extra_browser_args=extra_browser_args) as cr: tab = cr.browser.tabs.New() tab.Activate() # Just measure power in full-screen. fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen') if not fullscreen: with keyboard.Keyboard() as keys: keys.press_key('f4') url = self.video_url tab.Navigate(url) tab.WaitForDocumentReadyStateToBeComplete() video_init_time = power_status.VideoFpsLogger.time_until_ready(tab) self.keyvals['video_init_time'] = video_init_time self._vlog = power_status.VideoFpsLogger(tab, seconds_period=self._seconds_period, checkpoint_logger=self._checkpoint_logger) self._meas_logs.append(self._vlog) loop = 0 self.start_measurements() for codec, resolution, fps in format: tagname = '%s_%s_%sfps' % (codec, resolution, fps) js = 'changeFormat("%s", "%s", %d)' % (codec, resolution, fps) logging.info(js) tab.EvaluateJavaScript(js) loop_start = time.time() self.loop_sleep(loop, seconds_per_test) self.checkpoint_measurements(tagname, loop_start) loop += 1