| Index: build/android/pylib/perf/setup.py
|
| diff --git a/build/android/pylib/perf/setup.py b/build/android/pylib/perf/setup.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8e1fc28a7e651bef567b336e5593d8be64c75701
|
| --- /dev/null
|
| +++ b/build/android/pylib/perf/setup.py
|
| @@ -0,0 +1,97 @@
|
| +# Copyright 2013 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.
|
| +
|
| +"""Generates test runner factory and tests for performance tests."""
|
| +
|
| +import json
|
| +import fnmatch
|
| +import logging
|
| +import os
|
| +import shutil
|
| +
|
| +from pylib import constants
|
| +from pylib import forwarder
|
| +from pylib.device import device_list
|
| +from pylib.device import device_utils
|
| +from pylib.perf import test_runner
|
| +from pylib.utils import test_environment
|
| +
|
| +
|
| +def _GetAllDevices():
|
| + devices_path = os.path.join(os.environ.get('CHROMIUM_OUT_DIR', 'out'),
|
| + device_list.LAST_DEVICES_FILENAME)
|
| + try:
|
| + devices = [device_utils.DeviceUtils(s)
|
| + for s in device_list.GetPersistentDeviceList(devices_path)]
|
| + except IOError as e:
|
| + logging.error('Unable to find %s [%s]', devices_path, e)
|
| + devices = device_utils.DeviceUtils.HealthyDevices()
|
| + return sorted(devices)
|
| +
|
| +
|
| +def _GetStepsDictFromSingleStep(test_options):
|
| + # Running a single command, build the tests structure.
|
| + steps_dict = {
|
| + 'version': 1,
|
| + 'steps': {
|
| + 'single_step': {
|
| + 'device_affinity': 0,
|
| + 'cmd': test_options.single_step
|
| + },
|
| + }
|
| + }
|
| + return steps_dict
|
| +
|
| +
|
| +def _GetStepsDict(test_options):
|
| + if test_options.single_step:
|
| + return _GetStepsDictFromSingleStep(test_options)
|
| + if test_options.steps:
|
| + with file(test_options.steps, 'r') as f:
|
| + steps = json.load(f)
|
| +
|
| + # Already using the new format.
|
| + assert steps['version'] == 1
|
| + return steps
|
| +
|
| +
|
| +def Setup(test_options):
|
| + """Create and return the test runner factory and tests.
|
| +
|
| + Args:
|
| + test_options: A PerformanceOptions object.
|
| +
|
| + Returns:
|
| + A tuple of (TestRunnerFactory, tests, devices).
|
| + """
|
| + # TODO(bulach): remove this once the bot side lands. BUG=318369
|
| + constants.SetBuildType('Release')
|
| + if os.path.exists(constants.PERF_OUTPUT_DIR):
|
| + shutil.rmtree(constants.PERF_OUTPUT_DIR)
|
| + os.makedirs(constants.PERF_OUTPUT_DIR)
|
| +
|
| + # Before running the tests, kill any leftover server.
|
| + test_environment.CleanupLeftoverProcesses()
|
| +
|
| + # We want to keep device affinity, so return all devices ever seen.
|
| + all_devices = _GetAllDevices()
|
| +
|
| + steps_dict = _GetStepsDict(test_options)
|
| + sorted_step_names = sorted(steps_dict['steps'].keys())
|
| +
|
| + if test_options.test_filter:
|
| + sorted_step_names = fnmatch.filter(sorted_step_names,
|
| + test_options.test_filter)
|
| +
|
| + flaky_steps = []
|
| + if test_options.flaky_steps:
|
| + with file(test_options.flaky_steps, 'r') as f:
|
| + flaky_steps = json.load(f)
|
| +
|
| + def TestRunnerFactory(device, shard_index):
|
| + return test_runner.TestRunner(
|
| + test_options, device, shard_index, len(all_devices),
|
| + steps_dict, flaky_steps)
|
| +
|
| + return (TestRunnerFactory, sorted_step_names, all_devices)
|
|
|