2018-10-08 19:07:42 +00:00
|
|
|
# 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()
|
2019-11-05 15:08:23 +00:00
|
|
|
checkout_root = api.path['start_dir']
|
2018-10-08 19:07:42 +00:00
|
|
|
|
|
|
|
# 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]')
|
|
|
|
)
|