diff options
Diffstat (limited to 'testing')
-rw-r--r-- | testing/buildbot/gn_isolate_map.pyl | 8 | ||||
-rwxr-xr-x | testing/buildbot/manage.py | 1 | ||||
-rwxr-xr-x | testing/scripts/run_telemetry_benchmark_as_googletest.py | 99 |
3 files changed, 108 insertions, 0 deletions
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index 101404a..135a2f3 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl @@ -387,6 +387,14 @@ "type": "gpu_browser_test", "gtest_filter": "CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*", }, + "telemetry_gpu_new_test": { + "label": "//chrome/test:telemetry_gpu_new_test", + "type": "script", + "script": "//testing/scripts/run_telemetry_benchmark_as_googletest.py", + "args": [ + "../../content/test/gpu/run_gpu_test.py", + ], + }, "telemetry_gpu_test": { "label": "//chrome/test:telemetry_gpu_test", "type": "script", diff --git a/testing/buildbot/manage.py b/testing/buildbot/manage.py index 3c51341..7794122 100755 --- a/testing/buildbot/manage.py +++ b/testing/buildbot/manage.py @@ -73,6 +73,7 @@ SKIP_GN_ISOLATE_MAP_TARGETS = { 'gl_unittests', 'gles2_conform_test', 'tab_capture_end2end_tests', + 'telemetry_gpu_new_test', 'telemetry_gpu_test', 'telemetry_gpu_unittests', 'telemetry_perf_unittests', diff --git a/testing/scripts/run_telemetry_benchmark_as_googletest.py b/testing/scripts/run_telemetry_benchmark_as_googletest.py new file mode 100755 index 0000000..c232bef --- /dev/null +++ b/testing/scripts/run_telemetry_benchmark_as_googletest.py @@ -0,0 +1,99 @@ +#!/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 benchmark. + +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 + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + '--isolated-script-test-output', type=argparse.FileType('w'), + 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 + env = os.environ.copy() + if args.xvfb and xvfb.should_start_xvfb(env): + xvfb_proc, openbox_proc = xvfb.start_xvfb(env=env, build_dir='.') + assert xvfb_proc and openbox_proc, 'Failed to start xvfb' + try: + tempfile_dir = tempfile.mkdtemp('telemetry') + valid = True + failures = [] + try: + rc = common.run_command([sys.executable] + rest_args + [ + '--output-dir', tempfile_dir, + '--output-format=json' + ], env=env) + tempfile_name = os.path.join(tempfile_dir, 'results.json') + with open(tempfile_name) as f: + results = json.load(f) + for value in results['per_page_values']: + if value['type'] == 'failure': + failures.append(results['pages'][str(value['page_id'])]['name']) + valid = bool(rc == 0 or failures) + except Exception: + traceback.print_exc() + valid = False + finally: + shutil.rmtree(tempfile_dir) + + if not valid and not failures: + failures = ['(entire test suite)'] + json.dump({ + 'valid': valid, + 'failures': failures, + }, args.isolated_script_test_output) + return rc + + finally: + xvfb.kill(xvfb_proc) + xvfb.kill(openbox_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()) |