blob: 12b01070e416b4367781c5b2c057d8a2231a05e7 [file] [log] [blame]
# Copyright 2018 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 functools
import logging
import numpy
import os
import time
from autotest_lib.client.bin import fps_meter
from autotest_lib.client.common_lib.cros import chrome
from autotest_lib.client.cros import touch_playback_test_base
import py_utils
""" The tracing file that contains the desired mouse scrolling events. """
_PLAYBACK_FILE = 'mouse_event'
""" Description of the fake mouse we add to the system. """
_MOUSE_DESCRIPTION = 'mouse.prop'
""" List of URLs that will be used to test users gestures on. """
_LIST_OF_URLS = ['https://www.youtube.com', 'https://www.cnn.com',
'https://slashdot.org/']
""" Separator used in fps_meter for each VSync """
_SEPARATOR = ' '
class platform_MouseScrollTest(
touch_playback_test_base.touch_playback_test_base):
"""Fast scroll up and down with mouse pressure test."""
version = 1
def _play_events(self, event_filename):
"""
Simulate mouse events for user scrolling.
@param event_filename string string file name containing the events
to play pack.
"""
file_path = os.path.join(self.bindir, event_filename)
self._blocking_playback(str(file_path), touch_type='mouse')
def run_once(self):
""" Runs the test once. """
mouse_file = os.path.join(self.bindir, _MOUSE_DESCRIPTION)
self._emulate_mouse(property_file=mouse_file)
def record_fps_info(fps_data, fps_info):
""" record the fps info from |fps_meter| """
frame_info, frame_times = fps_info
frame_info_str = ''.join(frame_info)
fps_count = sum(
map(int, frame_info_str.replace(_SEPARATOR, "")))
fps_data.append(fps_count)
fps_data = []
fps = fps_meter.FPSMeter(functools.partial(record_fps_info, fps_data))
with chrome.Chrome(init_network_controller=True) as cr:
for url in _LIST_OF_URLS:
tab = cr.browser.tabs.New()
tab.Navigate(url)
try:
tab.WaitForDocumentReadyStateToBeComplete(timeout=15)
except py_utils.TimeoutException:
logging.warning('Time out during loading url ' + url)
tab.Activate()
cr.browser.platform.SetHTTPServerDirectories(self.bindir)
fps.start()
self._play_events(_PLAYBACK_FILE)
fps.stop()
time.sleep(1)
value = getattr(numpy, 'mean')(fps_data)
self.output_perf_value(description='fps average',
value=value,
units='frames per second',
higher_is_better=True)