88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| #!/usr/bin/python2
 | |
| #
 | |
| # Copyright (c) 2010 The Chromium Authors. All rights reserved.
 | |
| # Use of this source code is governed by a BSD-style license that can be
 | |
| # found in the LICENSE file.
 | |
| 
 | |
| __author__ = 'kdlucas@chromium.org (Kelly Lucas)'
 | |
| 
 | |
| import logging, re
 | |
| 
 | |
| from autotest_lib.client.bin import test, utils
 | |
| from autotest_lib.client.common_lib import error
 | |
| from autotest_lib.client.cros.graphics import graphics_utils
 | |
| 
 | |
| _SUPPORTED_LVDS_RESOLUTIONS = ['1280x800', '1366x768']
 | |
| 
 | |
| _MODETEST_COMMAND = 'modetest -c'
 | |
| _MODETEST_CONNECTED = 'connected'
 | |
| _MODETEST_CONNECTOR_LVDS = 'LVDS'
 | |
| # The list of connectors in this regex pattern comes from an array called
 | |
| # connector_type_names in the libdrm file caled modetest.c .
 | |
| _MODETEST_CONNECTOR_PATTERN = (r'\d+\s+\d+\s+(connected|disconnected)\s+'
 | |
|                                r'(unknown|VGA|DVI-I|DVI-D|DVI-A|composite|'
 | |
|                                r's-video|LVDS|component|9-pin DIN|HDMI-A|'
 | |
|                                r'HDMI-B|TV|eDP)\s+\d+x\d+\s+\d+\s+\d+')
 | |
| _MODETEST_MODE_PATTERN = (r'\s+.+\d+\s+(\d+)\s+\d+\s+\d+\s+\d+\s+(\d+)\s+\d+\s+'
 | |
|                           r'\d+\s+\d+\s+flags:')
 | |
| 
 | |
| _LVDS_UNSUPPORTED_MESSAGE = '%s is not a supported LVDS resolution'
 | |
| 
 | |
| class hardware_Resolution(test.test):
 | |
|     """
 | |
|     Verify the current screen resolution is supported.
 | |
|     """
 | |
|     version = 1
 | |
| 
 | |
|     def is_lvds_res(self, res, xrandr_output):
 | |
|         """
 | |
|         Returns True if the supplied resolution is associated with
 | |
|         an LVDS connection.
 | |
|         """
 | |
|         search_str = r'LVDS\d+ connected ' + res
 | |
|         for line in xrandr_output:
 | |
|             if re.match(search_str, line):
 | |
|                 return True
 | |
| 
 | |
|         return False
 | |
| 
 | |
|     def get_current_res(self, xrandr_output):
 | |
|         """
 | |
|         Get the current video resolution.
 | |
|         Returns:
 | |
|             string: represents the video resolution.
 | |
|         """
 | |
|         for line in xrandr_output:
 | |
|             if 'Screen 0' in line:
 | |
|                 sections = line.split(',')
 | |
|                 for item in sections:
 | |
|                     if 'current' in item:
 | |
|                         res = item.split()
 | |
|                         return '%s%s%s' % (res[1], res[2], res[3])
 | |
| 
 | |
|         return None
 | |
| 
 | |
|     def run_once(self):
 | |
|         modetest_output = utils.system_output(_MODETEST_COMMAND)
 | |
|         logging.info('modetest output: \n{0}'.format(modetest_output))
 | |
| 
 | |
|         # True if the information being read is about a connected LVDS
 | |
|         # connector, False otherwise
 | |
|         connected_lvds = False
 | |
| 
 | |
|         for line in modetest_output.splitlines():
 | |
|             connector_match = re.match(_MODETEST_CONNECTOR_PATTERN, line)
 | |
|             if connector_match is not None:
 | |
|                 connected_lvds = False
 | |
|                 if connector_match.group(1) == _MODETEST_CONNECTED:
 | |
|                     if connector_match.group(2) == _MODETEST_CONNECTOR_LVDS:
 | |
|                         connected_lvds = True
 | |
| 
 | |
|             if connected_lvds:
 | |
|                 mode_match = re.match(_MODETEST_MODE_PATTERN, line)
 | |
|                 if mode_match is not None:
 | |
|                     res = '{0}x{1}'.format(int(mode_match.group(1)),
 | |
|                                            int(mode_match.group(2)))
 | |
|                     if res not in _SUPPORTED_LVDS_RESOLUTIONS:
 | |
|                         raise error.TestFail(_LVDS_UNSUPPORTED_MESSAGE % res)
 |