Title: [247550] trunk/Tools
Revision
247550
Author
clo...@igalia.com
Date
2019-07-17 18:05:51 -0700 (Wed, 17 Jul 2019)

Log Message

[GTK][WPE][webkitpy] Refactor drivers to use the base driver for setting up the environment and start the drivers.
https://bugs.webkit.org/show_bug.cgi?id=199855

Reviewed by Michael Catanzaro.

The webkitpy drivers for GTK and WPE use their own versions for setting
up the environment and starting/stopping the drivers.
This refactors those drivers to use the base class driver functions.
As a benefit we get some fixes like support for setting the profiler
environment variables, and a simpler code.

* Scripts/webkitpy/port/driver.py:
(Driver._setup_environ_for_driver): This already correctly setups LOCAL_RESOURCE_ROOT and DUMPRENDERTREE_TEMP.
Add the remaining environment variable XDG_CACHE_HOME that is needed for Linux.
* Scripts/webkitpy/port/headlessdriver.py:
(HeadlessDriver._setup_environ_for_test):
* Scripts/webkitpy/port/waylanddriver.py:
(WaylandDriver._setup_environ_for_test):
* Scripts/webkitpy/port/westondriver.py:
(WestonDriver._setup_environ_for_test):
(WestonDriver.stop):
* Scripts/webkitpy/port/westondriver_unittest.py: now mock _test_runner_process_constructor as base driver does.
(WestonDriverTest.make_driver):
* Scripts/webkitpy/port/xorgdriver.py:
(XorgDriver._setup_environ_for_test):
* Scripts/webkitpy/port/xvfbdriver.py: the xvfb binary is started with the port server env
(XvfbDriver._setup_environ_for_test):
* Scripts/webkitpy/port/xvfbdriver_unittest.py: rename the variable to make clearer that it uses the port server env.
(XvfbDriverTest.make_driver):
(XvfbDriverTest.test_start):
(XvfbDriverTest.test_start_arbitrary_worker_number):
* Scripts/webkitpy/w3c/wpt_runner.py:
(main): Start the driver before trying to get its environment to define all the environment variables.
* Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
(WebDriverTestRunner.__init__): Ditto.
* glib/api_test_runner.py:
(TestRunner._setup_testing_environment): Ditto.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (247549 => 247550)


--- trunk/Tools/ChangeLog	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/ChangeLog	2019-07-18 01:05:51 UTC (rev 247550)
@@ -1,3 +1,43 @@
+2019-07-17  Carlos Alberto Lopez Perez  <clo...@igalia.com>
+
+        [GTK][WPE][webkitpy] Refactor drivers to use the base driver for setting up the environment and start the drivers.
+        https://bugs.webkit.org/show_bug.cgi?id=199855
+
+        Reviewed by Michael Catanzaro.
+
+        The webkitpy drivers for GTK and WPE use their own versions for setting
+        up the environment and starting/stopping the drivers.
+        This refactors those drivers to use the base class driver functions.
+        As a benefit we get some fixes like support for setting the profiler
+        environment variables, and a simpler code.
+
+        * Scripts/webkitpy/port/driver.py:
+        (Driver._setup_environ_for_driver): This already correctly setups LOCAL_RESOURCE_ROOT and DUMPRENDERTREE_TEMP.
+        Add the remaining environment variable XDG_CACHE_HOME that is needed for Linux.
+        * Scripts/webkitpy/port/headlessdriver.py:
+        (HeadlessDriver._setup_environ_for_test):
+        * Scripts/webkitpy/port/waylanddriver.py:
+        (WaylandDriver._setup_environ_for_test):
+        * Scripts/webkitpy/port/westondriver.py:
+        (WestonDriver._setup_environ_for_test):
+        (WestonDriver.stop):
+        * Scripts/webkitpy/port/westondriver_unittest.py: now mock _test_runner_process_constructor as base driver does.
+        (WestonDriverTest.make_driver):
+        * Scripts/webkitpy/port/xorgdriver.py:
+        (XorgDriver._setup_environ_for_test):
+        * Scripts/webkitpy/port/xvfbdriver.py: the xvfb binary is started with the port server env
+        (XvfbDriver._setup_environ_for_test):
+        * Scripts/webkitpy/port/xvfbdriver_unittest.py: rename the variable to make clearer that it uses the port server env.
+        (XvfbDriverTest.make_driver):
+        (XvfbDriverTest.test_start):
+        (XvfbDriverTest.test_start_arbitrary_worker_number):
+        * Scripts/webkitpy/w3c/wpt_runner.py:
+        (main): Start the driver before trying to get its environment to define all the environment variables.
+        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
+        (WebDriverTestRunner.__init__): Ditto.
+        * glib/api_test_runner.py:
+        (TestRunner._setup_testing_environment): Ditto.
+
 2019-07-17  Antoine Quint  <grao...@apple.com>
 
         Disable Pointer Events prior to watchOS 6

