Commit 6cecb3eb authored by machenbach's avatar machenbach Committed by Commit bot

[Swarming] Speed up test262 upload/download.

This experimentally implements taring/untaring the test data
for test262 on the v8-side before test isolation and when
running the tests.

It archives on demand only if the tar is outdated compared
to the contained files. This comes with a cost of ~1s extra
to run gyp on linux and ~6s extra on windows. Ninja is
lightning fast afterwards in detecting changes. Also, we
archive only when test_isolation_mode is set and when
the test262_run target is required.

The archiving itself costs ~30s on all platforms. But as the
files will change seldom this shouldn't have a big impact.

Extraction on the test runner side is below 2s on mac and
linux. The speedup is enormous. Around 5 minutes were spent
on download on swarming slaves before, which is now only
a few seconds. So total test time for release (no variants),
e.g. goes from 8 to 3 minutes.

BUG=chromium:535160
LOG=n

Review URL: https://codereview.chromium.org/1713993002

Cr-Commit-Position: refs/heads/master@{#34155}
parent 7f5c864a
......@@ -59,6 +59,7 @@ shell_g
/test/promises-aplus/sinon
/test/simdjs/data
/test/test262/data
/test/test262/data.tar
/testing/gmock
/testing/gtest
/third_party
......
#!/usr/bin/env python
# Copyright 2016 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import tarfile
os.chdir(os.path.dirname(os.path.abspath(__file__)))
def filter_git(tar_info):
if tar_info.name.startswith(os.path.join('data', '.git')):
return None
else:
return tar_info
with tarfile.open('data.tar', 'w') as tar:
tar.add('data', filter=filter_git)
#!/usr/bin/env python
# Copyright 2016 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import tarfile
os.chdir(os.path.dirname(os.path.abspath(__file__)))
for root, dirs, files in os.walk("data"):
dirs[:] = [d for d in dirs if not d.endswith('.git')]
for name in files:
# These names are for gyp, which expects slashes on all platforms.
print('/'.join(root.split(os.sep) + [name]))
......@@ -19,6 +19,14 @@
'sources': [
'test262.isolate',
],
'actions': [
{
'action_name': 'archive_test262',
'inputs': ['archive.py', '<!@(python list.py)'],
'outputs': ['data.tar'],
'action': ['python', 'archive.py'],
},
],
},
],
}],
......
......@@ -4,11 +4,14 @@
{
'variables': {
'files': [
'./',
'data.tar',
'harness-adapt.js',
'test262.status',
'testcfg.py',
],
},
'includes': [
'../../src/d8.isolate',
'../../tools/testrunner/testrunner.isolate',
],
}
\ No newline at end of file
}
......@@ -39,6 +39,8 @@ from testrunner.local import testsuite
from testrunner.local import utils
from testrunner.objects import testcase
ARCHIVE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data.tar")
TEST_262_HARNESS_FILES = ["sta.js", "assert.js"]
TEST_262_SUITE_PATH = ["data", "test"]
......@@ -199,6 +201,11 @@ class Test262TestSuite(testsuite.TestSuite):
for f in archive_files:
os.remove(os.path.join(self.root, f))
print "Extracting archive..."
tar = tarfile.open(ARCHIVE)
tar.extractall(path=os.path.dirname(ARCHIVE))
tar.close()
def GetSuite(name, root):
return Test262TestSuite(name, root)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment