104 lines
3.7 KiB
Python
104 lines
3.7 KiB
Python
# 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)
|
|
|