# 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]')
)