| OLD | NEW |
| 1 # Copyright (C) 2010 Google Inc. All rights reserved. | 1 # Copyright (C) 2010 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 | 41 |
| 42 SUPPORTED_VERSIONS = ('trusty',) | 42 SUPPORTED_VERSIONS = ('trusty',) |
| 43 | 43 |
| 44 FALLBACK_PATHS = {} | 44 FALLBACK_PATHS = {} |
| 45 FALLBACK_PATHS['trusty'] = ['linux'] + win.WinPort.latest_platform_fallback_
path() | 45 FALLBACK_PATHS['trusty'] = ['linux'] + win.WinPort.latest_platform_fallback_
path() |
| 46 | 46 |
| 47 DEFAULT_BUILD_DIRECTORIES = ('out',) | 47 DEFAULT_BUILD_DIRECTORIES = ('out',) |
| 48 | 48 |
| 49 BUILD_REQUIREMENTS_URL = 'https://chromium.googlesource.com/chromium/src/+/m
aster/docs/linux_build_instructions.md' | 49 BUILD_REQUIREMENTS_URL = 'https://chromium.googlesource.com/chromium/src/+/m
aster/docs/linux_build_instructions.md' |
| 50 | 50 |
| 51 XVFB_START_TIMEOUT = 5.0 # Wait up to 5 seconds for Xvfb to start. |
| 52 |
| 51 @classmethod | 53 @classmethod |
| 52 def determine_full_port_name(cls, host, options, port_name): | 54 def determine_full_port_name(cls, host, options, port_name): |
| 53 if port_name.endswith('linux'): | 55 if port_name.endswith('linux'): |
| 54 assert host.platform.is_linux() | 56 assert host.platform.is_linux() |
| 55 version = host.platform.os_version | 57 version = host.platform.os_version |
| 56 return port_name + '-' + version | 58 return port_name + '-' + version |
| 57 return port_name | 59 return port_name |
| 58 | 60 |
| 59 def __init__(self, host, port_name, **kwargs): | 61 def __init__(self, host, port_name, **kwargs): |
| 60 super(LinuxPort, self).__init__(host, port_name, **kwargs) | 62 super(LinuxPort, self).__init__(host, port_name, **kwargs) |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 # get the right DISPLAY. Note, if this environment could be passed | 163 # get the right DISPLAY. Note, if this environment could be passed |
| 162 # when creating workers, then we wouldn't need to modify DISPLAY here. | 164 # when creating workers, then we wouldn't need to modify DISPLAY here. |
| 163 self._original_display = self.host.environ.get('DISPLAY') | 165 self._original_display = self.host.environ.get('DISPLAY') |
| 164 self.host.environ['DISPLAY'] = display | 166 self.host.environ['DISPLAY'] = display |
| 165 | 167 |
| 166 # The poll() method will return None if the process has not terminated: | 168 # The poll() method will return None if the process has not terminated: |
| 167 # https://docs.python.org/2/library/subprocess.html#subprocess.Popen.pol
l | 169 # https://docs.python.org/2/library/subprocess.html#subprocess.Popen.pol
l |
| 168 if self._xvfb_process.poll() is not None: | 170 if self._xvfb_process.poll() is not None: |
| 169 _log.warn('Failed to start Xvfb on display "%s."', display) | 171 _log.warn('Failed to start Xvfb on display "%s."', display) |
| 170 | 172 |
| 173 start_time = self.host.time() |
| 174 while self.host.time() - start_time < self.XVFB_START_TIMEOUT: |
| 175 # We don't explicitly set the display, as we want to check the |
| 176 # environment value. |
| 177 exit_code = self.host.executive.run_command( |
| 178 ['xdpyinfo'], return_exit_code=True) |
| 179 if exit_code == 0: |
| 180 _log.info('Successfully started Xvfb with display "%s".', displa
y) |
| 181 return |
| 182 _log.warn('xdpyinfo check failed with exit code %s while starting Xv
fb on "%s".', exit_code, display) |
| 183 self.host.sleep(0.1) |
| 184 _log.fatal('Failed to start Xvfb on display "%s" (xdpyinfo check failed)
.', display) |
| 185 |
| 171 def _find_display(self): | 186 def _find_display(self): |
| 172 """Tries to find a free X display, looping if necessary.""" | 187 """Tries to find a free X display, looping if necessary.""" |
| 173 # The "xvfb-run" command uses :99 by default. | 188 # The "xvfb-run" command uses :99 by default. |
| 174 for display_number in range(99, 120): | 189 for display_number in range(99, 120): |
| 175 display = ':%d' % display_number | 190 display = ':%d' % display_number |
| 176 exit_code = self.host.executive.run_command( | 191 exit_code = self.host.executive.run_command( |
| 177 ['xdpyinfo', '-display', display], return_exit_code=True) | 192 ['xdpyinfo', '-display', display], return_exit_code=True) |
| 178 if exit_code == 1: | 193 if exit_code == 1: |
| 179 return display | 194 return display |
| 180 return None | 195 return None |
| 181 | 196 |
| 182 def _stop_xvfb(self): | 197 def _stop_xvfb(self): |
| 183 if self._original_display: | 198 if self._original_display: |
| 184 self.host.environ['DISPLAY'] = self._original_display | 199 self.host.environ['DISPLAY'] = self._original_display |
| 185 if not self._xvfb_process: | 200 if not self._xvfb_process: |
| 186 return | 201 return |
| 187 _log.debug('Killing Xvfb process pid %d.', self._xvfb_process.pid) | 202 _log.debug('Killing Xvfb process pid %d.', self._xvfb_process.pid) |
| 188 self._xvfb_process.kill() | 203 self._xvfb_process.kill() |
| 189 self._xvfb_process.wait() | 204 self._xvfb_process.wait() |
| 190 | 205 |
| 191 | 206 |
| 192 def _path_to_driver(self, target=None): | 207 def _path_to_driver(self, target=None): |
| 193 binary_name = self.driver_name() | 208 binary_name = self.driver_name() |
| 194 return self._build_path_with_target(target, binary_name) | 209 return self._build_path_with_target(target, binary_name) |
| OLD | NEW |