aboutsummaryrefslogtreecommitdiffhomepage
path: root/infra/bots
diff options
context:
space:
mode:
Diffstat (limited to 'infra/bots')
-rw-r--r--infra/bots/android_map.json3
-rw-r--r--infra/bots/gen_tasks.go28
-rw-r--r--infra/bots/jobs.json2
-rw-r--r--infra/bots/recipe_modules/flavor/api.py3
-rw-r--r--infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py56
-rw-r--r--infra/bots/recipe_modules/perf/api.py15
-rw-r--r--infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json398
-rw-r--r--infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release.json473
-rw-r--r--infra/bots/recipe_modules/perf/example.py6
-rw-r--r--infra/bots/recipe_modules/vars/api.py5
-rw-r--r--infra/bots/tasks.json122
11 files changed, 1098 insertions, 13 deletions
diff --git a/infra/bots/android_map.json b/infra/bots/android_map.json
index d799f7ecb7..07da1b17da 100644
--- a/infra/bots/android_map.json
+++ b/infra/bots/android_map.json
@@ -1,9 +1,10 @@
{
"AndroidOne": ["sprout", "MOB30Q"],
+ "Chorizo": ["chorizo", "1.24_82923"],
+ "GalaxyJ5": ["j5xnlte", "MMB29M"],
"GalaxyS6": ["zerofltetmo", "MMB29K"],
"GalaxyS7_G930A": ["heroqlteatt", "MMB29M"],
"GalaxyS7_G930FD": ["herolte", "NRD90M"],
- "GalaxyJ5": ["j5xnlte", "MMB29M"],
"GalaxyTab3": ["goyawifi", "JDQ39"],
"MotoG4": ["athene", "MPJ24.139-64"],
"NVIDIA_Shield": ["foster", "MRA58K"],
diff --git a/infra/bots/gen_tasks.go b/infra/bots/gen_tasks.go
index 2c47d69a14..5afe193aba 100644
--- a/infra/bots/gen_tasks.go
+++ b/infra/bots/gen_tasks.go
@@ -135,15 +135,16 @@ func swarmDimensions(parts map[string]string) []string {
}
if os, ok := parts["os"]; ok {
d["os"] = map[string]string{
- "Android": "Android",
- "Mac": "Mac-10.11",
- "Ubuntu": DEFAULT_OS_LINUX,
- "Ubuntu16": "Ubuntu-16.10",
- "Win": "Windows-2008ServerR2-SP1",
- "Win10": "Windows-10-14393",
- "Win2k8": "Windows-2008ServerR2-SP1",
- "Win8": "Windows-8.1-SP0",
- "iOS": "iOS-9.3.1",
+ "Android": "Android",
+ "Chromecast": "Android",
+ "Mac": "Mac-10.11",
+ "Ubuntu": DEFAULT_OS_LINUX,
+ "Ubuntu16": "Ubuntu-16.10",
+ "Win": "Windows-2008ServerR2-SP1",
+ "Win10": "Windows-10-14393",
+ "Win2k8": "Windows-2008ServerR2-SP1",
+ "Win8": "Windows-8.1-SP0",
+ "iOS": "iOS-9.3.1",
}[os]
// Chrome Golo has a different Windows image.
if parts["model"] == "Golo" && os == "Win10" {
@@ -153,7 +154,7 @@ func swarmDimensions(parts map[string]string) []string {
d["os"] = DEFAULT_OS
}
if parts["role"] == "Test" || parts["role"] == "Perf" {
- if strings.Contains(parts["os"], "Android") {
+ if strings.Contains(parts["os"], "Android") || strings.Contains(parts["os"], "Chromecast") {
// For Android, the device type is a better dimension
// than CPU or GPU.
deviceInfo, ok := ANDROID_MAPPING[parts["model"]]
@@ -600,6 +601,13 @@ func process(b *specs.TasksCfgBuilder, name string) {
b.MustGetCipdPackageFromAsset("skp"),
b.MustGetCipdPackageFromAsset("svg"),
}
+ if strings.Contains(name, "Chromecast") {
+ // Chromecasts don't have enough disk space to fit all of the content,
+ // so we do a subset of the skps.
+ pkgs = []*specs.CipdPackage{
+ b.MustGetCipdPackageFromAsset("skp"),
+ }
+ }
if strings.Contains(name, "Ubuntu") && strings.Contains(name, "SAN") {
pkgs = append(pkgs, b.MustGetCipdPackageFromAsset("clang_linux"))
}
diff --git a/infra/bots/jobs.json b/infra/bots/jobs.json
index bb2dbd2e01..3c727724f8 100644
--- a/infra/bots/jobs.json
+++ b/infra/bots/jobs.json
@@ -110,6 +110,8 @@
"Perf-Android-Clang-PixelC-CPU-TegraX1-arm64-Release-Android",
"Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-Android_Skpbench",
"Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-Android_Vulkan_Skpbench",
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug",
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release",
"Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Debug",
"Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Release",
"Perf-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Debug",
diff --git a/infra/bots/recipe_modules/flavor/api.py b/infra/bots/recipe_modules/flavor/api.py
index 3f3e1363f7..b3093b4536 100644
--- a/infra/bots/recipe_modules/flavor/api.py
+++ b/infra/bots/recipe_modules/flavor/api.py
@@ -32,7 +32,8 @@ def is_android(builder_cfg):
return 'Android' in builder_cfg.get('extra_config', '')
def is_chromecast(builder_cfg):
- return 'Chromecast' in builder_cfg.get('extra_config', '')
+ return ('Chromecast' in builder_cfg.get('extra_config', '') or
+ 'Chromecast' in builder_cfg.get('os', ''))
def is_flutter(builder_cfg):
return 'Flutter' in builder_cfg.get('extra_config', '')
diff --git a/infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py b/infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py
index 99f35b3d7d..2b5983d72b 100644
--- a/infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py
+++ b/infra/bots/recipe_modules/flavor/gn_chromecast_flavor.py
@@ -13,6 +13,7 @@ import subprocess
class GNChromecastFlavorUtils(gn_android_flavor.GNAndroidFlavorUtils):
def __init__(self, m):
super(GNChromecastFlavorUtils, self).__init__(m)
+ self._ever_ran_adb = False
def compile(self, unused_target):
configuration = self.m.vars.builder_cfg.get('configuration')
@@ -57,3 +58,58 @@ class GNChromecastFlavorUtils(gn_android_flavor.GNAndroidFlavorUtils):
# We only build perf for the chromecasts.
self._run('ninja', ninja, '-C', self.out_dir, 'nanobench')
+ def _adb(self, title, *cmd, **kwargs):
+ if not self._ever_ran_adb:
+ self._connect_to_remote()
+
+ self._ever_ran_adb = True
+ # The only non-infra adb steps (dm / nanobench) happen to not use _adb().
+ if 'infra_step' not in kwargs:
+ kwargs['infra_step'] = True
+ return self._run(title, 'adb', *cmd, **kwargs)
+
+ def _connect_to_remote(self):
+
+ ip_address = self.m.run(self.m.python.inline, 'read chromecast ip',
+ program="""
+ import os
+ CHROMECAST_IP_FILE = os.path.expanduser('~/chromecast.txt')
+ with open(CHROMECAST_IP_FILE, 'r') as f:
+ print f.read()
+ """,
+ stdout=self.m.raw_io.output(),
+ infra_step=True).stdout
+
+ self.m.run(self.m.step, 'adb connect %s' % ip_address, cmd=['adb',
+ 'connect', ip_address], infra_step=True)
+
+ def create_clean_device_dir(self, path):
+ # Note: Chromecast does not support -rf
+ self._adb('rm %s' % path, 'shell', 'rm', '-r', path)
+ self._adb('mkdir %s' % path, 'shell', 'mkdir', '-p', path)
+
+ def copy_directory_contents_to_device(self, host, device):
+ # Copy the tree, avoiding hidden directories and resolving symlinks.
+ # Additionally, due to space restraints, we don't push files > 3 MB
+ # which cuts down the size of the SKP asset to be around 50 MB as of
+ # version 41.
+ self.m.run(self.m.python.inline, 'push %s/* %s' % (host, device),
+ program="""
+ import os
+ import subprocess
+ import sys
+ host = sys.argv[1]
+ device = sys.argv[2]
+ for d, _, fs in os.walk(host):
+ p = os.path.relpath(d, host)
+ if p != '.' and p.startswith('.'):
+ continue
+ for f in fs:
+ print os.path.join(p,f)
+ hp = os.path.realpath(os.path.join(host, p, f))
+ if os.stat(hp).st_size > (3 * 1024 * 1024):
+ print "Skipping because it is too big"
+ else:
+ subprocess.check_call(['adb', 'push',
+ hp, os.path.join(device, p, f)])
+ """, args=[host, device], infra_step=True)
diff --git a/infra/bots/recipe_modules/perf/api.py b/infra/bots/recipe_modules/perf/api.py
index 1b6e63464f..a0080c57de 100644
--- a/infra/bots/recipe_modules/perf/api.py
+++ b/infra/bots/recipe_modules/perf/api.py
@@ -187,6 +187,16 @@ def perf_steps(api):
args.append(skip_flag)
args.extend(nanobench_flags(api.vars.builder_name))
+ if 'Chromecast' in api.vars.builder_cfg.get('os', ''):
+ # Due to limited disk space, run a watered down perf run on Chromecast.
+ args = [
+ target,
+ '-i', api.flavor.device_dirs.resource_dir,
+ '--images', api.flavor.device_path_join(
+ api.flavor.device_dirs.resource_dir, 'color_wheel.jpg'),
+ '--svgs', api.flavor.device_dirs.svg_dir,
+ ]
+
if api.vars.upload_perf_results:
now = api.time.utcnow()
ts = int(calendar.timegm(now.utctimetuple()))
@@ -249,7 +259,10 @@ class PerfApi(recipe_api.RecipeApi):
env['IOS_BUNDLE_ID'] = 'com.google.nanobench'
with self.m.step.context({'env': env}):
try:
- self.m.flavor.install_everything()
+ if 'Chromecast' in self.m.vars.builder_name:
+ self.m.flavor.install(resources=True, skps=True)
+ else:
+ self.m.flavor.install_everything()
perf_steps(self.m)
finally:
self.m.flavor.cleanup_steps()
diff --git a/infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json b/infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json
new file mode 100644
index 0000000000..dea99161dc
--- /dev/null
+++ b/infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug.json
@@ -0,0 +1,398 @@
+[
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nCHROMECAST_IP_FILE = os.path.expanduser('~/chromecast.txt')\nwith open(CHROMECAST_IP_FILE, 'r') as f:\n print f.read()\n"
+ ],
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "read chromecast ip",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@CHROMECAST_IP_FILE = os.path.expanduser('~/chromecast.txt')@@@",
+ "@@@STEP_LOG_LINE@python.inline@with open(CHROMECAST_IP_FILE, 'r') as f:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print f.read()@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "adb",
+ "connect",
+ "192.168.1.2:5555"
+ ],
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "adb connect 192.168.1.2:5555"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "mkdir",
+ "-p",
+ "/cache/skia/resources"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "mkdir /cache/skia/resources"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n hp = os.path.realpath(os.path.join(host, p, f))\n if os.stat(hp).st_size > (3 * 1024 * 1024):\n print \"Skipping because it is too big\"\n else:\n subprocess.check_call(['adb', 'push',\n hp, os.path.join(device, p, f)])\n",
+ "[START_DIR]/skia/resources",
+ "/cache/skia/resources"
+ ],
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push [START_DIR]/skia/resources/* /cache/skia/resources",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ continue@@@",
+ "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp = os.path.realpath(os.path.join(host, p, f))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.stat(hp).st_size > (3 * 1024 * 1024):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"Skipping because it is too big\"@@@",
+ "@@@STEP_LOG_LINE@python.inline@ else:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['adb', 'push',@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp, os.path.join(device, p, f)])@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
+ "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "name": "Get downloaded SKP VERSION"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
+ "42",
+ "[START_DIR]/tmp/SKP_VERSION"
+ ],
+ "infra_step": true,
+ "name": "write SKP_VERSION"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "cat",
+ "/cache/skia/SKP_VERSION"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "read /cache/skia/SKP_VERSION",
+ "stdout": "/path/to/tmp/"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "rm",
+ "-f",
+ "/cache/skia/SKP_VERSION"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "rm /cache/skia/SKP_VERSION"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "rm",
+ "-r",
+ "/cache/skia/skps"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "rm /cache/skia/skps"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "mkdir",
+ "-p",
+ "/cache/skia/skps"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "mkdir /cache/skia/skps"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n hp = os.path.realpath(os.path.join(host, p, f))\n if os.stat(hp).st_size > (3 * 1024 * 1024):\n print \"Skipping because it is too big\"\n else:\n subprocess.check_call(['adb', 'push',\n hp, os.path.join(device, p, f)])\n",
+ "[START_DIR]/skp",
+ "/cache/skia/skps"
+ ],
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push [START_DIR]/skp/* /cache/skia/skps",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ continue@@@",
+ "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp = os.path.realpath(os.path.join(host, p, f))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.stat(hp).st_size > (3 * 1024 * 1024):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"Skipping because it is too big\"@@@",
+ "@@@STEP_LOG_LINE@python.inline@ else:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['adb', 'push',@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp, os.path.join(device, p, f)])@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "adb",
+ "push",
+ "[START_DIR]/tmp/SKP_VERSION",
+ "/cache/skia/SKP_VERSION"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push [START_DIR]/tmp/SKP_VERSION /cache/skia/SKP_VERSION"
+ },
+ {
+ "cmd": [
+ "adb",
+ "push",
+ "[START_DIR]/out/Debug/nanobench",
+ "/cache/skia/"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push nanobench"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
+ "set -x; /cache/skia/nanobench -i /cache/skia/resources --images /cache/skia/resources/color_wheel.jpg --svgs /cache/skia/svgs; echo $? >/cache/skia/rc",
+ "[START_DIR]/tmp/nanobench.sh"
+ ],
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "write nanobench.sh"
+ },
+ {
+ "cmd": [
+ "adb",
+ "push",
+ "[START_DIR]/tmp/nanobench.sh",
+ "/cache/skia/"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push nanobench.sh"
+ },
+ {
+ "cmd": [
+ "adb",
+ "logcat",
+ "-c"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "clear log"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh = sys.argv[2]\nsubprocess.check_call(['adb', 'shell', 'sh', bin_dir + sh])\ntry:\n sys.exit(int(subprocess.check_output(['adb', 'shell', 'cat',\n bin_dir + 'rc'])))\nexcept ValueError:\n print \"Couldn't read the return code. Probably killed for OOM.\"\n sys.exit(1)\n",
+ "/cache/skia/",
+ "nanobench.sh"
+ ],
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "name": "nanobench",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@sh = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['adb', 'shell', 'sh', bin_dir + sh])@@@",
+ "@@@STEP_LOG_LINE@python.inline@try:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(int(subprocess.check_output(['adb', 'shell', 'cat',@@@",
+ "@@@STEP_LOG_LINE@python.inline@ bin_dir + 'rc'])))@@@",
+ "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"Couldn't read the return code. Probably killed for OOM.\"@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nimport subprocess\nimport sys\nout = sys.argv[1]\nlog = subprocess.check_output(['adb', 'logcat', '-d'])\nfor line in log.split('\\n'):\n tokens = line.split()\n if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':\n addr, path = tokens[-2:]\n local = os.path.join(out, os.path.basename(path))\n if os.path.exists(local):\n sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n line = line.replace(addr, addr + ' ' + sym.strip())\n print line\n",
+ "[START_DIR]/out/Debug"
+ ],
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "dump log",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['adb', 'logcat', '-d'])@@@",
+ "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ tokens = line.split()@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
+ "@@@STEP_LOG_LINE@python.inline@ addr, path = tokens[-2:]@@@",
+ "@@@STEP_LOG_LINE@python.inline@ local = os.path.join(out, os.path.basename(path))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(local):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@",
+ "@@@STEP_LOG_LINE@python.inline@ line = line.replace(addr, addr + ' ' + sym.strip())@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print line@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "adb",
+ "kill-server"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Debug",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "kill adb server"
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release.json b/infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release.json
new file mode 100644
index 0000000000..c244a0011f
--- /dev/null
+++ b/infra/bots/recipe_modules/perf/example.expected/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release.json
@@ -0,0 +1,473 @@
+[
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nCHROMECAST_IP_FILE = os.path.expanduser('~/chromecast.txt')\nwith open(CHROMECAST_IP_FILE, 'r') as f:\n print f.read()\n"
+ ],
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "read chromecast ip",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@CHROMECAST_IP_FILE = os.path.expanduser('~/chromecast.txt')@@@",
+ "@@@STEP_LOG_LINE@python.inline@with open(CHROMECAST_IP_FILE, 'r') as f:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print f.read()@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "adb",
+ "connect",
+ "192.168.1.2:5555"
+ ],
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "adb connect 192.168.1.2:5555"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "mkdir",
+ "-p",
+ "/cache/skia/resources"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "mkdir /cache/skia/resources"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n hp = os.path.realpath(os.path.join(host, p, f))\n if os.stat(hp).st_size > (3 * 1024 * 1024):\n print \"Skipping because it is too big\"\n else:\n subprocess.check_call(['adb', 'push',\n hp, os.path.join(device, p, f)])\n",
+ "[START_DIR]/skia/resources",
+ "/cache/skia/resources"
+ ],
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push [START_DIR]/skia/resources/* /cache/skia/resources",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ continue@@@",
+ "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp = os.path.realpath(os.path.join(host, p, f))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.stat(hp).st_size > (3 * 1024 * 1024):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"Skipping because it is too big\"@@@",
+ "@@@STEP_LOG_LINE@python.inline@ else:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['adb', 'push',@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp, os.path.join(device, p, f)])@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
+ "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
+ "/path/to/tmp/"
+ ],
+ "infra_step": true,
+ "name": "Get downloaded SKP VERSION"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
+ "42",
+ "[START_DIR]/tmp/SKP_VERSION"
+ ],
+ "infra_step": true,
+ "name": "write SKP_VERSION"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "cat",
+ "/cache/skia/SKP_VERSION"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "read /cache/skia/SKP_VERSION",
+ "stdout": "/path/to/tmp/"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "rm",
+ "-f",
+ "/cache/skia/SKP_VERSION"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "rm /cache/skia/SKP_VERSION"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "rm",
+ "-r",
+ "/cache/skia/skps"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "rm /cache/skia/skps"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "mkdir",
+ "-p",
+ "/cache/skia/skps"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "mkdir /cache/skia/skps"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n hp = os.path.realpath(os.path.join(host, p, f))\n if os.stat(hp).st_size > (3 * 1024 * 1024):\n print \"Skipping because it is too big\"\n else:\n subprocess.check_call(['adb', 'push',\n hp, os.path.join(device, p, f)])\n",
+ "[START_DIR]/skp",
+ "/cache/skia/skps"
+ ],
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push [START_DIR]/skp/* /cache/skia/skps",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ continue@@@",
+ "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp = os.path.realpath(os.path.join(host, p, f))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.stat(hp).st_size > (3 * 1024 * 1024):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"Skipping because it is too big\"@@@",
+ "@@@STEP_LOG_LINE@python.inline@ else:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['adb', 'push',@@@",
+ "@@@STEP_LOG_LINE@python.inline@ hp, os.path.join(device, p, f)])@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "adb",
+ "push",
+ "[START_DIR]/tmp/SKP_VERSION",
+ "/cache/skia/SKP_VERSION"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push [START_DIR]/tmp/SKP_VERSION /cache/skia/SKP_VERSION"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "rm",
+ "-r",
+ "/cache/skia/perf"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "rm /cache/skia/perf"
+ },
+ {
+ "cmd": [
+ "adb",
+ "shell",
+ "mkdir",
+ "-p",
+ "/cache/skia/perf"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "mkdir /cache/skia/perf"
+ },
+ {
+ "cmd": [
+ "adb",
+ "push",
+ "[START_DIR]/out/Release/nanobench",
+ "/cache/skia/"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push nanobench"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
+ "set -x; /cache/skia/nanobench -i /cache/skia/resources --images /cache/skia/resources/color_wheel.jpg --svgs /cache/skia/svgs --outResultsFile /cache/skia/perf/nanobench_abc123_1337000001.json --properties gitHash abc123 build_number 5 --key arch arm compiler GCC cpu_or_gpu CPU cpu_or_gpu_value Cortex_A7 model Chorizo os Chromecast; echo $? >/cache/skia/rc",
+ "[START_DIR]/tmp/nanobench.sh"
+ ],
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "write nanobench.sh"
+ },
+ {
+ "cmd": [
+ "adb",
+ "push",
+ "[START_DIR]/tmp/nanobench.sh",
+ "/cache/skia/"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "push nanobench.sh"
+ },
+ {
+ "cmd": [
+ "adb",
+ "logcat",
+ "-c"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "clear log"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh = sys.argv[2]\nsubprocess.check_call(['adb', 'shell', 'sh', bin_dir + sh])\ntry:\n sys.exit(int(subprocess.check_output(['adb', 'shell', 'cat',\n bin_dir + 'rc'])))\nexcept ValueError:\n print \"Couldn't read the return code. Probably killed for OOM.\"\n sys.exit(1)\n",
+ "/cache/skia/",
+ "nanobench.sh"
+ ],
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "name": "nanobench",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@sh = sys.argv[2]@@@",
+ "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['adb', 'shell', 'sh', bin_dir + sh])@@@",
+ "@@@STEP_LOG_LINE@python.inline@try:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(int(subprocess.check_output(['adb', 'shell', 'cat',@@@",
+ "@@@STEP_LOG_LINE@python.inline@ bin_dir + 'rc'])))@@@",
+ "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"Couldn't read the return code. Probably killed for OOM.\"@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
+ "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release/data",
+ "511"
+ ],
+ "name": "makedirs perf_dir",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
+ "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
+ "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "adb",
+ "pull",
+ "/cache/skia/perf",
+ "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release/data"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "pull /cache/skia/perf [CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release/data"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport os\nimport subprocess\nimport sys\nout = sys.argv[1]\nlog = subprocess.check_output(['adb', 'logcat', '-d'])\nfor line in log.split('\\n'):\n tokens = line.split()\n if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':\n addr, path = tokens[-2:]\n local = os.path.join(out, os.path.basename(path))\n if os.path.exists(local):\n sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n line = line.replace(addr, addr + ' ' + sym.strip())\n print line\n",
+ "[START_DIR]/out/Release"
+ ],
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "dump log",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import os@@@",
+ "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['adb', 'logcat', '-d'])@@@",
+ "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ tokens = line.split()@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
+ "@@@STEP_LOG_LINE@python.inline@ addr, path = tokens[-2:]@@@",
+ "@@@STEP_LOG_LINE@python.inline@ local = os.path.join(out, os.path.basename(path))@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(local):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@",
+ "@@@STEP_LOG_LINE@python.inline@ line = line.replace(addr, addr + ' ' + sym.strip())@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print line@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "adb",
+ "kill-server"
+ ],
+ "cwd": "[START_DIR]/skia",
+ "env": {
+ "BUILDTYPE": "Release",
+ "CHROME_HEADLESS": "1",
+ "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+ "SKIA_OUT": "[START_DIR]/out"
+ },
+ "infra_step": true,
+ "name": "kill adb server"
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+] \ No newline at end of file
diff --git a/infra/bots/recipe_modules/perf/example.py b/infra/bots/recipe_modules/perf/example.py
index b5de3658b2..ebbf3b32c7 100644
--- a/infra/bots/recipe_modules/perf/example.py
+++ b/infra/bots/recipe_modules/perf/example.py
@@ -28,6 +28,8 @@ TEST_BUILDERS = {
('Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-GN_'
'Android_Vulkan'),
'Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-GN_Android',
+ 'Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug',
+ 'Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release',
'Perf-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release-GN',
'Perf-Mac-Clang-MacMini6.2-GPU-HD4000-x86_64-Debug-CommandBuffer',
'Perf-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Release-GN',
@@ -81,6 +83,10 @@ def GenTests(api):
if 'Win' in builder:
test += api.platform('win', 64)
+ if 'Chromecast' in builder:
+ test += api.step_data('read chromecast ip',
+ stdout=api.raw_io.output('192.168.1.2:5555'))
+
yield test
builder = 'Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot'
diff --git a/infra/bots/recipe_modules/vars/api.py b/infra/bots/recipe_modules/vars/api.py
index 93910fecda..63e3e4f748 100644
--- a/infra/bots/recipe_modules/vars/api.py
+++ b/infra/bots/recipe_modules/vars/api.py
@@ -163,6 +163,11 @@ class SkiaVarsApi(recipe_api.RecipeApi):
# Executables go under _bin_dir, which, well, allows executable files.
self.android_bin_dir = '/data/local/tmp/'
+ if self.builder_cfg.get('os', '') == 'Chromecast':
+ # On the Chromecast, everything goes in the (~110M) /cache/skia
+ self.android_bin_dir = '/cache/skia/'
+ self.android_data_dir = '/cache/skia/'
+
@property
def upload_dm_results(self):
# TODO(borenet): Move this into the swarm_test recipe.
diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json
index 238fffdc26..086efb7be9 100644
--- a/infra/bots/tasks.json
+++ b/infra/bots/tasks.json
@@ -668,6 +668,18 @@
"Upload-Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-Android_Vulkan_Skpbench"
]
},
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug": {
+ "priority": 0.8,
+ "tasks": [
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug"
+ ]
+ },
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release": {
+ "priority": 0.8,
+ "tasks": [
+ "Upload-Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release"
+ ]
+ },
"Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Debug": {
"priority": 0.8,
"tasks": [
@@ -5962,6 +5974,86 @@
"max_attempts": 1,
"priority": 0.8
},
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug": {
+ "cipd_packages": [
+ {
+ "name": "skia/bots/skp",
+ "path": "skp",
+ "version": "version:41"
+ }
+ ],
+ "dependencies": [
+ "Build-Ubuntu-GCC-arm-Debug-Chromecast"
+ ],
+ "dimensions": [
+ "device_os:1.24_82923",
+ "device_type:chorizo",
+ "os:Android",
+ "pool:Skia"
+ ],
+ "execution_timeout_ns": 14400000000000,
+ "expiration_ns": 72000000000000,
+ "extra_args": [
+ "--workdir",
+ "../../..",
+ "swarm_perf",
+ "repository=<(REPO)",
+ "buildername=Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Debug",
+ "mastername=fake-master",
+ "buildnumber=2",
+ "slavename=fake-buildslave",
+ "nobuildbot=True",
+ "swarm_out_dir=${ISOLATED_OUTDIR}",
+ "revision=<(REVISION)",
+ "patch_storage=<(PATCH_STORAGE)",
+ "patch_issue=<(ISSUE)",
+ "patch_set=<(PATCHSET)"
+ ],
+ "io_timeout_ns": 2400000000000,
+ "isolate": "perf_skia.isolate",
+ "max_attempts": 1,
+ "priority": 0.8
+ },
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release": {
+ "cipd_packages": [
+ {
+ "name": "skia/bots/skp",
+ "path": "skp",
+ "version": "version:41"
+ }
+ ],
+ "dependencies": [
+ "Build-Ubuntu-GCC-arm-Release-Chromecast"
+ ],
+ "dimensions": [
+ "device_os:1.24_82923",
+ "device_type:chorizo",
+ "os:Android",
+ "pool:Skia"
+ ],
+ "execution_timeout_ns": 14400000000000,
+ "expiration_ns": 72000000000000,
+ "extra_args": [
+ "--workdir",
+ "../../..",
+ "swarm_perf",
+ "repository=<(REPO)",
+ "buildername=Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release",
+ "mastername=fake-master",
+ "buildnumber=2",
+ "slavename=fake-buildslave",
+ "nobuildbot=True",
+ "swarm_out_dir=${ISOLATED_OUTDIR}",
+ "revision=<(REVISION)",
+ "patch_storage=<(PATCH_STORAGE)",
+ "patch_issue=<(ISSUE)",
+ "patch_set=<(PATCHSET)"
+ ],
+ "io_timeout_ns": 2400000000000,
+ "isolate": "perf_skia.isolate",
+ "max_attempts": 1,
+ "priority": 0.8
+ },
"Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Debug": {
"cipd_packages": [
{
@@ -16442,6 +16534,36 @@
"isolate": "upload_nano_results.isolate",
"priority": 0.8
},
+ "Upload-Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release": {
+ "dependencies": [
+ "Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release"
+ ],
+ "dimensions": [
+ "cpu:x86-64-avx2",
+ "gpu:none",
+ "os:Ubuntu-14.04",
+ "pool:Skia"
+ ],
+ "extra_args": [
+ "--workdir",
+ "../../..",
+ "upload_nano_results",
+ "repository=<(REPO)",
+ "buildername=Perf-Chromecast-GCC-Chorizo-CPU-Cortex_A7-arm-Release",
+ "mastername=fake-master",
+ "buildnumber=2",
+ "slavename=fake-buildslave",
+ "nobuildbot=True",
+ "swarm_out_dir=${ISOLATED_OUTDIR}",
+ "revision=<(REVISION)",
+ "patch_storage=<(PATCH_STORAGE)",
+ "patch_issue=<(ISSUE)",
+ "patch_set=<(PATCHSET)",
+ "gs_bucket=skia-perf"
+ ],
+ "isolate": "upload_nano_results.isolate",
+ "priority": 0.8
+ },
"Upload-Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Release": {
"dependencies": [
"Perf-Mac-Clang-MacMini4.1-GPU-GeForce320M-x86_64-Release"