1# Copyright 2018 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import functools 6import logging 7import numpy 8import os 9import time 10 11from autotest_lib.client.bin import fps_meter 12from autotest_lib.client.common_lib.cros import chrome 13from autotest_lib.client.cros import touch_playback_test_base 14 15import py_utils 16 17""" The tracing file that contains the desired mouse scrolling events. """ 18_PLAYBACK_FILE = 'mouse_event' 19 20""" Description of the fake mouse we add to the system. """ 21_MOUSE_DESCRIPTION = 'mouse.prop' 22 23""" List of URLs that will be used to test users gestures on. """ 24_LIST_OF_URLS = ['https://www.youtube.com', 'https://www.cnn.com', 25 'https://slashdot.org/'] 26 27""" Separator used in fps_meter for each VSync """ 28_SEPARATOR = ' ' 29 30class platform_MouseScrollTest( 31 touch_playback_test_base.touch_playback_test_base): 32 """Fast scroll up and down with mouse pressure test.""" 33 version = 1 34 35 def _play_events(self, event_filename): 36 """ 37 Simulate mouse events for user scrolling. 38 39 @param event_filename string string file name containing the events 40 to play pack. 41 """ 42 file_path = os.path.join(self.bindir, event_filename) 43 self._blocking_playback(str(file_path), touch_type='mouse') 44 45 def run_once(self): 46 """ Runs the test once. """ 47 mouse_file = os.path.join(self.bindir, _MOUSE_DESCRIPTION) 48 self._emulate_mouse(property_file=mouse_file) 49 50 def record_fps_info(fps_data, fps_info): 51 """ record the fps info from |fps_meter| """ 52 frame_info, frame_times = fps_info 53 frame_info_str = ''.join(frame_info) 54 fps_count = sum( 55 map(int, frame_info_str.replace(_SEPARATOR, ""))) 56 fps_data.append(fps_count) 57 58 fps_data = [] 59 fps = fps_meter.FPSMeter(functools.partial(record_fps_info, fps_data)) 60 with chrome.Chrome(init_network_controller=True) as cr: 61 for url in _LIST_OF_URLS: 62 tab = cr.browser.tabs.New() 63 tab.Navigate(url) 64 try: 65 tab.WaitForDocumentReadyStateToBeComplete(timeout=15) 66 except py_utils.TimeoutException: 67 logging.warning('Time out during loading url ' + url) 68 69 tab.Activate() 70 cr.browser.platform.SetHTTPServerDirectories(self.bindir) 71 fps.start() 72 self._play_events(_PLAYBACK_FILE) 73 fps.stop() 74 time.sleep(1) 75 76 value = getattr(numpy, 'mean')(fps_data) 77 78 self.output_perf_value(description='fps average', 79 value=value, 80 units='frames per second', 81 higher_is_better=True) 82