Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1148)

Unified Diff: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/linux.py

Issue 2836403003: Add Xvfb debugging code to run-webkit-tests. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..a3ba3976345c42c69095344746b652c859349ab6 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,12 @@ class LinuxPort(base.Port):
# https://docs.python.org/2/library/subprocess.html#subprocess.Popen.poll
if self._xvfb_process.poll() is not None:
mithro 2017/04/26 01:57:17 Can you just call _stop_xvfb here? Or maybe share
Dirk Pranke 2017/04/26 02:03:00 Yeah, I should be able to refactor it.
_log.warn('Failed to start Xvfb on display "%s."', display)
+ self._xvfb_stdout.close()
+ self._xvfb_stderr.close()
+ _log.warn('Xvfb stdout:\n%s', self.host.filesystem.read_text_file(self._xvfb_stdout.name))
+ _log.warn('Xvfb stderr:\n%s', self.host.filesystem.read_text_file(self._xvfb_stderr.name))
+ self.host.filesystem.remove(self._xvfb_stdout.name)
+ self.host.filesystem.remove(self._xvfb_stderr.name)
def _find_display(self):
"""Tries to find a free X display, looping if necessary."""
@@ -182,11 +193,20 @@ class LinuxPort(base.Port):
def _stop_xvfb(self):
if self._original_display:
self.host.environ['DISPLAY'] = self._original_display
+ if self._xvfb_stdout:
+ self._xvfb_stdout.close()
+ if self._xvfb_stderr:
+ self._xvfb_stderr.close()
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()
+ _log.warn('Xvfb stdout:\n%s', self.host.filesystem.read_text_file(self._xvfb_stdout.name))
+ _log.warn('Xvfb stderr:\n%s', self.host.filesystem.read_text_file(self._xvfb_stderr.name))
+ self.host.filesystem.remove(self._xvfb_stdout.name)
+ self.host.filesystem.remove(self._xvfb_stderr.name)
+
def _path_to_driver(self, target=None):

Powered by Google App Engine
This is Rietveld 408576698