1# Copyright 2020 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 time 6 7from autotest_lib.client.common_lib.cros import chrome 8from autotest_lib.client.cros.input_playback import keyboard 9from autotest_lib.client.cros.power import power_status 10from autotest_lib.client.cros.power import power_test 11 12 13class power_VideoEncode(power_test.power_Test): 14 """class for power_VideoEncode test.""" 15 version = 1 16 17 video_url = 'https://crospower.page.link/power_VideoEncode' 18 19 formats = [ 20 # Video call with fewer participants. 21 ('vp9', 'hd', 24), 22 ('vp9', 'vga', 24), 23 ('vp9', 'qvga', 24), 24 ('vp8', 'hd', 24), 25 ('vp8', 'vga', 24), 26 ('vp8', 'qvga', 24), 27 ('h264', 'hd', 24), 28 ('h264', 'vga', 24), 29 # Video call with more participants. 30 ('vp9', 'hvga', 24), 31 ('vp9', 'qhvga', 20), 32 ('vp8', 'hvga', 24), 33 ('vp8', 'qhvga', 15), 34 # Higher resolution video 35 ('vp9', 'fhd', 24), 36 ('vp8', 'fhd', 24), 37 ('h264', 'fhd', 24), 38 # AV1 for informational 39 ('av1', 'hvga', 24), 40 ('av1', 'qhvga', 15), 41 ] 42 43 def run_once(self, seconds_per_test=120, format=formats): 44 """run_once method. 45 46 @param seconds_per_test: time in seconds for each subtest. 47 @param format: list of formats to test. 48 Format is tuple of codec, resolution and framerate. 49 """ 50 extra_browser_args = self.get_extra_browser_args_for_camera_test() 51 with chrome.Chrome(init_network_controller=True, 52 extra_browser_args=extra_browser_args) as cr: 53 54 tab = cr.browser.tabs.New() 55 tab.Activate() 56 57 # Just measure power in full-screen. 58 fullscreen = tab.EvaluateJavaScript('document.webkitIsFullScreen') 59 if not fullscreen: 60 with keyboard.Keyboard() as keys: 61 keys.press_key('f4') 62 63 url = self.video_url 64 tab.Navigate(url) 65 tab.WaitForDocumentReadyStateToBeComplete() 66 video_init_time = power_status.VideoFpsLogger.time_until_ready(tab) 67 self.keyvals['video_init_time'] = video_init_time 68 69 self._vlog = power_status.VideoFpsLogger(tab, 70 seconds_period=self._seconds_period, 71 checkpoint_logger=self._checkpoint_logger) 72 self._meas_logs.append(self._vlog) 73 74 loop = 0 75 self.start_measurements() 76 for codec, resolution, fps in format: 77 tagname = '%s_%s_%sfps' % (codec, resolution, fps) 78 js = 'changeFormat("%s", "%s", %d)' % (codec, resolution, fps) 79 logging.info(js) 80 tab.EvaluateJavaScript(js) 81 loop_start = time.time() 82 self.loop_sleep(loop, seconds_per_test) 83 self.checkpoint_measurements(tagname, loop_start) 84 loop += 1 85