From b2a21d449aded842d7abfd9c5b45692c224550f1 Mon Sep 17 00:00:00 2001 From: "ojan@chromium.org" Date: Tue, 31 Jan 2012 01:04:43 +0000 Subject: [PATCH] run-webkit-tests calls out to webkit-build-directory twice https://bugs.webkit.org/show_bug.cgi?id=77248 Reviewed by Dirk Pranke. This reduces to calls to webkit-build-directory to one call and saves 500ms for run-webkit-tests over a single file. * Scripts/webkit-build-directory: If called with no arguments, print out both the top-level directory and the configuration directory. * Scripts/webkit-build-directory: * Scripts/webkitpy/layout_tests/port/config.py: (Config.build_directory): When called with no arguments, get and cache both the top-level and configuration directories. * Scripts/webkitpy/layout_tests/port/config_standalone.py: (main): * Scripts/webkitpy/layout_tests/port/config_unittest.py: (ConfigTest.assert_configuration): (ConfigTest.test_build_directory.mock_webkit_build_directory): (ConfigTest.test_build_directory): (ConfigTest.test_default_configuration__notfound): * Scripts/webkitpy/layout_tests/port/webkit.py: (WebKitPort._build_path): Cache the root directory in the options object so that other users of the options object don't need to call out to webkit-build-directory. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@106302 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Tools/ChangeLog | 31 ++++++++++++++++++++++ Tools/Scripts/webkit-build-directory | 7 +++-- Tools/Scripts/webkitpy/layout_tests/port/config.py | 13 ++++++--- .../layout_tests/port/config_standalone.py | 2 +- .../webkitpy/layout_tests/port/config_unittest.py | 13 +++++---- Tools/Scripts/webkitpy/layout_tests/port/webkit.py | 3 +++ 6 files changed, 58 insertions(+), 11 deletions(-) diff --git a/Tools/ChangeLog b/Tools/ChangeLog index 48bc56fd..421f95d 100644 --- a/Tools/ChangeLog +++ b/Tools/ChangeLog @@ -1,5 +1,36 @@ 2012-01-30 Ojan Vafai + run-webkit-tests calls out to webkit-build-directory twice + https://bugs.webkit.org/show_bug.cgi?id=77248 + + Reviewed by Dirk Pranke. + + This reduces to calls to webkit-build-directory to one call and + saves 500ms for run-webkit-tests over a single file. + + * Scripts/webkit-build-directory: + If called with no arguments, print out both the top-level directory and the + configuration directory. + + * Scripts/webkit-build-directory: + * Scripts/webkitpy/layout_tests/port/config.py: + (Config.build_directory): + When called with no arguments, get and cache both the top-level and configuration directories. + + * Scripts/webkitpy/layout_tests/port/config_standalone.py: + (main): + * Scripts/webkitpy/layout_tests/port/config_unittest.py: + (ConfigTest.assert_configuration): + (ConfigTest.test_build_directory.mock_webkit_build_directory): + (ConfigTest.test_build_directory): + (ConfigTest.test_default_configuration__notfound): + * Scripts/webkitpy/layout_tests/port/webkit.py: + (WebKitPort._build_path): + Cache the root directory in the options object so that other users + of the options object don't need to call out to webkit-build-directory. + +2012-01-30 Ojan Vafai + Parsing test_expecations.txt + Skipped lists takes too long https://bugs.webkit.org/show_bug.cgi?id=77059 diff --git a/Tools/Scripts/webkit-build-directory b/Tools/Scripts/webkit-build-directory index bf7d66d..dab1d66 100755 --- a/Tools/Scripts/webkit-build-directory +++ b/Tools/Scripts/webkit-build-directory @@ -57,12 +57,15 @@ my $getOptionsResult = GetOptions( 'help|h' => \$showHelp, ); -if (!$getOptionsResult || $showHelp || (!$showConfigurationDirectory && !$showTopLevelDirectory)) { +if (!$getOptionsResult || $showHelp) { print STDERR $usage; exit 1; } -if ($showTopLevelDirectory) { +if (!$showConfigurationDirectory && !$showTopLevelDirectory) { + print baseProductDir() . "\n"; + print productDir() . "\n"; +} elsif ($showTopLevelDirectory) { print baseProductDir() . "\n"; } else { print productDir() . "\n"; diff --git a/Tools/Scripts/webkitpy/layout_tests/port/config.py b/Tools/Scripts/webkitpy/layout_tests/port/config.py index c552907..6a1045f 100644 --- a/Tools/Scripts/webkitpy/layout_tests/port/config.py +++ b/Tools/Scripts/webkitpy/layout_tests/port/config.py @@ -74,12 +74,19 @@ class Config(object): flags = ["--configuration", self.flag_for_configuration(configuration)] else: configuration = "" - flags = ["--top-level"] + flags = [] if not self._build_directories.get(configuration): args = ["perl", self.script_path("webkit-build-directory")] + flags - self._build_directories[configuration] = ( - self._executive.run_command(args, cwd=self.webkit_base_dir()).rstrip()) + output = self._executive.run_command(args, cwd=self.webkit_base_dir()).rstrip() + parts = output.split("\n") + self._build_directories[configuration] = parts[0] + + if len(parts) == 2: + default_configuration = parts[1][len(parts[0]):] + if default_configuration.startswith("/"): + default_configuration = default_configuration[1:] + self._build_directories[default_configuration] = parts[1] return self._build_directories[configuration] diff --git a/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py b/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py index 3dec3b9..5b04831 100644 --- a/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py +++ b/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py @@ -57,7 +57,7 @@ def main(argv=None): argv = sys.argv if len(argv) == 3 and argv[1] == '--mock': - e = executive_mock.MockExecutive2(output='foo') + e = executive_mock.MockExecutive2(output='foo\nfoo/%s' % argv[2]) fs = filesystem_mock.MockFileSystem({'foo/Configuration': argv[2]}) else: e = executive.Executive() diff --git a/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py index e557eef..51a7798 100644 --- a/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py +++ b/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py @@ -51,18 +51,21 @@ class ConfigTest(unittest.TestCase): def assert_configuration(self, contents, expected): # This tests that a configuration file containing # _contents_ ends up being interpreted as _expected_. - c = self.make_config('foo', {'foo/Configuration': contents}) + output = 'foo\nfoo/%s' % contents + c = self.make_config(output, {'foo/Configuration': contents}) self.assertEqual(c.default_configuration(), expected) def test_build_directory(self): # --top-level def mock_webkit_build_directory(arg_list): if arg_list == ['--top-level']: - return '/WebKitBuild' + return '/WebKitBuild/' elif arg_list == ['--configuration', '--debug']: return '/WebKitBuild/Debug' elif arg_list == ['--configuration', '--release']: return '/WebKitBuild/Release' + elif arg_list == []: + return '/WebKitBuild/\n/WebKitBuild//Debug\n' return 'Error' def mock_run_command(arg_list): @@ -71,10 +74,10 @@ class ConfigTest(unittest.TestCase): return 'Error' c = self.make_config(run_command_fn=mock_run_command) - self.assertTrue(c.build_directory(None).endswith('WebKitBuild')) + self.assertEqual(c.build_directory(None), '/WebKitBuild/') # Test again to check caching - self.assertTrue(c.build_directory(None).endswith('WebKitBuild')) + self.assertEqual(c.build_directory(None), '/WebKitBuild/') # Test other values self.assertTrue(c.build_directory('Release').endswith('/Release')) @@ -95,7 +98,7 @@ class ConfigTest(unittest.TestCase): def test_default_configuration__notfound(self): # This tests what happens if the default configuration file doesn't exist. - c = self.make_config(output='foo', files={'foo/Configuration': None}) + c = self.make_config(output='foo\nfoo/Release', files={'foo/Configuration': None}) self.assertEqual(c.default_configuration(), "Release") def test_default_configuration__unknown(self): diff --git a/Tools/Scripts/webkitpy/layout_tests/port/webkit.py b/Tools/Scripts/webkitpy/layout_tests/port/webkit.py index 41a152d..7918066 100644 --- a/Tools/Scripts/webkitpy/layout_tests/port/webkit.py +++ b/Tools/Scripts/webkitpy/layout_tests/port/webkit.py @@ -380,6 +380,9 @@ class WebKitPort(Port): build_directory = self.get_option('root') if not build_directory: build_directory = self._config.build_directory(self.get_option('configuration')) + # Set --root here Since this modifies the options object used by the worker subprocesses, + # it avoids the slow call out to build_directory in each subprocess. + self.set_option_default('root', build_directory) return self._filesystem.join(build_directory, *comps) def _path_to_driver(self): -- 2.7.4