diff --git a/gfx/wr/wrench/android.txt b/gfx/wr/wrench/android.txt index c51985b712eb..f0f428809e70 100644 --- a/gfx/wr/wrench/android.txt +++ b/gfx/wr/wrench/android.txt @@ -59,8 +59,8 @@ Release mode: should be signed and installable (you may need to uninstall the debug APK first if you have that installed). -Running reftests like a boss: ------------------------------ +Running reftests like a boss (on a local emulator): +--------------------------------------------------- First, compile wrench as described above (debug mode). Then, from the root gecko source dir, run: @@ -84,3 +84,13 @@ Running reftests like a boss: to point to it: export WRENCH_APK=gfx/wr/target/android-artifacts/app/build/outputs/apk/app-release-unsigned.apk ./mach python testing/mozharness/scripts/android_wrench.py --config testing/mozharness/configs/android/wrench.py + +Running reftests like a boss (on a local device): +------------------------------------------------- + + Same steps as running on a local emulator, except you need to do this: + export DEVICE_SERIAL= + before running the `./mach python` command. You can get the serial of + your device by running `adb devices` with the device plugged in. When running + on a device, the android_emulator_wrench.py script will skip the steps to + download the AVDs and start the emulator. diff --git a/testing/mozharness/configs/android/wrench.py b/testing/mozharness/configs/android/wrench.py index 48c20596b02e..8299f6aa8250 100644 --- a/testing/mozharness/configs/android/wrench.py +++ b/testing/mozharness/configs/android/wrench.py @@ -20,7 +20,6 @@ config = { "emulator_process_name": "emulator64-x86", "emulator_extra_args": "-gpu swiftshader_indirect -skip-adb-auth -verbose -show-kernel -use-system-libs -ranchu -selinux permissive -memory 3072 -cores 4", "exes": { - 'adb': '%(abs_work_dir)s/android-sdk-linux/platform-tools/adb', }, "env": { "DISPLAY": ":0.0", diff --git a/testing/mozharness/scripts/android_wrench.py b/testing/mozharness/scripts/android_wrench.py index c89201ffe56c..1e3eae4053a3 100644 --- a/testing/mozharness/scripts/android_wrench.py +++ b/testing/mozharness/scripts/android_wrench.py @@ -26,11 +26,37 @@ from mozharness.mozilla.testing.testbase import TestingMixin class AndroidWrench(TestingMixin, BaseScript, MozbaseMixin, AndroidMixin): def __init__(self, require_config_file=False): + # code in BaseScript.__init__ iterates all the properties to attach + # pre- and post-flight listeners, so we need _is_emulator be defined + # before that happens. Doesn't need to be a real value though. + self._is_emulator = None + super(AndroidWrench, self).__init__() - self.device_serial = 'emulator-5554' - self.use_gles3 = True + if self.device_serial is None: + # Running on an emulator. Need absolute path to adb + # to satisfy android.py's start_emulator function. + self._is_emulator = True + self.device_serial = 'emulator-5554' + self._adb_path = os.path.join( + self.query_abs_dirs()['abs_work_dir'], + 'android-sdk-linux', + 'platform-tools', + 'adb') + self.use_gles3 = True + else: + # Running on a device, ensure self.is_emulator returns False. + # Also don't set the adb path explicitly, since it should be + # on the $PATH anyway and we don't have an easy way to get the + # absolute path in automation (it's preinstalled on the bitbar + # image). + self._is_emulator = False self._errored = False + @property + def is_emulator(self): + """Overrides the is_emulator property on AndroidMixin.""" + return self._is_emulator + def query_abs_dirs(self): if self.abs_dirs: return self.abs_dirs @@ -96,7 +122,10 @@ class AndroidWrench(TestingMixin, BaseScript, MozbaseMixin, AndroidMixin): args_file = os.path.join( self.query_abs_dirs()['abs_work_dir'], "wrench_args") with open(args_file, 'w') as argfile: - argfile.write("env: WRENCH_REFTEST_CONDITION_EMULATOR=1\n") + if self.is_emulator: + argfile.write("env: WRENCH_REFTEST_CONDITION_EMULATOR=1\n") + else: + argfile.write("env: WRENCH_REFTEST_CONDITION_DEVICE=1\n") argfile.write("reftest") self.device.push(args_file, '/sdcard/wrench/args') @@ -158,7 +187,7 @@ class AndroidWrench(TestingMixin, BaseScript, MozbaseMixin, AndroidMixin): self.info("=== end scraped logcat output ===") self.info("(see logcat artifact for full logcat") - def do_test(self): + def setup_emulator(self): # Running setup_avds will clobber the existing AVD and redownload it. # For local testing that's kinda expensive, so we omit that if we # already have that dir. @@ -188,8 +217,11 @@ class AndroidWrench(TestingMixin, BaseScript, MozbaseMixin, AndroidMixin): return self._launch_emulator() - self.verify_device() + def do_test(self): + if self.is_emulator: + self.setup_emulator() + self.verify_device() self.info('Installing APK...') self.install_apk(self.query_abs_dirs()['abs_apk_path'], replace=True) self.info('Setting up SD card...')