85 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
| # 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 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'
 | |
| 
 | |
|     formats = [
 | |
|             # Video call with fewer participants.
 | |
|             ('vp9', 'hd', 24),
 | |
|             ('vp9', 'vga', 24),
 | |
|             ('vp9', 'qvga', 24),
 | |
|             ('vp8', 'hd', 24),
 | |
|             ('vp8', 'vga', 24),
 | |
|             ('vp8', 'qvga', 24),
 | |
|             ('h264', 'hd', 24),
 | |
|             ('h264', 'vga', 24),
 | |
|             # Video call with more participants.
 | |
|             ('vp9', 'hvga', 24),
 | |
|             ('vp9', 'qhvga', 20),
 | |
|             ('vp8', 'hvga', 24),
 | |
|             ('vp8', 'qhvga', 15),
 | |
|             # Higher resolution video
 | |
|             ('vp9', 'fhd', 24),
 | |
|             ('vp8', 'fhd', 24),
 | |
|             ('h264', 'fhd', 24),
 | |
|             # AV1 for informational
 | |
|             ('av1', 'hvga', 24),
 | |
|             ('av1', 'qhvga', 15),
 | |
|     ]
 | |
| 
 | |
|     def run_once(self, seconds_per_test=120, format=formats):
 | |
|         """run_once method.
 | |
| 
 | |
|         @param seconds_per_test: time in seconds for each subtest.
 | |
|         @param format: list of formats to test.
 | |
|                        Format is tuple of codec, resolution and framerate.
 | |
|         """
 | |
|         extra_browser_args = self.get_extra_browser_args_for_camera_test()
 | |
|         with chrome.Chrome(init_network_controller=True,
 | |
|                            extra_browser_args=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()
 | |
|             video_init_time = power_status.VideoFpsLogger.time_until_ready(tab)
 | |
|             self.keyvals['video_init_time'] = video_init_time
 | |
| 
 | |
|             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 format:
 | |
|                 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
 |