Title: [116134] trunk/Tools
Revision
116134
Author
[email protected]
Date
2012-05-04 11:44:46 -0700 (Fri, 04 May 2012)

Log Message

[Qt][NRWT] Run each DRT in it's own xvfb
https://bugs.webkit.org/show_bug.cgi?id=77335

Patch by Kristóf Kosztyó <[email protected]> on 2012-05-04
Reviewed by Dirk Pranke.

* Scripts/webkitpy/layout_tests/port/gtk.py:
(GtkPort._driver_class):
* Scripts/webkitpy/layout_tests/port/qt.py:
(QtPort._driver_class):
* Scripts/webkitpy/layout_tests/port/xvfbdriver.py: Added.
(XvfbDriver):
(XvfbDriver._start):
(XvfbDriver._start.x_filter):
(XvfbDriver.stop):

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (116133 => 116134)


--- trunk/Tools/ChangeLog	2012-05-04 18:42:11 UTC (rev 116133)
+++ trunk/Tools/ChangeLog	2012-05-04 18:44:46 UTC (rev 116134)
@@ -1,3 +1,20 @@
+2012-05-04  Kristóf Kosztyó  <[email protected]>
+
+        [Qt][NRWT] Run each DRT in it's own xvfb
+        https://bugs.webkit.org/show_bug.cgi?id=77335
+
+        Reviewed by Dirk Pranke.
+
+        * Scripts/webkitpy/layout_tests/port/gtk.py:
+        (GtkPort._driver_class):
+        * Scripts/webkitpy/layout_tests/port/qt.py:
+        (QtPort._driver_class):
+        * Scripts/webkitpy/layout_tests/port/xvfbdriver.py: Added.
+        (XvfbDriver):
+        (XvfbDriver._start):
+        (XvfbDriver._start.x_filter):
+        (XvfbDriver.stop):
+
 2012-05-04  Zan Dobersek  <[email protected]>
 
         Use destructuring assingment for the return values of the

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/gtk.py (116133 => 116134)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/gtk.py	2012-05-04 18:42:11 UTC (rev 116133)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/gtk.py	2012-05-04 18:44:46 UTC (rev 116134)
@@ -35,6 +35,7 @@
 from webkitpy.layout_tests.port.server_process import ServerProcess
 from webkitpy.layout_tests.port.webkit import WebKitDriver, WebKitPort
 from webkitpy.layout_tests.port.pulseaudio_sanitizer import PulseAudioSanitizer
+from webkitpy.layout_tests.port.xvfbdriver import XvfbDriver
 from webkitpy.common.system.executive import Executive
 
 
@@ -81,7 +82,7 @@
         return "--gtk"
 
     def _driver_class(self):
-        return GtkDriver
+        return XvfbDriver
 
     def setup_test_run(self):
         self._unload_pulseaudio_module()

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py (116133 => 116134)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py	2012-05-04 18:42:11 UTC (rev 116133)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/qt.py	2012-05-04 18:44:46 UTC (rev 116134)
@@ -38,8 +38,8 @@
 from webkitpy.common.memoized import memoized
 from webkitpy.layout_tests.models.test_configuration import TestConfiguration
 from webkitpy.layout_tests.port.webkit import WebKitPort
+from webkitpy.layout_tests.port.xvfbdriver import XvfbDriver
 
-
 _log = logging.getLogger(__name__)
 
 
@@ -81,6 +81,9 @@
         # The Qt port builds DRT as part of the main build step
         return True
 
+    def _driver_class(self):
+        return XvfbDriver
+
     def _path_to_driver(self):
         return self._build_path('bin/%s' % self.driver_name())
 

Added: trunk/Tools/Scripts/webkitpy/layout_tests/port/xvfbdriver.py (0 => 116134)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/xvfbdriver.py	                        (rev 0)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/xvfbdriver.py	2012-05-04 18:44:46 UTC (rev 116134)
@@ -0,0 +1,76 @@
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the Google name nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import logging
+import os
+import signal
+import subprocess
+
+from webkitpy.layout_tests.port.server_process import ServerProcess
+from webkitpy.layout_tests.port.webkit import WebKitDriver
+from webkitpy.common.system.executive import Executive
+
+_log = logging.getLogger(__name__)
+
+
+class XvfbDriver(WebKitDriver):
+    def _start(self, pixel_tests, per_test_args):
+
+        # Collect the number of X servers running already and make
+        # sure our Xvfb process doesn't clash with any of them.
+        def x_filter(process_name):
+            return process_name.find("Xorg") > -1
+
+        running_displays = len(Executive().running_pids(x_filter))
+
+        # Use even displays for pixel tests and odd ones otherwise. When pixel tests are disabled,
+        # DriverProxy creates two drivers, one for normal and the other for ref tests. Both have
+        # the same worker number, so this prevents them from using the same Xvfb instance.
+        display_id = self._worker_number * 2 + running_displays
+        if self._port.get_option('pixel_tests'):
+            display_id += 1
+        run_xvfb = ["Xvfb", ":%d" % (display_id), "-screen",  "0", "800x600x24", "-nolisten", "tcp"]
+        with open(os.devnull, 'w') as devnull:
+            self._xvfb_process = subprocess.Popen(run_xvfb, stderr=devnull)
+        server_name = self._port.driver_name()
+        environment = self._port.setup_environ_for_server(server_name)
+        # We must do this here because the DISPLAY number depends on _worker_number
+        environment['DISPLAY'] = ":%d" % (display_id)
+        self._crashed_process_name = None
+        self._crashed_pid = None
+        self._server_process = ServerProcess(self._port, server_name, self.cmd_line(pixel_tests, per_test_args), environment)
+
+    def stop(self):
+        WebKitDriver.stop(self)
+        if getattr(self, '_xvfb_process', None):
+            try:
+                self._xvfb_process.terminate()
+                self._xvfb_process.wait()
+            except OSError:
+                _log.warn("The driver is already terminated.")
+            self._xvfb_process = None
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to