Modified: trunk/Tools/Scripts/webkitpy/port/driver.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/driver.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/driver.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -432,6 +432,12 @@
         environment['SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS'] = os.path.realpath(environment['DUMPRENDERTREE_TEMP'])
         environment['__XPC_SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS'] = environment['SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS']
 
+        if sys.platform.startswith('linux'):
+            # Currently on WebKit2, there is no API for setting the application cache directory.
+            # Each worker should have it's own and it should be cleaned afterwards.
+            # Set it to inside the temporary folder by prepending XDG_CACHE_HOME with DRIVER_TEMPDIR.
+            environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
+
         if self._profiler:
             environment = self._profiler.adjusted_environment(environment)
         return environment

Modified: trunk/Tools/Scripts/webkitpy/port/headlessdriver.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/headlessdriver.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/headlessdriver.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -38,18 +38,6 @@
 
 class HeadlessDriver(Driver):
     def _setup_environ_for_test(self):
-        driver_environment = self._port.setup_environ_for_server(self._server_name)
+        driver_environment = super(HeadlessDriver, self)._setup_environ_for_test()
         driver_environment['WPE_USE_HEADLESS_VIEW_BACKEND'] = "1"
-        driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
-        if self._driver_tempdir is not None:
-            driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
-            driver_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
         return driver_environment
-
-    def _start(self, pixel_tests, per_test_args):
-        super(HeadlessDriver, self).stop()
-        self._driver_tempdir = self._port._driver_tempdir(self._target_host)
-        self._crashed_process_name = None
-        self._crashed_pid = None
-        self._server_process = self._port._server_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), self._setup_environ_for_test())
-        self._server_process.start()

Modified: trunk/Tools/Scripts/webkitpy/port/waylanddriver.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/waylanddriver.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/waylanddriver.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -45,21 +45,9 @@
         return True
 
     def _setup_environ_for_test(self):
-        driver_environment = self._port.setup_environ_for_server(self._server_name)
+        driver_environment = super(WaylandDriver, self)._setup_environ_for_test()
         self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_DISPLAY')
         self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_SOCKET')
         driver_environment['GDK_BACKEND'] = 'wayland'
         driver_environment['EGL_PLATFORM'] = 'wayland'
-        driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
-        if self._driver_tempdir is not None:
-            driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
-            driver_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
         return driver_environment
-
-    def _start(self, pixel_tests, per_test_args):
-        super(WaylandDriver, self).stop()
-        self._driver_tempdir = self._port._driver_tempdir(self._target_host)
-        self._crashed_process_name = None
-        self._crashed_pid = None
-        self._server_process = self._port._server_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), self._setup_environ_for_test())
-        self._server_process.start()

Modified: trunk/Tools/Scripts/webkitpy/port/westondriver.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/westondriver.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/westondriver.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -55,7 +55,7 @@
         self._xvfbdriver = XvfbDriver(*args, **kwargs)
 
     def _setup_environ_for_test(self):
-        driver_environment = self._port.setup_environ_for_server(self._server_name)
+        driver_environment = super(WestonDriver, self)._setup_environ_for_test()
         driver_environment['DISPLAY'] = ":%d" % self._xvfbdriver._xvfb_run(driver_environment)
         weston_socket = 'WKTesting-weston-%032x' % random.getrandbits(128)
         weston_command = ['weston', '--socket=%s' % weston_socket, '--width=1024', '--height=768', '--use-pixman']
@@ -67,12 +67,6 @@
         # Give Weston a bit of time to set itself up.
         time.sleep(self._startup_delay_secs)
 
