112e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
212e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana# Use of this source code is governed by a BSD-style license that can be
312e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana# found in the LICENSE file.
412e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
512e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasanafrom contextlib import closing
612e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasanaimport logging
712e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasanaimport os
812e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
9422993abd78797cd1c9caa3b52d5eae22fecc83cMussafrom autotest_lib.client.bin import test
10172ecb7f5a6bbda741799444237a9be4ee21518bEd Bakerfrom autotest_lib.client.common_lib import file_utils
1112e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasanafrom autotest_lib.client.common_lib.cros import chrome
12031bb43c64c1d3ff0c2088b0b950f25015b4d83bMussafrom autotest_lib.client.cros.video import histogram_verifier
1312e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
1412e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
1512e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana# Chrome flags to use fake camera and skip camera permission.
1612e041142e00094ce078a227da3b2c2f8b8ee616Rohit MakasanaEXTRA_BROWSER_ARGS = ['--use-fake-device-for-media-stream',
1712e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana                      '--use-fake-ui-for-media-stream']
1812e041142e00094ce078a227da3b2c2f8b8ee616Rohit MakasanaFAKE_FILE_ARG = '--use-file-for-fake-video-capture="%s"'
1912e041142e00094ce078a227da3b2c2f8b8ee616Rohit MakasanaDOWNLOAD_BASE = 'http://commondatastorage.googleapis.com/chromiumos-test-assets-public/crowd/'
2012e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
2112e041142e00094ce078a227da3b2c2f8b8ee616Rohit MakasanaHISTOGRAMS_URL = 'chrome://histograms/'
2212e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
23422993abd78797cd1c9caa3b52d5eae22fecc83cMussa
2412e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasanaclass video_ChromeRTCHWDecodeUsed(test.test):
2512e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana    """The test verifies HW Encoding for WebRTC video."""
2612e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana    version = 1
2712e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
2812e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
2912e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana    def start_loopback(self, cr):
3012e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        """
3112e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        Opens WebRTC loopback page.
3212e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
3312e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        @param cr: Autotest Chrome instance.
3412e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        """
3512e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        tab = cr.browser.tabs[0]
3655e4a38297449fcf3dbd693e2e6afe72fa84b519Ahmed Fakhry        tab.Navigate(cr.browser.platform.http_server.UrlOf(
37422993abd78797cd1c9caa3b52d5eae22fecc83cMussa            os.path.join(self.bindir, 'loopback.html')))
3812e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        tab.WaitForDocumentReadyStateToBeComplete()
3912e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
4012e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
41031bb43c64c1d3ff0c2088b0b950f25015b4d83bMussa    def run_once(self, video_name, histogram_name, histogram_bucket_val):
4212e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        # Download test video.
43031bb43c64c1d3ff0c2088b0b950f25015b4d83bMussa        url = DOWNLOAD_BASE + video_name
44031bb43c64c1d3ff0c2088b0b950f25015b4d83bMussa        local_path = os.path.join(self.bindir, video_name)
45172ecb7f5a6bbda741799444237a9be4ee21518bEd Baker        file_utils.download_file(url, local_path)
4612e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
4712e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        # Start chrome with test flags.
4812e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        EXTRA_BROWSER_ARGS.append(FAKE_FILE_ARG % local_path)
4912e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana        with chrome.Chrome(extra_browser_args=EXTRA_BROWSER_ARGS) as cr:
5012e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana            # Open WebRTC loopback page.
5155e4a38297449fcf3dbd693e2e6afe72fa84b519Ahmed Fakhry            cr.browser.platform.SetHTTPServerDirectories(self.bindir)
5212e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana            self.start_loopback(cr)
5312e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana
5412e041142e00094ce078a227da3b2c2f8b8ee616Rohit Makasana            # Make sure decode is hardware accelerated.
55031bb43c64c1d3ff0c2088b0b950f25015b4d83bMussa            histogram_verifier.verify(cr, histogram_name, histogram_bucket_val)
56