| 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..5d0272d2f71e010cdfdd6ef1ddecc5646ad5ef88
|
| --- /dev/null
|
| +++ b/build/android/pylib/perf/setup.py
|
| @@ -0,0 +1,74 @@
|
| +# 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 logging
|
| +import os
|
| +import psutil
|
| +import signal
|
| +import time
|
| +
|
| +from pylib import android_commands
|
| +from pylib import cmd_helper
|
| +from pylib import forwarder
|
| +from pylib import ports
|
| +
|
| +import test_runner
|
| +
|
| +
|
| +def _KillPendingServers():
|
| + for retry in range(5):
|
| + for server in ['lighttpd', 'web-page-replay']:
|
| + pids = [p.pid for p in psutil.process_iter() if server in p.name]
|
| + for pid in pids:
|
| + try:
|
| + logging.warning('Killing %s %s', server, pid)
|
| + os.kill(pid, signal.SIGQUIT)
|
| + except Exception as e:
|
| + logging.warning('Failed killing %s %s %s', server, pid, e)
|
| + # Restart the adb server with taskset to set a single CPU affinity.
|
| + cmd_helper.RunCmd(['adb', 'kill-server'])
|
| + cmd_helper.RunCmd(['taskset', '-c', '0', 'adb', 'start-server'])
|
| + cmd_helper.RunCmd(['taskset', '-c', '0', 'adb', 'root'])
|
| + i = 1
|
| + while not android_commands.GetAttachedDevices():
|
| + time.sleep(i)
|
| + i *= 2
|
| + if i > 10:
|
| + break
|
| + # Reset the test port allocation. It's important to do it before starting
|
| + # to dispatch any step.
|
| + if not ports.ResetTestServerPortAllocation():
|
| + raise Exception('Failed to reset test server port.')
|
| +
|
| + forwarder.Forwarder.UseMultiprocessing()
|
| +
|
| +
|
| +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).
|
| + """
|
| + # Before running the tests, kill any leftover server.
|
| + _KillPendingServers()
|
| +
|
| + with file(test_options.steps, 'r') as f:
|
| + tests = json.load(f)
|
| +
|
| + 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, tests, flaky_steps)
|
| +
|
| + return (TestRunnerFactory, sorted(tests.keys()))
|
|
|