OLD | NEW |
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 'buildbot' . | 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 from pylib import android_commands | 22 from pylib import android_commands |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 for emulator in emulators: | 79 for emulator in emulators: |
80 used_ports.append(emulator.split('-')[1]) | 80 used_ports.append(emulator.split('-')[1]) |
81 for port in PortPool.port_range(): | 81 for port in PortPool.port_range(): |
82 if str(port) not in used_ports: | 82 if str(port) not in used_ports: |
83 return port | 83 return port |
84 | 84 |
85 | 85 |
86 class Emulator(object): | 86 class Emulator(object): |
87 """Provides the methods to lanuch/shutdown the emulator. | 87 """Provides the methods to lanuch/shutdown the emulator. |
88 | 88 |
89 The emulator has the android virtual device named 'buildbot'. | 89 The emulator has the android virtual device named 'avd_armeabi'. |
90 | 90 |
91 The emulator could use any even TCP port between 5554 and 5584 for the | 91 The emulator could use any even TCP port between 5554 and 5584 for the |
92 console communication, and this port will be part of the device name like | 92 console communication, and this port will be part of the device name like |
93 'emulator-5554'. Assume it is always True, as the device name is the id of | 93 'emulator-5554'. Assume it is always True, as the device name is the id of |
94 emulator managed in this class. | 94 emulator managed in this class. |
95 | 95 |
96 Attributes: | 96 Attributes: |
97 emulator: Path of Android's emulator tool. | 97 emulator: Path of Android's emulator tool. |
98 popen: Popen object of the running emulator process. | 98 popen: Popen object of the running emulator process. |
99 device: Device name of this emulator. | 99 device: Device name of this emulator. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 self._AggressiveImageCleanup() | 149 self._AggressiveImageCleanup() |
150 (self.device, port) = self._DeviceName() | 150 (self.device, port) = self._DeviceName() |
151 emulator_command = [ | 151 emulator_command = [ |
152 self.emulator, | 152 self.emulator, |
153 # Speed up emulator launch by 40%. Really. | 153 # Speed up emulator launch by 40%. Really. |
154 '-no-boot-anim', | 154 '-no-boot-anim', |
155 # The default /data size is 64M. | 155 # The default /data size is 64M. |
156 # That's not enough for 8 unit test bundles and their data. | 156 # That's not enough for 8 unit test bundles and their data. |
157 '-partition-size', '512', | 157 '-partition-size', '512', |
158 # Use a familiar name and port. | 158 # Use a familiar name and port. |
159 '-avd', 'buildbot', | 159 '-avd', 'avd_armeabi', |
160 '-port', str(port)] | 160 '-port', str(port)] |
161 if not self.fast_and_loose: | 161 if not self.fast_and_loose: |
162 emulator_command.extend([ | 162 emulator_command.extend([ |
163 # Wipe the data. We've seen cases where an emulator | 163 # Wipe the data. We've seen cases where an emulator |
164 # gets 'stuck' if we don't do this (every thousand runs or | 164 # gets 'stuck' if we don't do this (every thousand runs or |
165 # so). | 165 # so). |
166 '-wipe-data', | 166 '-wipe-data', |
167 ]) | 167 ]) |
168 logging.info('Emulator launch command: %s', ' '.join(emulator_command)) | 168 logging.info('Emulator launch command: %s', ' '.join(emulator_command)) |
169 self.popen = subprocess.Popen(args=emulator_command, | 169 self.popen = subprocess.Popen(args=emulator_command, |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 """Install a handler to kill the emulator when we exit unexpectedly.""" | 243 """Install a handler to kill the emulator when we exit unexpectedly.""" |
244 for sig in self._SIGNALS: | 244 for sig in self._SIGNALS: |
245 signal.signal(sig, self._ShutdownOnSignal) | 245 signal.signal(sig, self._ShutdownOnSignal) |
246 | 246 |
247 def main(argv): | 247 def main(argv): |
248 Emulator(True).Launch(True) | 248 Emulator(True).Launch(True) |
249 | 249 |
250 | 250 |
251 if __name__ == '__main__': | 251 if __name__ == '__main__': |
252 main(sys.argv) | 252 main(sys.argv) |
OLD | NEW |