⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 244080 in webkit


Ignore:
Timestamp:
Apr 9, 2019, 9:14:43 AM (7 years ago)
Author:
Jonathan Bedard
Message:

iOS 12 Simulator Release WK2 frequently timing out while running layout tests
https://bugs.webkit.org/show_bug.cgi?id=196694
<rdar://problem/48388734>

Rubber-stamped by Aakash Jain.

  • Scripts/webkitpy/port/image_diff.py:

(ImageDiffer.diff_image): If the ImageDiff process has data, kill it before running again.

  • Scripts/webkitpy/port/server_process.py:

(ServerProcess.has_available_stdout): Check if stdout has data in it.
(ServerProcess._wait_for_data_and_update_buffers_using_select):
(ServerProcess._wait_for_data_and_update_buffers_using_win32_apis):

  • Scripts/webkitpy/port/server_process_mock.py:

(MockServerProcess.has_available_stdout):

  • Scripts/webkitpy/port/server_process_unittest.py:

(TestServerProcess.serial_test_basic):

Location:
trunk/Tools
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r244078 r244080  
     12019-04-09  Jonathan Bedard  <jbedard@apple.com>
     2
     3        iOS 12 Simulator Release WK2 frequently timing out while running layout tests
     4        https://bugs.webkit.org/show_bug.cgi?id=196694
     5        <rdar://problem/48388734>
     6
     7        Rubber-stamped by Aakash Jain.
     8
     9        * Scripts/webkitpy/port/image_diff.py:
     10        (ImageDiffer.diff_image): If the ImageDiff process has data, kill it before running again.
     11        * Scripts/webkitpy/port/server_process.py:
     12        (ServerProcess.has_available_stdout): Check if stdout has data in it.
     13        (ServerProcess._wait_for_data_and_update_buffers_using_select):
     14        (ServerProcess._wait_for_data_and_update_buffers_using_win32_apis):
     15        * Scripts/webkitpy/port/server_process_mock.py:
     16        (MockServerProcess.has_available_stdout):
     17        * Scripts/webkitpy/port/server_process_unittest.py:
     18        (TestServerProcess.serial_test_basic):
     19
    1202019-04-09  Jer Noble  <jer.noble@apple.com>
    221
  • trunk/Tools/Scripts/webkitpy/port/image_diff.py

    r216288 r244080  
    4848
    4949    def diff_image(self, expected_contents, actual_contents, tolerance):
    50         if tolerance != self._tolerance:
     50        if tolerance != self._tolerance or (self._process and self._process.has_available_stdout()):
    5151            self.stop()
    5252        try:
  • trunk/Tools/Scripts/webkitpy/port/server_process.py

    r243559 r244080  
    204204        return self._read(deadline, self._pop_stdout_line_if_ready)
    205205
     206    def has_available_stdout(self):
     207        if not self.has_crashed() and self._use_win32_apis:
     208            self._wait_for_data_and_update_buffers_using_win32_apis(0)
     209        elif not self.has_crashed():
     210            self._wait_for_data_and_update_buffers_using_select(0)
     211
     212        return bool(self._output)
     213
    206214    def read_stderr_line(self, deadline):
    207215        return self._read(deadline, self._pop_stderr_line_if_ready)
     
    257265
    258266    def _wait_for_data_and_update_buffers_using_select(self, deadline, stopping=False):
    259         if self._proc.stdout.closed or self._proc.stderr.closed:
     267        if not self._proc or self._proc.stdout.closed or self._proc.stderr.closed:
    260268            # If the process crashed and is using FIFOs, like Chromium Android, the
    261269            # stdout and stderr pipes will be closed.
     
    301309
    302310    def _wait_for_data_and_update_buffers_using_win32_apis(self, deadline):
     311        if not self._proc:
     312            return
     313
    303314        # See http://code.activestate.com/recipes/440554-module-to-allow-asynchronous-subprocess-use-on-win/
    304315        # and http://docs.activestate.com/activepython/2.6/pywin32/modules.html
     
    306317        out_fh = msvcrt.get_osfhandle(self._proc.stdout.fileno())
    307318        err_fh = msvcrt.get_osfhandle(self._proc.stderr.fileno())
    308         while time.time() < deadline:
     319        checking = True
     320        while checking:
    309321            output = self._non_blocking_read_win32(out_fh)
    310322            error = self._non_blocking_read_win32(err_fh)
     
    318330                return
    319331            time.sleep(0.01)
     332            checking = time.time() < deadline
    320333
    321334    def _non_blocking_read_win32(self, handle):
  • trunk/Tools/Scripts/webkitpy/port/server_process_mock.py

    r218055 r244080  
    5555        return self.lines.pop(0) + "\n"
    5656
     57    def has_available_stdout(self):
     58        if self.has_crashed():
     59            return False
     60        return bool(self.lines)
     61
    5762    def read_stdout(self, deadline, size):
    5863        if self.has_crashed():
  • trunk/Tools/Scripts/webkitpy/port/server_process_unittest.py

    r243559 r244080  
    102102    def serial_test_basic(self):
    103103        # Give -u switch to force stdout and stderr to be unbuffered for Windows
    104         cmd = [sys.executable, '-uc', 'import sys; print "stdout"; print >>sys.stderr, "stderr"; sys.stdin.readline();']
     104        cmd = [sys.executable, '-uc', 'import sys; print "stdout"; print "again"; print >>sys.stderr, "stderr"; sys.stdin.readline();']
    105105        host = SystemHost()
    106106        factory = PortFactory(host)
     
    121121        self.assertEqual(line.strip(), "stdout")
    122122
     123        self.assertTrue(proc.has_available_stdout())
     124
    123125        line = proc.read_stderr_line(now + 1.0)
    124126        self.assertEqual(line.strip(), "stderr")
     127
     128        line = proc.read_stdout_line(now + 1.0)
     129        self.assertEqual(line.strip(), "again")
     130        self.assertFalse(proc.has_available_stdout())
    125131
    126132        proc.write('End\n')
Note: See TracChangeset for help on using the changeset viewer.