Changeset 247550 in webkit


Ignore:
Timestamp:
Jul 17, 2019 6:05:51 PM (5 years ago)
Author:
clopez@igalia.com
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.

Location:
trunk/Tools
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r247545 r247550  
     12019-07-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>
     2
     3        [GTK][WPE][webkitpy] Refactor drivers to use the base driver for setting up the environment and start the drivers.
     4        https://bugs.webkit.org/show_bug.cgi?id=199855
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        The webkitpy drivers for GTK and WPE use their own versions for setting
     9        up the environment and starting/stopping the drivers.
     10        This refactors those drivers to use the base class driver functions.
     11        As a benefit we get some fixes like support for setting the profiler
     12        environment variables, and a simpler code.
     13
     14        * Scripts/webkitpy/port/driver.py:
     15        (Driver._setup_environ_for_driver): This already correctly setups LOCAL_RESOURCE_ROOT and DUMPRENDERTREE_TEMP.
     16        Add the remaining environment variable XDG_CACHE_HOME that is needed for Linux.
     17        * Scripts/webkitpy/port/headlessdriver.py:
     18        (HeadlessDriver._setup_environ_for_test):
     19        * Scripts/webkitpy/port/waylanddriver.py:
     20        (WaylandDriver._setup_environ_for_test):
     21        * Scripts/webkitpy/port/westondriver.py:
     22        (WestonDriver._setup_environ_for_test):
     23        (WestonDriver.stop):
     24        * Scripts/webkitpy/port/westondriver_unittest.py: now mock _test_runner_process_constructor as base driver does.
     25        (WestonDriverTest.make_driver):
     26        * Scripts/webkitpy/port/xorgdriver.py:
     27        (XorgDriver._setup_environ_for_test):
     28        * Scripts/webkitpy/port/xvfbdriver.py: the xvfb binary is started with the port server env
     29        (XvfbDriver._setup_environ_for_test):
     30        * Scripts/webkitpy/port/xvfbdriver_unittest.py: rename the variable to make clearer that it uses the port server env.
     31        (XvfbDriverTest.make_driver):
     32        (XvfbDriverTest.test_start):
     33        (XvfbDriverTest.test_start_arbitrary_worker_number):
     34        * Scripts/webkitpy/w3c/wpt_runner.py:
     35        (main): Start the driver before trying to get its environment to define all the environment variables.
     36        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
     37        (WebDriverTestRunner.__init__): Ditto.
     38        * glib/api_test_runner.py:
     39        (TestRunner._setup_testing_environment): Ditto.
     40
    1412019-07-17  Antoine Quint  <graouts@apple.com>
    242
  • trunk/Tools/Scripts/webkitpy/port/driver.py

    r247514 r247550  
    433433        environment['__XPC_SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS'] = environment['SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS']
    434434
     435        if sys.platform.startswith('linux'):
     436            # Currently on WebKit2, there is no API for setting the application cache directory.
     437            # Each worker should have it's own and it should be cleaned afterwards.
     438            # Set it to inside the temporary folder by prepending XDG_CACHE_HOME with DRIVER_TEMPDIR.
     439            environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
     440
    435441        if self._profiler:
    436442            environment = self._profiler.adjusted_environment(environment)
  • trunk/Tools/Scripts/webkitpy/port/headlessdriver.py

    r247514 r247550  
    3939class HeadlessDriver(Driver):
    4040    def _setup_environ_for_test(self):
    41         driver_environment = self._port.setup_environ_for_server(self._server_name)
     41        driver_environment = super(HeadlessDriver, self)._setup_environ_for_test()
    4242        driver_environment['WPE_USE_HEADLESS_VIEW_BACKEND'] = "1"
    43         driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
    44         if self._driver_tempdir is not None:
    45             driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
    46             driver_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
    4743        return driver_environment
    48 
    49     def _start(self, pixel_tests, per_test_args):
    50         super(HeadlessDriver, self).stop()
    51         self._driver_tempdir = self._port._driver_tempdir(self._target_host)
    52         self._crashed_process_name = None
    53         self._crashed_pid = None
    54         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())
    55         self._server_process.start()
  • trunk/Tools/Scripts/webkitpy/port/waylanddriver.py

    r247514 r247550  
    4646
    4747    def _setup_environ_for_test(self):
    48         driver_environment = self._port.setup_environ_for_server(self._server_name)
     48        driver_environment = super(WaylandDriver, self)._setup_environ_for_test()
    4949        self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_DISPLAY')
    5050        self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_SOCKET')
    5151        driver_environment['GDK_BACKEND'] = 'wayland'
    5252        driver_environment['EGL_PLATFORM'] = 'wayland'
    53         driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
    54         if self._driver_tempdir is not None:
    55             driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
    56             driver_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
    5753        return driver_environment
    58 
    59     def _start(self, pixel_tests, per_test_args):
    60         super(WaylandDriver, self).stop()
    61         self._driver_tempdir = self._port._driver_tempdir(self._target_host)
    62         self._crashed_process_name = None
    63         self._crashed_pid = None
    64         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())
    65         self._server_process.start()
  • trunk/Tools/Scripts/webkitpy/port/westondriver.py

    r247514 r247550  
    5656
    5757    def _setup_environ_for_test(self):
    58         driver_environment = self._port.setup_environ_for_server(self._server_name)
     58        driver_environment = super(WestonDriver, self)._setup_environ_for_test()
    5959        driver_environment['DISPLAY'] = ":%d" % self._xvfbdriver._xvfb_run(driver_environment)
    6060        weston_socket = 'WKTesting-weston-%032x' % random.getrandbits(128)
     
    6868        time.sleep(self._startup_delay_secs)
    6969
    70         driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
    71         if self._driver_tempdir is not None:
    72             # Currently on WebKit2, there is no API for setting the application cache directory.
    73             # Each worker should have its own and it should be cleaned afterwards, when the worker stops.
    74             driver_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
    75             driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
    7670        driver_environment['WAYLAND_DISPLAY'] = weston_socket
    7771        driver_environment['GDK_BACKEND'] = 'wayland'
     
    8074        return driver_environment
    8175
    82     def _start(self, pixel_tests, per_test_args):
    83         self.stop()
    84         self._driver_tempdir = self._port._driver_tempdir(self._target_host)
    85         self._crashed_process_name = None
    86         self._crashed_pid = None
    87         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())
    88         self._server_process.start()
    8976
    9077    def stop(self):
     
    9481            self._weston_process.terminate()
    9582            self._weston_process = None
    96 
  • trunk/Tools/Scripts/webkitpy/port/westondriver_unittest.py

    r247514 r247550  
    5454        port = Port(MockSystemHost(log_executive=True), 'westondrivertestport', options=MockOptions(configuration='Release'))
    5555        port._config.build_directory = lambda configuration: "/mock_build"
    56         port._server_process_constructor = MockServerProcess
     56        port._test_runner_process_constructor = MockServerProcess
    5757
    5858        driver = WestonDriver(port, worker_number=0, pixel_tests=True)
  • trunk/Tools/Scripts/webkitpy/port/xorgdriver.py

    r247514 r247550  
    4646
    4747    def _setup_environ_for_test(self):
    48         server_environment = self._port.setup_environ_for_server(self._server_name)
     48        server_environment = super(XorgDriver, self)._setup_environ_for_test()
    4949        self._port._copy_value_from_environ_if_set(server_environment, 'DISPLAY')
    5050        self._port._copy_value_from_environ_if_set(server_environment, 'XAUTHORITY')
    5151        server_environment['GDK_BACKEND'] = 'x11'
    52         server_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
    53         if self._driver_tempdir is not None:
    54             server_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
    55             # Currently on WebKit2, there is no API for setting the application
    56             # cache directory. Each worker should have it's own and it should be
    57             # cleaned afterwards, so we set it to inside the temporary folder by
    58             # prepending XDG_CACHE_HOME with DUMPRENDERTREE_TEMP.
    59             server_environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
    6052        return server_environment
    61 
    62     def _start(self, pixel_tests, per_test_args):
    63         super(XorgDriver, self).stop()
    64 
    65         self._driver_tempdir = self._port._driver_tempdir(self._target_host)
    66 
    67         self._crashed_process_name = None
    68         self._crashed_pid = None
    69         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())
    70         self._server_process.start()
  • trunk/Tools/Scripts/webkitpy/port/xvfbdriver.py

    r247514 r247550  
    9494
    9595    def _setup_environ_for_test(self):
    96         environment = self._port.setup_environ_for_server(self._server_name)
    97         display_id = self._xvfb_run(environment)
     96        port_server_environment = self._port.setup_environ_for_server(self._server_name)
     97        driver_environment = super(XvfbDriver, self)._setup_environ_for_test()
     98        display_id = self._xvfb_run(port_server_environment)
    9899
    99100        # We must do this here because the DISPLAY number depends on _worker_number
    100         environment['DISPLAY'] = ":%d" % display_id
    101         environment['UNDER_XVFB'] = 'yes'
    102         environment['GDK_BACKEND'] = 'x11'
    103         environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
    104         if self._driver_tempdir is not None:
    105             environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
    106             # Currently on WebKit2, there is no API for setting the application
    107             # cache directory. Each worker should have it's own and it should be
    108             # cleaned afterwards, so we set it to inside the temporary folder by
    109             # prepending XDG_CACHE_HOME with DUMPRENDERTREE_TEMP.
    110             environment['XDG_CACHE_HOME'] = self._port.host.filesystem.join(str(self._driver_tempdir), 'appcache')
    111         return environment
    112 
    113     def _start(self, pixel_tests, per_test_args):
    114         self.stop()
    115         self._driver_tempdir = self._port._driver_tempdir(self._target_host)
    116         self._crashed_process_name = None
    117         self._crashed_pid = None
    118         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())
    119         self._server_process.start()
     101        driver_environment['DISPLAY'] = ":%d" % display_id
     102        driver_environment['UNDER_XVFB'] = 'yes'
     103        driver_environment['GDK_BACKEND'] = 'x11'
     104        driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
     105        return driver_environment
    120106
    121107    def stop(self):
  • trunk/Tools/Scripts/webkitpy/port/xvfbdriver_unittest.py

    r247514 r247550  
    4646        port = Port(MockSystemHost(log_executive=True, executive=executive), 'xvfbdrivertestport', options=MockOptions(configuration='Release'))
    4747        port._config.build_directory = lambda configuration: "/mock-build"
    48         port._server_process_constructor = MockServerProcess
     48        port._test_runner_process_constructor = MockServerProcess
    4949        if xorg_running:
    5050            port._executive._running_pids['Xorg'] = 108
     
    5656        driver._xvfb_read_display_id = lambda x: 1
    5757        driver._xvfb_close_pipe = lambda p: None
    58         driver._environment = port.setup_environ_for_server(port.driver_name())
     58        driver._port_server_environment = port.setup_environ_for_server(port.driver_name())
    5959        return driver
    6060
     
    7373    def test_start(self):
    7474        driver = self.make_driver()
    75         expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._environment)
     75        expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._port_server_environment)
    7676        self.assertDriverStartSuccessful(driver, expected_logs=expected_logs, expected_display=":1")
    7777        self.cleanup_driver(driver)
     
    7979    def test_start_arbitrary_worker_number(self):
    8080        driver = self.make_driver(worker_number=17)
    81         expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._environment)
     81        expected_logs = ("MOCK popen: ['Xvfb', '-displayfd', '4', '-screen', '0', '1024x768x24', '-nolisten', 'tcp'], env=%s\n" % driver._port_server_environment)
    8282        self.assertDriverStartSuccessful(driver, expected_logs=expected_logs, expected_display=":1", pixel_tests=True)
    8383        self.cleanup_driver(driver)
  • trunk/Tools/Scripts/webkitpy/w3c/wpt_runner.py

    r237790 r247550  
    8181    port._display_server = options.display_server
    8282    display_driver = port.create_driver(worker_number=0, no_timeout=True)._make_driver(pixel_tests=False)
     83    display_driver.start(False, [])
    8384    if not display_driver.check_driver(port):
    8485        raise RuntimeError("Failed to check driver %s" % display_driver.__class__.__name__)
  • trunk/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py

    r239540 r247550  
    6161                _log.warning('Test %s does not exist' % test)
    6262
     63        self._display_driver.start(False, [])
    6364        env = self._display_driver._setup_environ_for_test()
    6465        self._runners = [runner_cls(self._port, driver, env, self._expectations) for runner_cls in self.RUNNER_CLASSES]
  • trunk/Tools/glib/api_test_runner.py

    r246189 r247550  
    106106
    107107    def _setup_testing_environment(self):
     108        self._driver.start(False, [])
    108109        self._test_env = self._driver._setup_environ_for_test()
    109110        self._test_env["TEST_WEBKIT_API_WEBKIT2_RESOURCES_PATH"] = common.top_level_path("Tools", "TestWebKitAPI", "Tests", "WebKit")
Note: See TracChangeset for help on using the changeset viewer.