-        driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
-        if self._driver_tempdir is not None:
-            # Currently on WebKit2, there is no API for setting the application cache directory.
-            # Each worker should have its own and it should be cleaned afterwards, when the worker stops.
-            driver_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
-            driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
         driver_environment['WAYLAND_DISPLAY'] = weston_socket
         driver_environment['GDK_BACKEND'] = 'wayland'
         if driver_environment.get('DISPLAY'):
@@ -79,13 +73,6 @@
             del driver_environment['DISPLAY']
         return driver_environment
 
-    def _start(self, pixel_tests, per_test_args):
-        self.stop()
-        self._driver_tempdir = self._port._driver_tempdir(self._target_host)
-        self._crashed_process_name = None
-        self._crashed_pid = None
-        self._server_process = self._port._server_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), self._setup_environ_for_test())
-        self._server_process.start()
 
     def stop(self):
         super(WestonDriver, self).stop()
@@ -93,4 +80,3 @@
             # The Weston process is terminated instead of killed, giving the Weston a chance to clean up after itself.
             self._weston_process.terminate()
             self._weston_process = None
-

Modified: trunk/Tools/Scripts/webkitpy/port/westondriver_unittest.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/westondriver_unittest.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/westondriver_unittest.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -53,7 +53,7 @@
     def make_driver(self):
         port = Port(MockSystemHost(log_executive=True), 'westondrivertestport', options=MockOptions(configuration='Release'))
         port._config.build_directory = lambda configuration: "/mock_build"
-        port._server_process_constructor = MockServerProcess
+        port._test_runner_process_constructor = MockServerProcess
 
         driver = WestonDriver(port, worker_number=0, pixel_tests=True)
         driver._startup_delay_secs = 0

Modified: trunk/Tools/Scripts/webkitpy/port/xorgdriver.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/xorgdriver.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/xorgdriver.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -45,26 +45,8 @@
         return True
 
     def _setup_environ_for_test(self):
-        server_environment = self._port.setup_environ_for_server(self._server_name)
+        server_environment = super(XorgDriver, self)._setup_environ_for_test()
         self._port._copy_value_from_environ_if_set(server_environment, 'DISPLAY')
         self._port._copy_value_from_environ_if_set(server_environment, 'XAUTHORITY')
         server_environment['GDK_BACKEND'] = 'x11'
-        server_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
-        if self._driver_tempdir is not None:
-            server_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
-            # Currently on WebKit2, there is no API for setting the application
-            # cache directory. Each worker should have it's own and it should be
-            # cleaned afterwards, so we set it to inside the temporary folder by
-            # prepending XDG_CACHE_HOME with DUMPRENDERTREE_TEMP.
-            server_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
         return server_environment
-
-    def _start(self, pixel_tests, per_test_args):
-        super(XorgDriver, self).stop()
-
-        self._driver_tempdir = self._port._driver_tempdir(self._target_host)
-
-        self._crashed_process_name = None
-        self._crashed_pid = None
-        self._server_process = self._port._server_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), self._setup_environ_for_test())
-        self._server_process.start()

Modified: trunk/Tools/Scripts/webkitpy/port/xvfbdriver.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/xvfbdriver.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/xvfbdriver.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -93,31 +93,17 @@
         return os.environ.get('XVFB_SCREEN_DEPTH', '24')
 
     def _setup_environ_for_test(self):
-        environment = self._port.setup_environ_for_server(self._server_name)
-        display_id = self._xvfb_run(environment)
+        port_server_environment = self._port.setup_environ_for_server(self._server_name)
+        driver_environment = super(XvfbDriver, self)._setup_environ_for_test()
+        display_id = self._xvfb_run(port_server_environment)
 
         # We must do this here because the DISPLAY number depends on _worker_number
-        environment['DISPLAY'] = ":%d" % display_id
-        environment['UNDER_XVFB'] = 'yes'
-        environment['GDK_BACKEND'] = 'x11'
-        environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
-        if self._driver_tempdir is not None:
-            environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
-            # Currently on WebKit2, there is no API for setting the application
-            # cache directory. Each worker should have it's own and it should be
-            # cleaned afterwards, so we set it to inside the temporary folder by
-            # prepending XDG_CACHE_HOME with DUMPRENDERTREE_TEMP.
-            environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
-        return environment
+        driver_environment['DISPLAY'] = ":%d" % display_id
+        driver_environment['UNDER_XVFB'] = 'yes'
+        driver_environment['GDK_BACKEND'] = 'x11'
+        driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
+        return driver_environment
 
