blob: bf54ac52483a6898e7831ce0a4666161a4fcd2b2 [file] [log] [blame]
# Copyright 2016 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.
"""This is a server side screen rotation test using the Chameleon board."""
import logging
from autotest_lib.client.common_lib import error
from autotest_lib.server import test
from autotest_lib.server.cros.chameleon import chameleon_measurer
class platform_RotationFps(test.test):
"""Server side screen rotation test.
This test talks to a Chameleon board and a DUT to set up dock mode,
change rotation, and measure the fps.
"""
version = 1
DELAY_BEFORE_ROTATION = 5
DELAY_AFTER_ROTATION = 5
def run_once(self, host):
# Check the servo object
if host.servo is None:
raise error.TestError('Invalid servo object found on the host.')
if host.get_board_type() != 'CHROMEBOOK':
raise error.TestNAError('DUT is not Chromebook. Test Skipped')
measurer = chameleon_measurer.RemoteChameleonMeasurer(
host, self.outputdir)
display_facade = measurer.display_facade
chameleon_board = host.chameleon
chameleon_board.setup_and_reset(self.outputdir)
with measurer.start_dock_mode_measurement() as chameleon_port:
chameleon_port_name = chameleon_port.get_connector_type()
logging.info('Detected %s chameleon port.', chameleon_port_name)
display_id = display_facade.get_first_external_display_id()
# Ask Chameleon to capture the video during rotation
chameleon_port.start_capturing_video()
# Rotate the screen to 90 degree.
# Adding delays before and after rotation such that we can easily
# know the rotation fps, not other animation like opening a tab.
display_facade.set_display_rotation(
display_id, 90, self.DELAY_BEFORE_ROTATION,
self.DELAY_AFTER_ROTATION)
chameleon_port.stop_capturing_video()
# Restore back to 0 degree.
display_facade.set_display_rotation(display_id, 0)
# Retrieve the FPS info
fps_list = chameleon_port.get_captured_fps_list()
# Cut the fps numbers before and after rotation
fps_list = fps_list[-(self.DELAY_AFTER_ROTATION + 1):
-(self.DELAY_AFTER_ROTATION - 1)]
# The fps during rotation may cross the second-boundary. Sum them.
fps = sum(fps_list)
logging.info('***RESULT*** Rotation FPS is %d (max 15)', fps)
# Output the perf value
self.output_perf_value(description='Rotation FPS',
value=fps,
higher_is_better=True,
units='fps')