| # Copyright 2018 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Recipe which runs the SKQP apk using docker and an Android Emulator |
| |
| DEPS = [ |
| 'checkout', |
| 'infra', |
| 'recipe_engine/file', |
| 'recipe_engine/path', |
| 'recipe_engine/properties', |
| 'recipe_engine/python', |
| 'recipe_engine/step', |
| 'run', |
| 'vars', |
| ] |
| |
| # This image is public, and thus doesn't require log-in to read. |
| DOCKER_IMAGE = ('butomo1989/docker-android-x86-8.1@sha256:' |
| 'ad75c888e373d9ea7a2821fd8f64b53c9a22b5827e6fa516b396739a20b9bb88') |
| INNER_TEST_SCRIPT = '/SRC/skia/infra/skqp/run_skqp.sh' |
| |
| |
| def RunSteps(api): |
| api.vars.setup() |
| checkout_root = api.checkout.default_checkout_root |
| api.checkout.bot_update(checkout_root=checkout_root) |
| |
| # This is where the APK should be, that is, where Swarming puts the inputs. |
| apk_location = api.vars.build_dir |
| |
| container_name = 'android_em' |
| |
| # Make sure the emulator starts up, with some resilence against |
| # occasional flakes. |
| api.python.inline( |
| name='Start Emulator', |
| program=''' |
| import os |
| import subprocess |
| import sys |
| |
| container_name = sys.argv[1] |
| checkout_root = sys.argv[2] |
| apk_location = sys.argv[3] |
| DOCKER_IMAGE = sys.argv[4] |
| |
| MAX_TRIES = 5 |
| |
| start_cmd = ['docker', 'run', '--privileged', '--rm', '-d', # detached/daemon |
| '--name', container_name, |
| '--env', 'DEVICE=Samsung Galaxy S6', |
| '--volume', '%s:/SRC' % checkout_root, |
| '--volume', '%s:/OUT' % apk_location, |
| DOCKER_IMAGE] |
| |
| wait_cmd = ['docker', 'exec', container_name, |
| 'timeout', '45', 'adb', 'wait-for-device'] |
| |
| for t in range(MAX_TRIES): |
| print 'Starting Emulator try %d' % t |
| try: |
| # Start emulator |
| print subprocess.check_output(start_cmd) |
| # Wait a short time using adb-wait-for-device |
| print subprocess.check_output(wait_cmd) |
| # if exit code 0, we are good so end loop |
| print 'Emulator started' |
| sys.exit(0) |
| except subprocess.CalledProcessError: |
| # else kill docker container |
| print 'Killing and trying again' |
| print subprocess.check_output(['docker', 'kill', container_name]) |
| print 'Could not start emulator' |
| sys.exit(1) |
| ''', |
| args=[container_name, checkout_root, apk_location, DOCKER_IMAGE], |
| infra_step=True) |
| |
| api.run( |
| api.step, |
| 'Test SQKP with Android Emulator in Docker', |
| cmd=['docker', 'exec', container_name, |
| INNER_TEST_SCRIPT]) |
| |
| api.run( |
| api.step, |
| 'Stop Emulator', |
| cmd=['docker', 'kill', container_name], |
| infra_step=True) |
| |
| |
| def GenTests(api): |
| yield ( |
| api.test('Test-Debian9-Clang-GCE-CPU-Emulator-x86-devrel' |
| '-All-Android_SKQP') + |
| api.properties(buildername=('Test-Debian9-Clang-GCE-CPU-Emulator' |
| '-x86-devrel-All-Android_SKQP'), |
| repository='https://skia.googlesource.com/skia.git', |
| revision='abc123', |
| path_config='kitchen', |
| swarm_out_dir='[SWARM_OUT_DIR]') |
| ) |