-    def _start(self, pixel_tests, per_test_args):
-        self.stop()
-        self._driver_tempdir = self._port._driver_tempdir(self._target_host)
-        self._crashed_process_name = None
-        self._crashed_pid = None
-        self._server_process = self._port._server_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), self._setup_environ_for_test())
-        self._server_process.start()
-
     def stop(self):
         super(XvfbDriver, self).stop()
         if getattr(self, '_xvfb_process', None):

Modified: trunk/Tools/Scripts/webkitpy/port/xvfbdriver_unittest.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/port/xvfbdriver_unittest.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/port/xvfbdriver_unittest.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -45,7 +45,7 @@
     def make_driver(self, worker_number=0, xorg_running=False, executive=None):
         port = Port(MockSystemHost(log_executive=True, executive=executive), 'xvfbdrivertestport', options=MockOptions(configuration='Release'))
         port._config.build_directory = lambda configuration: "/mock-build"
-        port._server_process_constructor = MockServerProcess
+        port._test_runner_process_constructor = MockServerProcess
         if xorg_running:
             port._executive._running_pids['Xorg'] = 108
 
@@ -55,7 +55,7 @@
         driver._xvfb_pipe = lambda: (3, 4)
         driver._xvfb_read_display_id = lambda x: 1
         driver._xvfb_close_pipe = lambda p: None
-        driver._environment = port.setup_environ_for_server(port.driver_name())
+        driver._port_server_environment = port.setup_environ_for_server(port.driver_name())
         return driver
 
     def cleanup_driver(self, driver):
@@ -72,13 +72,13 @@
 
     def test_start(self):
         driver = self.make_driver()
-        expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._environment)
+        expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._port_server_environment)
         self.assertDriverStartSuccessful(driver, expected_logs=expected_logs, expected_display=":1")
         self.cleanup_driver(driver)
 
     def test_start_arbitrary_worker_number(self):
         driver = self.make_driver(worker_number=17)
-        expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._environment)
+        expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._port_server_environment)
         self.assertDriverStartSuccessful(driver, expected_logs=expected_logs, expected_display=":1", pixel_tests=True)
         self.cleanup_driver(driver)
 

Modified: trunk/Tools/Scripts/webkitpy/w3c/wpt_runner.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/w3c/wpt_runner.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/w3c/wpt_runner.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -80,6 +80,7 @@
     # Create the Port-specific driver.
     port._display_server = options.display_server
     display_driver = port.create_driver(worker_number=0, no_timeout=True)._make_driver(pixel_tests=False)
+    display_driver.start(False, [])
     if not display_driver.check_driver(port):
         raise RuntimeError("Failed to check driver %s" % display_driver.__class__.__name__)
     os.environ.update(display_driver._setup_environ_for_test())

Modified: trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py (247549 => 247550)


--- trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -60,6 +60,7 @@
             if not os.path.isfile(os.path.join(self._tests_dir, test)):
                 _log.warning('Test %s does not exist' % test)
 
+        self._display_driver.start(False, [])
         env = self._display_driver._setup_environ_for_test()
         self._runners = [runner_cls(self._port, driver, env, self._expectations) for runner_cls in self.RUNNER_CLASSES]
 

Modified: trunk/Tools/glib/api_test_runner.py (247549 => 247550)


--- trunk/Tools/glib/api_test_runner.py	2019-07-18 00:36:39 UTC (rev 247549)
+++ trunk/Tools/glib/api_test_runner.py	2019-07-18 01:05:51 UTC (rev 247550)
@@ -105,6 +105,7 @@
         return driver
 
     def _setup_testing_environment(self):
+        self._driver.start(False, [])
         self._test_env = self._driver._setup_environ_for_test()
         self._test_env["TEST_WEBKIT_API_WEBKIT2_RESOURCES_PATH"] = common.top_level_path("Tools", "TestWebKitAPI", "Tests", "WebKit")
         self._test_env["TEST_WEBKIT_API_WEBKIT2_INJECTED_BUNDLE_PATH"] = common.library_build_path()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to