| # Copyright (c) 2013 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 |
| from autotest_lib.client.bin import test, utils |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.common_lib.cros import chrome |
| from autotest_lib.client.cros import httpd |
| from autotest_lib.client.cros.power import power_rapl |
| from autotest_lib.client.cros.video import youtube_helper |
| from autotest_lib.client.cros.video import helper_logger |
| |
| |
| FLASH_PROCESS_NAME = 'chrome/chrome --type=ppapi' |
| PLAYER_PLAYING_STATE = 'Playing' |
| |
| |
| class video_YouTubeHTML5(test.test): |
| """This test verify the YouTube HTML5 video. |
| |
| - verify the video playback. |
| - verify the available video resolutions. |
| - verify the player functionalities. |
| |
| """ |
| version = 2 |
| |
| def initialize(self): |
| self._testServer = httpd.HTTPListener(8000, docroot=self.bindir) |
| self._testServer.run() |
| |
| def cleanup(self): |
| if self._testServer: |
| self._testServer.stop() |
| |
| # Report rapl readings to chromeperf/ dashboard. |
| if hasattr(self, 'rapl_rate') and self.rapl_rate: |
| logging.info(self.rapl_rate) |
| # Remove entries that we don't care about, eg. sample count. |
| self.rapl_rate = {key: self.rapl_rate[key] |
| for key in self.rapl_rate.keys() |
| if key.endswith('_pwr')} |
| for key, values in self.rapl_rate.iteritems(): |
| self.output_perf_value( |
| description=key, |
| value=values, |
| units='W', |
| higher_is_better=False, |
| graph='rapl_power_consumption' |
| ) |
| |
| def run_youtube_tests(self, browser): |
| """Run YouTube HTML5 sanity tests. |
| |
| @param browser: The Browser object to run the test with. |
| |
| """ |
| tab = browser.tabs[0] |
| tab.Navigate('http://localhost:8000/youtube5.html') |
| yh = youtube_helper.YouTubeHelper(tab, power_logging=True) |
| # Waiting for test video to load. |
| yh.wait_for_player_state(PLAYER_PLAYING_STATE) |
| |
| # Set tiny resolution to prevent inadvertently caching a higher |
| # bandwidth stream which taints resolution verification. |
| yh.set_playback_quality('tiny') |
| yh.set_video_duration() |
| |
| # Verify that YouTube is running in html5 mode. |
| prc = utils.get_process_list('chrome', '--type=ppapi( |$)') |
| if prc: |
| raise error.TestFail('Running YouTube in Flash mode. ' |
| 'Process list: %s.' % prc) |
| |
| tab.ExecuteJavaScript('player.mute()') |
| yh.verify_video_playback() |
| yh.verify_video_resolutions(power_measurement=True) |
| yh.verify_player_states() |
| self.rapl_rate = yh.get_power_measurement() |
| |
| @helper_logger.video_log_wrapper |
| def run_once(self): |
| with chrome.Chrome( |
| extra_browser_args=helper_logger.chrome_vmodule_flag()) as cr: |
| self.run_youtube_tests(cr.browser) |