Index: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py |
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py |
index 9147c2ccdadea819aa98528973f160c6b854e8cd..4f559c422f0fa8a9947e571d7fdd33294370c57a 100644 |
--- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py |
+++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py |
@@ -27,6 +27,7 @@ |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
import logging |
+import tempfile |
from webkitpy.layout_tests.breakpad.dump_reader_multipart import DumpReaderLinux |
from webkitpy.layout_tests.port import base |
@@ -67,6 +68,8 @@ class LinuxPort(base.Port): |
self._original_home = None |
self._original_display = None |
self._xvfb_process = None |
+ self._xvfb_stdout = None |
+ self._xvfb_stderr = None |
def additional_driver_flag(self): |
flags = super(LinuxPort, self).additional_driver_flag() |
@@ -153,9 +156,11 @@ class LinuxPort(base.Port): |
return |
_log.info('Starting Xvfb with display "%s".', display) |
+ self._xvfb_stdout = tempfile.NamedTemporaryFile(delete=False) |
+ self._xvfb_stderr = tempfile.NamedTemporaryFile(delete=False) |
self._xvfb_process = self.host.executive.popen( |
['Xvfb', display, '-screen', '0', '1280x800x24', '-ac', '-dpi', '96'], |
- stderr=self.host.executive.DEVNULL) |
+ stdout=self._xvfb_stdout, stderr=self._xvfb_stderr) |
# By setting DISPLAY here, the individual worker processes will |
# get the right DISPLAY. Note, if this environment could be passed |
@@ -167,6 +172,7 @@ class LinuxPort(base.Port): |
# https://docs.python.org/2/library/subprocess.html#subprocess.Popen.poll |
if self._xvfb_process.poll() is not None: |
_log.warn('Failed to start Xvfb on display "%s."', display) |
+ self._stop_xvfb() |
def _find_display(self): |
"""Tries to find a free X display, looping if necessary.""" |
@@ -182,11 +188,23 @@ class LinuxPort(base.Port): |
def _stop_xvfb(self): |
if self._original_display: |
self.host.environ['DISPLAY'] = self._original_display |
- if not self._xvfb_process: |
- return |
- _log.debug('Killing Xvfb process pid %d.', self._xvfb_process.pid) |
- self._xvfb_process.kill() |
- self._xvfb_process.wait() |
+ if self._xvfb_stdout: |
+ self._xvfb_stdout.close() |
+ if self._xvfb_stderr: |
+ self._xvfb_stderr.close() |
+ if self._xvfb_process: |
+ _log.debug('Killing Xvfb process pid %d.', self._xvfb_process.pid) |
+ self._xvfb_process.kill() |
+ self._xvfb_process.wait() |
+ if self._xvfb_stdout and self.host.filesystem.exists(self._xvfb_stdout.name): |
+ for line in self.host.filesystem.read_text_file(self._xvfb_stdout.name).splitlines(): |
+ _log.warn('Xvfb stdout: %s', line) |
+ self.host.filesystem.remove(self._xvfb_stdout.name) |
+ if self._xvfb_stderr and self.host.filesystem.exists(self._xvfb_stderr.name): |
+ for line in self.host.filesystem.read_text_file(self._xvfb_stderr.name).splitlines(): |
+ _log.warn('Xvfb stderr: %s', line) |
+ self.host.filesystem.remove(self._xvfb_stderr.name) |
+ |
def _path_to_driver(self, target=None): |