Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: build/android/pylib/perf/setup.py

Issue 22854004: Android: first step into making "perf tests" reuse the functional test infra. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """Generates test runner factory and tests for performance tests."""
6
7 import json
8 import logging
9 import os
10 import signal
11 import test_runner
12
13 from pylib import android_commands
14 from pylib import cmd_helper
15 from pylib import forwarder
16 from pylib import ports
17
18
19 def _KillPendingServers():
20 for retry in range(5):
21 for server in ['lighttpd', 'web-page-replay']:
22 pids = cmd_helper.GetCmdOutput(['pgrep', '-f', server])
frankf 2013/08/12 23:09:52 Can you use psutil: http://stackoverflow.com/a/423
bulach 2013/08/13 08:58:19 Done.
23 pids = [pid.strip() for pid in pids.split('\n') if pid.strip()]
24 for pid in pids:
25 try:
26 logging.warning('Killing %s %s', server, pid)
27 os.kill(int(pid), signal.SIGQUIT)
28 except Exception as e:
29 logging.warning('Failed killing %s %s %s', server, pid, e)
30 # Restart the adb server with taskset to set a single CPU affinity.
31 cmd_helper.RunCmd(['adb', 'kill-server'])
32 cmd_helper.RunCmd(['taskset', '-c', '0', 'adb', 'start-server'])
frankf 2013/08/12 23:09:52 Are we going to eventually do this in general for
bulach 2013/08/13 08:58:19 potentially, yes.. but maybe best to start here, t
33 cmd_helper.RunCmd(['taskset', '-c', '0', 'adb', 'root'])
34 i = 1
35 while not android_commands.GetAttachedDevices():
36 time.sleep(i)
37 i *= 2
38 if i > 10:
39 break
40 # Reset the test port allocation. It's important to do it before starting
41 # to dispatch any step.
42 if not ports.ResetTestServerPortAllocation():
frankf 2013/08/12 23:09:52 Currently we call this from bunch of places: For g
bulach 2013/08/13 08:58:19 since there's already two other places, would you
43 raise Exception('Failed to reset test server port.')
44
45 forwarder.Forwarder.UseMultiprocessing()
frankf 2013/08/12 23:09:52 This is now multi-threading. Can we get rid of thi
bulach 2013/08/13 08:58:19 unfortunately not, it's multi-threading only on th
46
47
48 def Setup(test_options):
49 """Create and return the test runner factory and tests.
50
51 Args:
52 test_options: A PerformanceOptions object.
53
54 Returns:
55 A tuple of (TestRunnerFactory, tests).
56 """
57 # Just print the results from a single previously executed step.
58 if test_options.print_step:
59 def TestRunnerPrinterFactory(device, shard_index):
60 return test_runner.TestPrinter(test_options, device, shard_index)
frankf 2013/08/13 00:43:12 Also, it's really weird to have the printing logic
bulach 2013/08/13 08:58:19 yeah, I fully agree this is a bizarre shoehorning.
61 return (TestRunnerPrinterFactory, [test_options.print_step])
62
63 # Before running the tests, kill any leftover server.
64 _KillPendingServers()
65
66 with file(test_options.steps, 'r') as f:
67 tests = json.load(f)
68
69 flaky_steps = []
70 if test_options.flaky_steps:
71 with file(test_options.flaky_steps, 'r') as f:
72 flaky_steps = json.load(f)
73
74 def TestRunnerFactory(device, shard_index):
75 return test_runner.TestRunner(
76 test_options, device, shard_index, tests, flaky_steps)
77
78 return (TestRunnerFactory, sorted(tests.keys()))
frankf 2013/08/12 23:09:52 Any reasons to sort the tests given you don't sort
bulach 2013/08/13 08:58:19 that's actually a good point. I added "sorted" in
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698