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

Unified Diff: build/android/emulator.py

Issue 10784011: create temp avd when running tests on multiple emulators (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix for bulach's comments Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | build/android/run_tests.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/emulator.py
diff --git a/build/android/emulator.py b/build/android/emulator.py
index bf5dc083ea24bb2a0e5132d8e20c89be2beee5dd..d4f3caa409272f35f97022e1bf099f20ea08cc77 100755
--- a/build/android/emulator.py
+++ b/build/android/emulator.py
@@ -113,10 +113,11 @@ class Emulator(object):
# Time to wait for a "wait for boot complete" (property set on device).
_WAITFORBOOT_TIMEOUT = 300
- def __init__(self, fast_and_loose=False):
+ def __init__(self, new_avd_name, fast_and_loose):
"""Init an Emulator.
Args:
+ nwe_avd_name: If set, will create a new temporary AVD.
fast_and_loose: Loosen up the rules for reliable running for speed.
Intended for quick testing or re-testing.
@@ -128,15 +129,59 @@ class Emulator(object):
'emulator.')
raise
self.emulator = os.path.join(android_sdk_root, 'tools', 'emulator')
+ self.android = os.path.join(android_sdk_root, 'tools', 'android')
self.popen = None
self.device = None
+ self.default_avd = True
self.fast_and_loose = fast_and_loose
+ self.abi = 'armeabi-v7a'
+ self.avd = 'avd_armeabi'
+ if 'x86' in os.environ.get('TARGET_PRODUCT', ''):
+ self.abi = 'x86'
+ self.avd = 'avd_x86'
+ if new_avd_name:
+ self.default_avd = False
+ self.avd = self._CreateAVD(new_avd_name)
def _DeviceName(self):
"""Return our device name."""
port = _GetAvailablePort()
return ('emulator-%d' % port, port)
+ def _CreateAVD(self, avd_name):
+ avd_command = [
+ self.android,
+ '--silent',
+ 'create', 'avd',
+ '--name', avd_name,
+ '--abi', self.abi,
+ '--target', 'android-15',
+ '-c', '64M',
+ '--force',
+ ]
+ avd_process = subprocess.Popen(args=avd_command,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ avd_process.stdin.write('no\n')
+ avd_process.wait()
+ logging.info('Create AVD command: %s', ' '.join(avd_command))
+ return self.avd
+
+ def _DeleteAVD(self):
+ avd_command = [
+ self.android,
+ '--silent',
+ 'delete',
+ 'avd',
+ '--name', self.avd,
+ ]
+ avd_process = subprocess.Popen(args=avd_command,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ logging.info('Delete AVD command: %s', ' '.join(avd_command))
+ avd_process.wait()
+
def Launch(self, kill_all_emulators):
"""Launches the emulator asynchronously. Call ConfirmLaunch() to ensure the
emulator is ready for use.
@@ -148,9 +193,6 @@ class Emulator(object):
if not self.fast_and_loose:
self._AggressiveImageCleanup()
(self.device, port) = self._DeviceName()
- abi = 'armeabi'
- if 'x86' in os.environ.get('TARGET_PRODUCT', ''):
- abi = 'x86'
emulator_command = [
self.emulator,
# Speed up emulator launch by 40%. Really.
@@ -159,7 +201,7 @@ class Emulator(object):
# That's not enough for 8 unit test bundles and their data.
'-partition-size', '512',
# Use a familiar name and port.
- '-avd', 'avd_' + abi,
+ '-avd', self.avd,
'-port', str(port)]
if not self.fast_and_loose:
emulator_command.extend([
@@ -228,6 +270,8 @@ class Emulator(object):
def Shutdown(self):
"""Shuts down the process started by launch."""
+ if not self.default_avd:
+ self._DeleteAVD()
if self.popen:
self.popen.poll()
if self.popen.returncode == None:
@@ -247,7 +291,7 @@ class Emulator(object):
signal.signal(sig, self._ShutdownOnSignal)
def main(argv):
- Emulator(True).Launch(True)
+ Emulator(None, True).Launch(True)
if __name__ == '__main__':
« no previous file with comments | « no previous file | build/android/run_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698