run_perf_tests: Add option to find test binary in out dir.

This allows us to run the perf test runner script from any
directory and use that as a basis to find the most recently
modified test suite binary. This saves us from chdir()ing into
test directory every time we want to run a test suite.

Ideally this should move into the test utils folder to be used
by the gold tests script as well.

Bug: angleproject:7671
Change-Id: Iead98670bb5f7627ae32f7ac41b4ebcee2726841
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3904427
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
This commit is contained in:
Jamie Madill 2022-09-19 10:42:43 -04:00 коммит произвёл Angle LUCI CQ
Родитель adba8136ff
Коммит 65d3d0f631
2 изменённых файлов: 44 добавлений и 3 удалений

Просмотреть файл

@ -8,6 +8,7 @@ import json
import importlib
import io
import logging
import os
import signal
import subprocess
import sys
@ -155,7 +156,9 @@ def RunTestSuite(test_suite,
test_suite, cmd_args, log_output=show_test_stdout)
return result, output.decode(), json_results
runner_cmd = [ExecutablePathInCurrentDir(test_suite)] + cmd_args + (runner_args or [])
cmd = ExecutablePathInCurrentDir(test_suite) if os.path.exists(
os.path.basename(test_suite)) else test_suite
runner_cmd = [cmd] + cmd_args + (runner_args or [])
logging.debug(' '.join(runner_cmd))
with contextlib.ExitStack() as stack:

Просмотреть файл

@ -9,6 +9,7 @@
import argparse
import fnmatch
import glob
import importlib
import io
import json
@ -20,7 +21,8 @@ import re
import subprocess
import sys
PY_UTILS = str(pathlib.Path(__file__).resolve().parent / 'py_utils')
SCRIPT_DIR = str(pathlib.Path(__file__).resolve().parent)
PY_UTILS = str(pathlib.Path(SCRIPT_DIR) / 'py_utils')
if PY_UTILS not in sys.path:
os.stat(PY_UTILS) and sys.path.insert(0, PY_UTILS)
import android_helper
@ -396,13 +398,36 @@ def _run_tests(tests, args, extra_flags, env):
return results, histograms
def _find_test_suite_directory(test_suite):
if os.path.exists(angle_test_util.ExecutablePathInCurrentDir(test_suite)):
return '.'
# Find most recent binary in search paths.
newest_binary = None
newest_mtime = None
for path in glob.glob('out/*'):
binary_path = str(pathlib.Path(SCRIPT_DIR).parent.parent / path / test_suite)
if os.path.exists(binary_path):
binary_mtime = os.path.getmtime(binary_path)
if (newest_binary is None) or (binary_mtime > newest_mtime):
newest_binary = binary_path
newest_mtime = binary_mtime
if newest_binary:
logging.info('Found %s in %s' % (test_suite, os.path.dirname(newest_binary)))
return os.path.dirname(newest_binary)
return None
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--isolated-script-test-output', type=str)
parser.add_argument('--isolated-script-test-perf-output', type=str)
parser.add_argument(
'-f', '--filter', '--isolated-script-test-filter', type=str, help='Test filter.')
parser.add_argument('--test-suite', help='Test suite to run.', default=ANGLE_PERFTESTS)
parser.add_argument(
'--test-suite', '--suite', help='Test suite to run.', default=ANGLE_PERFTESTS)
parser.add_argument('--xvfb', help='Use xvfb.', action='store_true')
parser.add_argument(
'--shard-count',
@ -453,6 +478,11 @@ def main():
'--show-test-stdout', help='Prints all test stdout during execution.', action='store_true')
parser.add_argument(
'--perf-counters', help='Colon-separated list of extra perf counter metrics.')
parser.add_argument(
'-a',
'--auto-dir',
help='Run with the most recent test suite found in the build directories.',
action='store_true')
args, extra_flags = parser.parse_known_args()
@ -471,6 +501,14 @@ def main():
if angle_test_util.HasGtestShardsAndIndex(env):
args.shard_count, args.shard_index = angle_test_util.PopGtestShardsAndIndex(env)
if args.auto_dir:
test_suite_dir = _find_test_suite_directory(args.test_suite)
if not test_suite_dir:
logging.fatal('Could not find test suite: %s' % args.test_suite)
return EXIT_FAILURE
else:
os.chdir(test_suite_dir)
angle_test_util.Initialize(args.test_suite)
# Get test list