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

Side by Side Diff: build/android/pylib/utils/emulator.py

Issue 11801016: [Android] Break GTest emulator launching into a separate function. (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: rebase Created 7 years, 11 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
« no previous file with comments | « build/android/emulator.py ('k') | build/android/run_tests.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Provides an interface to start and stop Android emulator. 7 """Provides an interface to start and stop Android emulator.
8 8
9 Assumes system environment ANDROID_NDK_ROOT has been set. 9 Assumes system environment ANDROID_NDK_ROOT has been set.
10 10
11 Emulator: The class provides the methods to launch/shutdown the emulator with 11 Emulator: The class provides the methods to launch/shutdown the emulator with
12 the android virtual device named 'avd_armeabi' . 12 the android virtual device named 'avd_armeabi' .
13 """ 13 """
14 14
15 import logging 15 import logging
16 import os 16 import os
17 import signal 17 import signal
18 import subprocess 18 import subprocess
19 import sys 19 import sys
20 import time 20 import time
21 21
22 import time_profile
23 # TODO(craigdh): Move these pylib dependencies to pylib/utils/.
22 from pylib import android_commands 24 from pylib import android_commands
23 from pylib import cmd_helper 25 from pylib import cmd_helper
24 26
25 # adb_interface.py is under ../../third_party/android_testrunner/ 27 # adb_interface.py is under ../../third_party/android_testrunner/
26 sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..', 28 sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), '..',
27 '..', 'third_party', 'android_testrunner')) 29 '..', 'third_party', 'android_testrunner'))
28 import adb_interface 30 import adb_interface
29 import errors 31 import errors
30 import run_command 32 import run_command
31 33
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 """Returns an available TCP port for the console.""" 94 """Returns an available TCP port for the console."""
93 used_ports = [] 95 used_ports = []
94 emulators = android_commands.GetEmulators() 96 emulators = android_commands.GetEmulators()
95 for emulator in emulators: 97 for emulator in emulators:
96 used_ports.append(emulator.split('-')[1]) 98 used_ports.append(emulator.split('-')[1])
97 for port in PortPool.port_range(): 99 for port in PortPool.port_range():
98 if str(port) not in used_ports: 100 if str(port) not in used_ports:
99 return port 101 return port
100 102
101 103
104 def LaunchEmulators(emulator_count, wait_for_boot=True):
105 """Launch multiple emulators and wait for them to boot.
106
107 Args:
108 emulator_count: number of emulators to launch.
109
110 Returns:
111 List of emulators.
112 """
113 emulators = []
114 for n in xrange(emulator_count):
115 t = time_profile.TimeProfile('Emulator launch %d' % n)
116 avd_name = None
117 if n > 0:
118 # Creates a temporary AVD for the extra emulators.
119 avd_name = 'run_tests_avd_%d' % n
120 logging.info('Emulator launch %d with avd_name=%s', n, avd_name)
121 emulator = Emulator(avd_name)
122 emulator.Launch(kill_all_emulators=n == 0)
123 t.Stop()
124 emulators.append(emulator)
125 # Wait for all emulators to boot completed.
126 if wait_for_boot:
127 for emulator in emulators:
128 emulator.ConfirmLaunch(True)
129 return emulators
130
131
102 class Emulator(object): 132 class Emulator(object):
103 """Provides the methods to lanuch/shutdown the emulator. 133 """Provides the methods to launch/shutdown the emulator.
104 134
105 The emulator has the android virtual device named 'avd_armeabi'. 135 The emulator has the android virtual device named 'avd_armeabi'.
106 136
107 The emulator could use any even TCP port between 5554 and 5584 for the 137 The emulator could use any even TCP port between 5554 and 5584 for the
108 console communication, and this port will be part of the device name like 138 console communication, and this port will be part of the device name like
109 'emulator-5554'. Assume it is always True, as the device name is the id of 139 'emulator-5554'. Assume it is always True, as the device name is the id of
110 emulator managed in this class. 140 emulator managed in this class.
111 141
112 Attributes: 142 Attributes:
113 emulator: Path of Android's emulator tool. 143 emulator: Path of Android's emulator tool.
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 logging.critical('emulator _ShutdownOnSignal') 329 logging.critical('emulator _ShutdownOnSignal')
300 for sig in self._SIGNALS: 330 for sig in self._SIGNALS:
301 signal.signal(sig, signal.SIG_DFL) 331 signal.signal(sig, signal.SIG_DFL)
302 self.Shutdown() 332 self.Shutdown()
303 raise KeyboardInterrupt # print a stack 333 raise KeyboardInterrupt # print a stack
304 334
305 def _InstallKillHandler(self): 335 def _InstallKillHandler(self):
306 """Install a handler to kill the emulator when we exit unexpectedly.""" 336 """Install a handler to kill the emulator when we exit unexpectedly."""
307 for sig in self._SIGNALS: 337 for sig in self._SIGNALS:
308 signal.signal(sig, self._ShutdownOnSignal) 338 signal.signal(sig, self._ShutdownOnSignal)
309
310 def main(argv):
311 Emulator(None, True).Launch(True)
312
313
314 if __name__ == '__main__':
315 main(sys.argv)
OLDNEW
« no previous file with comments | « build/android/emulator.py ('k') | build/android/run_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698