forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add wrapper script for GPU integration tests, supporting sharding.
Add isolates for the new test harness. Once all of the GPU tests are switched to the new harness, the old one, and its wrapper script, will be deleted. BUG=352807 CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_optional_gpu_tests_rel;tryserver.chromium.mac:mac_optional_gpu_tests_rel;tryserver.chromium.win:win_optional_gpu_tests_rel NOTRY=true Review-Url: https://codereview.chromium.org/2062993003 Cr-Commit-Position: refs/heads/master@{#399808}
- Loading branch information
1 parent
ce2c18d
commit 6133d7c
Showing
4 changed files
with
194 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# Copyright (c) 2015 The Chromium Authors. All rights reserved. | ||
# Use of this source code is governed by a BSD-style license that can be | ||
# found in the LICENSE file. | ||
{ | ||
'includes': [ | ||
'../tools/perf/chrome_telemetry_build/telemetry_chrome_test.isolate', | ||
], | ||
'conditions': [ | ||
['OS=="android" or OS=="linux" or OS=="mac" or OS=="win"', { | ||
# This isolate allows any of the GPU tests, including the WebGL | ||
# conformance tests, to be run. However, extra command line arguments | ||
# must be supplied in order to run any one of them. | ||
'variables': { | ||
'files': [ | ||
'../content/test/gpu/', | ||
'../content/test/data/gpu/', | ||
# For GpuProcess.video | ||
'../content/test/data/media/bear.ogv', | ||
# For webgl_conformance | ||
'../third_party/webgl/', | ||
# Other dependencies of the tests and their harness. | ||
'../testing/test_env.py', | ||
'../testing/xvfb.py', | ||
'../testing/scripts/common.py', | ||
'../testing/scripts/run_gpu_integration_test_as_googletest.py', | ||
], | ||
'command': [ | ||
'../testing/scripts/run_gpu_integration_test_as_googletest.py', | ||
'../content/test/gpu/run_gpu_integration_test.py', | ||
], | ||
}, | ||
}], | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
118 changes: 118 additions & 0 deletions
118
testing/scripts/run_gpu_integration_test_as_googletest.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
#!/usr/bin/env python | ||
# Copyright 2015 The Chromium Authors. All rights reserved. | ||
# Use of this source code is governed by a BSD-style license that can be | ||
# found in the LICENSE file. | ||
|
||
"""Runs an isolate bundled Telemetry GPU integration test. | ||
This script attempts to emulate the contract of gtest-style tests | ||
invoked via recipes. The main contract is that the caller passes the | ||
argument: | ||
--isolated-script-test-output=[FILENAME] | ||
json is written to that file in the format produced by | ||
common.parse_common_test_results. | ||
This script is intended to be the base command invoked by the isolate, | ||
followed by a subsequent Python script. It could be generalized to | ||
invoke an arbitrary executable. | ||
""" | ||
|
||
import argparse | ||
import json | ||
import os | ||
import shutil | ||
import sys | ||
import tempfile | ||
import traceback | ||
|
||
import common | ||
|
||
# Add src/testing/ into sys.path for importing xvfb. | ||
sys.path.append(os.path.join(os.path.dirname(__file__), '..')) | ||
import xvfb | ||
|
||
# Unfortunately we need to copy these variables from ../test_env.py. | ||
# Importing it and using its get_sandbox_env breaks test runs on Linux | ||
# (it seems to unset DISPLAY). | ||
CHROME_SANDBOX_ENV = 'CHROME_DEVEL_SANDBOX' | ||
CHROME_SANDBOX_PATH = '/opt/chromium/chrome_sandbox' | ||
|
||
def main(): | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument( | ||
'--isolated-script-test-output', type=str, | ||
required=True) | ||
parser.add_argument('--xvfb', help='Start xvfb.', action='store_true') | ||
args, rest_args = parser.parse_known_args() | ||
xvfb_proc = None | ||
openbox_proc = None | ||
xcompmgr_proc = None | ||
env = os.environ.copy() | ||
# Assume we want to set up the sandbox environment variables all the | ||
# time; doing so is harmless on non-Linux platforms and is needed | ||
# all the time on Linux. | ||
env[CHROME_SANDBOX_ENV] = CHROME_SANDBOX_PATH | ||
if args.xvfb and xvfb.should_start_xvfb(env): | ||
xvfb_proc, openbox_proc, xcompmgr_proc = xvfb.start_xvfb(env=env, | ||
build_dir='.') | ||
assert xvfb_proc and openbox_proc and xcompmgr_proc, 'Failed to start xvfb' | ||
# Compatibility with gtest-based sharding. | ||
total_shards = None | ||
shard_index = None | ||
if 'GTEST_TOTAL_SHARDS' in env: | ||
total_shards = int(env['GTEST_TOTAL_SHARDS']) | ||
del env['GTEST_TOTAL_SHARDS'] | ||
if 'GTEST_SHARD_INDEX' in env: | ||
shard_index = int(env['GTEST_SHARD_INDEX']) | ||
del env['GTEST_SHARD_INDEX'] | ||
sharding_args = [] | ||
if total_shards is not None and shard_index is not None: | ||
sharding_args = [ | ||
'--total-shards=%d' % total_shards, | ||
'--shard-index=%d' % shard_index | ||
] | ||
try: | ||
valid = True | ||
rc = 0 | ||
try: | ||
rc = common.run_command([sys.executable] + rest_args + sharding_args + [ | ||
'--write-abbreviated-json-results-to', args.isolated_script_test_output, | ||
], env=env) | ||
valid = bool(rc == 0) | ||
except Exception: | ||
traceback.print_exc() | ||
valid = False | ||
|
||
if not valid: | ||
failures = ['(entire test suite)'] | ||
with open(args.isolated_script_test_output, 'w') as fp: | ||
json.dump({ | ||
'valid': valid, | ||
'failures': failures, | ||
}, fp) | ||
|
||
return rc | ||
|
||
finally: | ||
xvfb.kill(xvfb_proc) | ||
xvfb.kill(openbox_proc) | ||
xvfb.kill(xcompmgr_proc) | ||
|
||
|
||
# This is not really a "script test" so does not need to manually add | ||
# any additional compile targets. | ||
def main_compile_targets(args): | ||
json.dump([], args.output) | ||
|
||
|
||
if __name__ == '__main__': | ||
# Conform minimally to the protocol defined by ScriptTest. | ||
if 'compile_targets' in sys.argv: | ||
funcs = { | ||
'run': None, | ||
'compile_targets': main_compile_targets, | ||
} | ||
sys.exit(common.run_script(sys.argv[1:], funcs)) | ||
sys.exit(main()) |