blob: 0e89660d07176d1149f8603e3fa444a981a6049f [file] [log] [blame]
# 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 itertools
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'
extra_browser_args = ['--use-fake-ui-for-media-stream']
codecs = ['h264', 'vp8', 'vp9', 'av1']
resolutions = ['360', '720', '1080', '4k']
framerates = [30, 60]
def run_once(self, seconds_per_test=120, codecs=codecs,
resolutions=resolutions, framerates=framerates):
"""run_once method.
@param seconds_per_test: time in seconds for each subtest.
@param codecs: list of codec to test. Possible value are
['h264', 'vp8', 'vp9', 'av1'].
@param resolutions: list of resolutions to test. Possible value are
['360', '540', '720', '1080', '1440', '4k'].
@param framerates: list of framerate to test. Possible value are
number in the range of 1 to 60.
"""
with chrome.Chrome(init_network_controller=True,
extra_browser_args=self.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()
time.sleep(10)
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 itertools.product(codecs, resolutions,
framerates):
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