summaryrefslogtreecommitdiffstats
path: root/testing
diff options
context:
space:
mode:
Diffstat (limited to 'testing')
-rw-r--r--testing/buildbot/gn_isolate_map.pyl8
-rwxr-xr-xtesting/buildbot/manage.py1
-rwxr-xr-xtesting/scripts/run_telemetry_benchmark_as_googletest.py99
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())