blob: b8854c07158ed05a9b3cd8e5744f4dccbd34cb5e [file] [log] [blame]
# Copyright 2019 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.
from autotest_lib.client.cros.power import power_videotest
import py_utils
class power_VideoDRMPlayback(power_videotest.power_VideoTest):
"""class for power_VideoDRMPlayback test."""
version = 1
_BASE_URL='https://ats.sandbox.google.com/videostack/media_test_page.html?file='
# list of video name and url.
_VIDEOS = [
('h264_720_30fps_cenc',
_BASE_URL + 'EME_720p30fpsH264_foodmarket_sync_L3_video_clear_audio.mp4.mpd'
),
('h264_1080_30fps_cenc',
_BASE_URL + 'EME_1080p30fpsH264_foodmarket_sync_L3_video_clear_audio.mp4.mpd'
),
('vp9_720_30fps_cenc',
_BASE_URL + 'EME_720p30fpsVP9_foodmarket_sync_L3_video_clear_audio.webm.mpd'
),
('vp9_1080_30fps_cenc',
_BASE_URL + 'EME_1080p30fpsVP9_foodmarket_sync_L3_video_clear_audio.webm.mpd'
),
('av1_720_30fps_cenc',
_BASE_URL + 'EME_720p30fpsAV1_foodmarket_sync_L3_video_clear_audio.mp4.mpd'
),
('av1_1080_30fps_cenc',
_BASE_URL + 'EME_1080p30fpsAV1_foodmarket_sync_L3_video_clear_audio.mp4.mpd'
),
('h264_720_30fps_cbcs',
_BASE_URL + 'EME_720p30fpsH264_foodmarket_sync_cbcs_video_clear_audio.mp4.mpd'
),
('h264_1080_30fps_cbcs',
_BASE_URL + 'EME_1080p30fpsH264_foodmarket_sync_cbcs_video_clear_audio.mp4.mpd'
),
('av1_720_30fps_cbcs',
_BASE_URL + 'EME_720p30fpsAV1_foodmarket_sync_cbcs_video_clear_audio.mp4.mpd'
),
('av1_1080_30fps_cbcs',
_BASE_URL + 'EME_1080p30fpsAV1_foodmarket_sync_cbcs_video_clear_audio.mp4.mpd'
),
]
# Time in seconds to measure power per video file.
_MEASUREMENT_DURATION = 120
def _prepare_video(self, cr, url):
"""Prepare browser session before playing video.
@param cr: Autotest Chrome instance.
@param url: url of video file to play.
"""
tab = cr.browser.tabs[0]
tab.Navigate(url)
tab.WaitForDocumentReadyStateToBeComplete()
def _start_video(self, cr, url):
"""Start playing video.
@param cr: Autotest Chrome instance.
@param url: url of video file to play.
"""
tab = cr.browser.tabs[0]
# Chrome prevents making an element fullscreen if the request doesn't
# initiated by user gesture. https://CrOSPower.page.link/noFullScreen
# Fake the user gesture by evaluate javascript from URL bar.
try:
tab.Navigate("javascript:TestFrameworkApp.FullScreen()", timeout=0)
tab.WaitForDocumentReadyStateToBeComplete()
except py_utils.TimeoutException:
# tab.Navigate always raise TimeoutException because we used it to
# execute javascript and didn't navigate to anywhere.
pass
tab.EvaluateJavaScript("TestFrameworkApp.getInstance().startTest()")
def _teardown_video(self, cr, url):
"""Teardown browser session after playing video.
@param cr: Autotest Chrome instance.
@param url: url of video file to play.
"""
pass
def run_once(self, videos=None, secs_per_video=_MEASUREMENT_DURATION,
use_hw_decode=True):
"""run_once method.
@param videos: list of tuple of tagname and video url to test.
@param secs_per_video: time in seconds to play video and measure power.
@param use_hw_decode: if False, disable hw video decoding.
"""
if not videos:
videos = self._VIDEOS
super(power_VideoDRMPlayback, self).run_once(
videos, secs_per_video, use_hw_decode)