| Index: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/driver.py
|
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/driver.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/driver.py
|
| index 3fd0e6ca577c7a571f83a20b9e488b98b1bc8ecc..cb3907a2515826e26602e8e1de735d1f274eb8ef 100644
|
| --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/driver.py
|
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/driver.py
|
| @@ -38,10 +38,8 @@ import os
|
| from webkitpy.common.system import path
|
| from webkitpy.common.system.profiler import ProfilerFactory
|
|
|
| -
|
| _log = logging.getLogger(__name__)
|
|
|
| -
|
| DRIVER_START_TIMEOUT_SECS = 30
|
|
|
|
|
| @@ -58,9 +56,22 @@ class DriverOutput(object):
|
| """Groups information about a output from driver for easy passing
|
| and post-processing of data."""
|
|
|
| - def __init__(self, text, image, image_hash, audio, crash=False,
|
| - test_time=0, measurements=None, timeout=False, error='', crashed_process_name='??',
|
| - crashed_pid=None, crash_log=None, leak=False, leak_log=None, pid=None):
|
| + def __init__(self,
|
| + text,
|
| + image,
|
| + image_hash,
|
| + audio,
|
| + crash=False,
|
| + test_time=0,
|
| + measurements=None,
|
| + timeout=False,
|
| + error='',
|
| + crashed_process_name='??',
|
| + crashed_pid=None,
|
| + crash_log=None,
|
| + leak=False,
|
| + leak_log=None,
|
| + pid=None):
|
| # FIXME: Args could be renamed to better clarify what they do.
|
| self.text = text
|
| self.image = image # May be empty-string if the test crashes.
|
| @@ -132,8 +143,8 @@ class Driver(object):
|
| self._measurements = {}
|
| if self._port.get_option("profile"):
|
| profiler_name = self._port.get_option("profiler")
|
| - self._profiler = ProfilerFactory.create_profiler(self._port.host,
|
| - self._port._path_to_driver(), self._port.results_directory(), profiler_name)
|
| + self._profiler = ProfilerFactory.create_profiler(self._port.host, self._port._path_to_driver(),
|
| + self._port.results_directory(), profiler_name)
|
| else:
|
| self._profiler = None
|
|
|
| @@ -172,7 +183,8 @@ class Driver(object):
|
| if not crashed:
|
| sanitizer = self._port.output_contains_sanitizer_messages(self.error_from_test)
|
| if sanitizer:
|
| - self.error_from_test = 'OUTPUT CONTAINS "' + sanitizer + '", so we are treating this test as if it crashed, even though it did not.\n\n' + self.error_from_test
|
| + self.error_from_test = 'OUTPUT CONTAINS "' + sanitizer + \
|
| + '", so we are treating this test as if it crashed, even though it did not.\n\n' + self.error_from_test
|
| crashed = True
|
| self._crashed_process_name = "unknown process name"
|
| self._crashed_pid = 0
|
| @@ -203,13 +215,21 @@ class Driver(object):
|
| if self.error_from_test:
|
| crash_log += '\nstdout:\n%s\nstderr:\n%s\n' % (text, self.error_from_test)
|
|
|
| - return DriverOutput(text, image, actual_image_hash, audio,
|
| - crash=crashed, test_time=time.time() - test_begin_time, measurements=self._measurements,
|
| - timeout=timed_out, error=self.error_from_test,
|
| - crashed_process_name=self._crashed_process_name,
|
| - crashed_pid=self._crashed_pid, crash_log=crash_log,
|
| - leak=leaked, leak_log=self._leak_log,
|
| - pid=pid)
|
| + return DriverOutput(text,
|
| + image,
|
| + actual_image_hash,
|
| + audio,
|
| + crash=crashed,
|
| + test_time=time.time() - test_begin_time,
|
| + measurements=self._measurements,
|
| + timeout=timed_out,
|
| + error=self.error_from_test,
|
| + crashed_process_name=self._crashed_process_name,
|
| + crashed_pid=self._crashed_pid,
|
| + crash_log=crash_log,
|
| + leak=leaked,
|
| + leak_log=self._leak_log,
|
| + pid=pid)
|
|
|
| def _get_crash_log(self, stdout, stderr, newer_than):
|
| return self._port._get_crash_log(self._crashed_process_name, self._crashed_pid, stdout, stderr, newer_than)
|
| @@ -319,7 +339,11 @@ class Driver(object):
|
| self._leaked = False
|
| self._leak_log = None
|
| cmd_line = self.cmd_line(pixel_tests, per_test_args)
|
| - self._server_process = self._port._server_process_constructor(self._port, server_name, cmd_line, environment, logging=self._port.get_option("driver_logging"))
|
| + self._server_process = self._port._server_process_constructor(self._port,
|
| + server_name,
|
| + cmd_line,
|
| + environment,
|
| + logging=self._port.get_option("driver_logging"))
|
| self._server_process.start()
|
| self._current_cmd_line = cmd_line
|
|
|
| @@ -382,8 +406,7 @@ class Driver(object):
|
| # See http://trac.webkit.org/changeset/65537.
|
| self._crashed_process_name = self._server_process.name()
|
| self._crashed_pid = self._server_process.pid()
|
| - elif (error_line.startswith("#CRASHED - ")
|
| - or error_line.startswith("#PROCESS UNRESPONSIVE - ")):
|
| + elif (error_line.startswith("#CRASHED - ") or error_line.startswith("#PROCESS UNRESPONSIVE - ")):
|
| # WebKitTestRunner uses this to report that the WebProcess subprocess crashed.
|
| match = re.match('#(?:CRASHED|PROCESS UNRESPONSIVE) - (\S+)', error_line)
|
| self._crashed_process_name = match.group(1) if match else 'WebProcess'
|
| @@ -409,7 +432,8 @@ class Driver(object):
|
|
|
| def _command_from_driver_input(self, driver_input):
|
| # FIXME: performance tests pass in full URLs instead of test names.
|
| - if driver_input.test_name.startswith('http://') or driver_input.test_name.startswith('https://') or driver_input.test_name == ('about:blank'):
|
| + if driver_input.test_name.startswith('http://') or driver_input.test_name.startswith(
|
| + 'https://') or driver_input.test_name == ('about:blank'):
|
| command = driver_input.test_name
|
| elif self.is_http_test(driver_input.test_name) or self._should_treat_as_wpt_test(driver_input.test_name):
|
| command = self.test_to_uri(driver_input.test_name)
|
| @@ -457,13 +481,13 @@ class Driver(object):
|
| return False
|
|
|
| def _process_stdout_line(self, block, line):
|
| - if (self._read_header(block, line, 'Content-Type: ', 'content_type')
|
| - or self._read_header(block, line, 'Content-Transfer-Encoding: ', 'encoding')
|
| - or self._read_header(block, line, 'Content-Length: ', '_content_length', int)
|
| - or self._read_header(block, line, 'ActualHash: ', 'content_hash')
|
| - or self._read_header(block, line, 'DumpMalloc: ', 'malloc')
|
| - or self._read_header(block, line, 'DumpJSHeap: ', 'js_heap')
|
| - or self._read_header(block, line, 'StdinPath', 'stdin_path')):
|
| + if (self._read_header(block, line, 'Content-Type: ', 'content_type') or
|
| + self._read_header(block, line, 'Content-Transfer-Encoding: ', 'encoding') or
|
| + self._read_header(block, line, 'Content-Length: ', '_content_length', int) or
|
| + self._read_header(block, line, 'ActualHash: ', 'content_hash') or
|
| + self._read_header(block, line, 'DumpMalloc: ', 'malloc') or
|
| + self._read_header(block, line, 'DumpJSHeap: ', 'js_heap') or
|
| + self._read_header(block, line, 'StdinPath', 'stdin_path')):
|
| return
|
| # Note, we're not reading ExpectedHash: here, but we could.
|
| # If the line wasn't a header, we just append it to the content.
|
| @@ -506,7 +530,8 @@ class Driver(object):
|
|
|
| if out_line:
|
| if out_line[-1] != "\n":
|
| - _log.error("Last character read from DRT stdout line was not a newline! This indicates either a NRWT or DRT bug.")
|
| + _log.error(
|
| + "Last character read from DRT stdout line was not a newline! This indicates either a NRWT or DRT bug.")
|
| content_length_before_header_check = block._content_length
|
| self._process_stdout_line(block, out_line)
|
| # FIXME: Unlike HTTP, DRT dumps the content right after printing a Content-Length header.
|
|
|