Remove chromecast jobs

If we need to support the Ultras, I vote we use taskdrivers instead of
these old recipes.

Bug: skia:9899
Change-Id: I9a3adedde5e7b28d90d3f836ccab0c7fe40abd38
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/270440
Reviewed-by: Eric Boren <borenet@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
diff --git a/infra/bots/gen_tasks_logic/gen_tasks_logic.go b/infra/bots/gen_tasks_logic/gen_tasks_logic.go
index 2e9ff2a..e17a9fe 100644
--- a/infra/bots/gen_tasks_logic/gen_tasks_logic.go
+++ b/infra/bots/gen_tasks_logic/gen_tasks_logic.go
@@ -487,9 +487,6 @@
 				ec = append([]string{"Android"}, ec...)
 			}
 			task_os = "Debian9"
-		} else if task_os == "Chromecast" {
-			task_os = "Debian9"
-			ec = append([]string{"Chromecast"}, ec...)
 		} else if strings.Contains(task_os, "ChromeOS") {
 			ec = append([]string{"Chromebook", "GLES"}, ec...)
 			task_os = "Debian9"
@@ -561,21 +558,20 @@
 	}
 	if os, ok := parts["os"]; ok {
 		d["os"], ok = map[string]string{
-			"Android":    "Android",
-			"Chromecast": "Android",
-			"ChromeOS":   "ChromeOS",
-			"Debian9":    DEFAULT_OS_DEBIAN,
-			"Mac":        DEFAULT_OS_MAC,
-			"Mac10.13":   "Mac-10.13.6",
-			"Mac10.14":   "Mac-10.14.3",
-			"Mac10.15":   "Mac-10.15.1",
-			"Ubuntu18":   "Ubuntu-18.04",
-			"Win":        DEFAULT_OS_WIN,
-			"Win10":      "Windows-10-18363",
-			"Win2019":    DEFAULT_OS_WIN,
-			"Win7":       "Windows-7-SP1",
-			"Win8":       "Windows-8.1-SP0",
-			"iOS":        "iOS-11.4.1",
+			"Android":  "Android",
+			"ChromeOS": "ChromeOS",
+			"Debian9":  DEFAULT_OS_DEBIAN,
+			"Mac":      DEFAULT_OS_MAC,
+			"Mac10.13": "Mac-10.13.6",
+			"Mac10.14": "Mac-10.14.3",
+			"Mac10.15": "Mac-10.15.1",
+			"Ubuntu18": "Ubuntu-18.04",
+			"Win":      DEFAULT_OS_WIN,
+			"Win10":    "Windows-10-18363",
+			"Win2019":  DEFAULT_OS_WIN,
+			"Win7":     "Windows-7-SP1",
+			"Win8":     "Windows-8.1-SP0",
+			"iOS":      "iOS-11.4.1",
 		}[os]
 		if !ok {
 			glog.Fatalf("Entry %q not found in OS mapping.", os)
@@ -596,12 +592,11 @@
 		d["os"] = DEFAULT_OS_DEBIAN
 	}
 	if parts["role"] == "Test" || parts["role"] == "Perf" {
-		if strings.Contains(parts["os"], "Android") || strings.Contains(parts["os"], "Chromecast") {
+		if strings.Contains(parts["os"], "Android") {
 			// For Android, the device type is a better dimension
 			// than CPU or GPU.
 			deviceInfo, ok := map[string][]string{
 				"AndroidOne":      {"sprout", "MOB30Q"},
-				"Chorizo":         {"chorizo", "1.30_109591"},
 				"GalaxyS6":        {"zerofltetmo", "NRD90M_G920TUVS6FRC1"},
 				"GalaxyS7_G930FD": {"herolte", "R16NW_G930FXXS2ERH6"}, // This is Oreo.
 				"GalaxyS9":        {"starlte", "R16NW_G960FXXU2BRJ8"}, // This is Oreo.
@@ -1065,15 +1060,11 @@
 	// benefit and we don't need the extra complexity, for now
 	rpiOS := []string{"Android", "ChromeOS", "iOS"}
 
-	if o := parts["os"]; strings.Contains(o, "Chromecast") {
-		// Chromecasts don't have enough disk space to fit all of the content,
-		// so we do a subset of the skps.
-		deps = append(deps, ISOLATE_SKP_NAME)
-	} else if e := parts["extra_config"]; strings.Contains(e, "Skpbench") {
+	if e := parts["extra_config"]; strings.Contains(e, "Skpbench") {
 		// Skpbench only needs skps
 		deps = append(deps, ISOLATE_SKP_NAME)
 		deps = append(deps, ISOLATE_MSKP_NAME)
-	} else if In(o, rpiOS) {
+	} else if o := parts["os"]; In(o, rpiOS) {
 		deps = append(deps, ISOLATE_SKP_NAME)
 		deps = append(deps, ISOLATE_SVG_NAME)
 		deps = append(deps, ISOLATE_SKIMAGE_NAME)
@@ -1175,9 +1166,6 @@
 		} else if !strings.Contains(name, "SKQP") {
 			task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("android_ndk_linux"))
 		}
-	} else if strings.Contains(name, "Chromecast") {
-		task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("cast_toolchain"))
-		task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("chromebook_arm_gles"))
 	} else if strings.Contains(name, "Chromebook") {
 		task.CipdPackages = append(task.CipdPackages, b.MustGetCipdPackageFromAsset("clang_linux"))
 		if parts["target_arch"] == "x86_64" {
diff --git a/infra/bots/jobs.json b/infra/bots/jobs.json
index 6cfd589..3035b52 100644
--- a/infra/bots/jobs.json
+++ b/infra/bots/jobs.json
@@ -16,12 +16,10 @@
   "Build-Debian9-Clang-arm-Debug-Android_ASAN_Vulkan",
   "Build-Debian9-Clang-arm-Debug-Android_Vulkan",
   "Build-Debian9-Clang-arm-Debug-Chromebook_GLES",
-  "Build-Debian9-Clang-arm-Debug-Chromecast",
   "Build-Debian9-Clang-arm-Release-Android",
   "Build-Debian9-Clang-arm-Release-Android_API26",
   "Build-Debian9-Clang-arm-Release-Android_Vulkan",
   "Build-Debian9-Clang-arm-Release-Chromebook_GLES",
-  "Build-Debian9-Clang-arm-Release-Chromecast",
   "Build-Debian9-Clang-arm-Release-Flutter_Android",
   "Build-Debian9-Clang-arm64-Debug-Android",
   "Build-Debian9-Clang-arm64-Debug-Android_ASAN",
@@ -205,7 +203,6 @@
   "Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All",
   "Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All",
   "Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All",
-  "Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All",
   "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN",
   "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs",
   "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All",
@@ -381,8 +378,6 @@
   "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All",
   "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All",
   "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All",
-  "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All",
-  "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All",
   "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker",
   "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker",
   "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker",
diff --git a/infra/bots/recipe_modules/build/api.py b/infra/bots/recipe_modules/build/api.py
index c4964d9..556d975 100644
--- a/infra/bots/recipe_modules/build/api.py
+++ b/infra/bots/recipe_modules/build/api.py
@@ -11,7 +11,6 @@
 from . import android
 from . import canvaskit
 from . import chromebook
-from . import chromecast
 from . import cmake
 from . import default
 from . import docker
@@ -32,9 +31,6 @@
     elif 'Chromebook' in b:
       self.compile_fn = chromebook.compile_fn
       self.copy_fn = chromebook.copy_build_products
-    elif 'Chromecast' in b:
-      self.compile_fn = chromecast.compile_fn
-      self.copy_fn = chromecast.copy_build_products
     elif 'Flutter' in b:
       self.compile_fn = flutter.compile_fn
       self.copy_fn = flutter.copy_build_products
diff --git a/infra/bots/recipe_modules/build/chromecast.py b/infra/bots/recipe_modules/build/chromecast.py
deleted file mode 100644
index 2414ac8..0000000
--- a/infra/bots/recipe_modules/build/chromecast.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# 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.
-
-from . import util
-
-def compile_fn(api, checkout_root, out_dir):
-  skia_dir      = checkout_root.join('skia')
-  configuration = api.vars.builder_cfg.get('configuration')
-  target_arch   = api.vars.builder_cfg.get('target_arch')
-
-  # TODO(kjlubick): can this toolchain be replaced/shared with chromebook?
-  toolchain_dir = api.vars.slave_dir.join('cast_toolchain', 'armv7a')
-  gles_dir = api.vars.slave_dir.join('chromebook_arm_gles')
-
-  target  = ['-target', 'armv7a-cros-linux-gnueabihf']
-  sysroot = ['--sysroot',
-             '%s/usr/armv7a-cros-linux-gnueabihf' % toolchain_dir]
-
-  extra_asmflags = target
-
-  extra_cflags = target + sysroot + [
-    '-I%s' % gles_dir.join('include'),
-    '-DMESA_EGL_NO_X11_HEADERS',
-    "-DSK_NO_COMMAND_BUFFER",
-    # Avoid unused warning with yyunput
-    '-Wno-error=unused-function',
-    # Makes the binary small enough to fit on the small disk.
-    '-g0',
-    ('-DDUMMY_cast_toolchain_version=%s' %
-     api.run.asset_version('cast_toolchain', skia_dir)),
-
-    # Force older math.h function versions that shipped on the Chorizo.
-    '-include', '%s' % skia_dir.join('tools', 'force_older_glibc_math.h'),
-  ]
-
-  extra_ldflags = target + sysroot + [
-    # Chromecast does not package libc++.
-    '-static-libstdc++', '-static-libgcc',
-    '-L%s' % toolchain_dir.join('lib'),
-    '-L%s' % gles_dir.join('lib'),
-    '-fuse-ld=gold',
-    '-B%s/usr/libexec/gcc' % toolchain_dir,
-  ]
-
-  quote = lambda x: '"%s"' % x
-  args = {
-    'cc':  quote(toolchain_dir.join('usr', 'bin', 'clang-9.elf')),
-    'cxx': quote(toolchain_dir.join('usr', 'bin', 'clang++-9.elf')),
-    'ar':  quote(toolchain_dir.join('bin','armv7a-cros-linux-gnueabihf-ar')),
-    'target_cpu': quote(target_arch),
-    'skia_use_fontconfig': 'false',
-    'skia_enable_gpu': 'true',
-    # The toolchain won't allow system libraries to be used
-    # when cross-compiling
-    'skia_use_system_freetype2': 'false',
-    # Makes the binary smaller
-    'skia_use_icu': 'false',
-    'skia_use_egl': 'true',
-    'werror': 'true',
-  }
-
-  if configuration != 'Debug':
-    args['is_debug'] = 'false'
-  args['extra_asmflags'] = repr(extra_asmflags).replace("'", '"')
-  args['extra_cflags'] = repr(extra_cflags).replace("'", '"')
-  args['extra_ldflags'] = repr(extra_ldflags).replace("'", '"')
-
-  gn_args = ' '.join('%s=%s' % (k,v) for (k,v) in sorted(args.iteritems()))
-  gn = skia_dir.join('bin', 'gn')
-
-  with api.context(cwd=skia_dir):
-    api.run(api.python, 'fetch-gn',
-            script=skia_dir.join('bin', 'fetch-gn'),
-            infra_step=True)
-    api.run(api.step, 'gn gen', cmd=[gn, 'gen', out_dir, '--args=' + gn_args])
-    api.run(api.step, 'ninja',
-            cmd=['ninja', '-C', out_dir, 'nanobench', 'dm'])
-
-
-def copy_build_products(api, src, dst):
-  util.copy_listed_files(api, src, dst, util.DEFAULT_BUILD_PRODUCTS)
diff --git a/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromecast.json b/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromecast.json
deleted file mode 100644
index 22a3fb2..0000000
--- a/infra/bots/recipe_modules/build/examples/full.expected/Build-Debian9-Clang-arm-Release-Chromecast.json
+++ /dev/null
@@ -1,104 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/cache/work/skia/infra/bots/assets/cast_toolchain/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get cast_toolchain VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "[START_DIR]/cache/work/skia/bin/fetch-gn"
-    ],
-    "cwd": "[START_DIR]/cache/work/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "fetch-gn"
-  },
-  {
-    "cmd": [
-      "[START_DIR]/cache/work/skia/bin/gn",
-      "gen",
-      "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm-Release-Chromecast/Release",
-      "--args=ar=\"[START_DIR]/cast_toolchain/armv7a/bin/armv7a-cros-linux-gnueabihf-ar\" cc=\"[START_DIR]/cast_toolchain/armv7a/usr/bin/clang-9.elf\" cxx=\"[START_DIR]/cast_toolchain/armv7a/usr/bin/clang++-9.elf\" extra_asmflags=[\"-target\", \"armv7a-cros-linux-gnueabihf\"] extra_cflags=[\"-target\", \"armv7a-cros-linux-gnueabihf\", \"--sysroot\", \"[START_DIR]/cast_toolchain/armv7a/usr/armv7a-cros-linux-gnueabihf\", \"-I[START_DIR]/chromebook_arm_gles/include\", \"-DMESA_EGL_NO_X11_HEADERS\", \"-DSK_NO_COMMAND_BUFFER\", \"-Wno-error=unused-function\", \"-g0\", \"-DDUMMY_cast_toolchain_version=42\", \"-include\", \"[START_DIR]/cache/work/skia/tools/force_older_glibc_math.h\"] extra_ldflags=[\"-target\", \"armv7a-cros-linux-gnueabihf\", \"--sysroot\", \"[START_DIR]/cast_toolchain/armv7a/usr/armv7a-cros-linux-gnueabihf\", \"-static-libstdc++\", \"-static-libgcc\", \"-L[START_DIR]/cast_toolchain/armv7a/lib\", \"-L[START_DIR]/chromebook_arm_gles/lib\", \"-fuse-ld=gold\", \"-B[START_DIR]/cast_toolchain/armv7a/usr/libexec/gcc\"] is_debug=false skia_enable_gpu=true skia_use_egl=true skia_use_fontconfig=false skia_use_icu=false skia_use_system_freetype2=false target_cpu=\"arm\" werror=true"
-    ],
-    "cwd": "[START_DIR]/cache/work/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "name": "gn gen"
-  },
-  {
-    "cmd": [
-      "ninja",
-      "-C",
-      "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm-Release-Chromecast/Release",
-      "nanobench",
-      "dm"
-    ],
-    "cwd": "[START_DIR]/cache/work/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "name": "ninja"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']\n\ntry:\n  os.makedirs(dst)\nexcept OSError as e:\n  if e.errno != errno.EEXIST:\n    raise\n\nfor pattern in build_products:\n  path = os.path.join(src, pattern)\n  for f in glob.glob(path):\n    dst_path = os.path.join(dst, os.path.relpath(f, src))\n    if not os.path.isdir(os.path.dirname(dst_path)):\n      os.makedirs(os.path.dirname(dst_path))\n    print 'Copying build product %s to %s' % (f, dst_path)\n    shutil.move(f, dst_path)\n",
-      "[START_DIR]/cache/work/skia/out/Build-Debian9-Clang-arm-Release-Chromecast/Release",
-      "[START_DIR]/[SWARM_OUT_DIR]/out/Release"
-    ],
-    "infra_step": true,
-    "name": "copy build products",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import errno@@@",
-      "@@@STEP_LOG_LINE@python.inline@import glob@@@",
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@import shutil@@@",
-      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@",
-      "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@",
-      "@@@STEP_LOG_LINE@python.inline@build_products = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'hello-opencl', 'hello-opencl.exe', 'nanobench', 'nanobench.exe', 'skpbench', 'skpbench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'skottie_tool', 'lib/*.so', 'run_testlab', 'skqp-universal-debug.apk', 'whitelist_devices.json']@@@",
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@try:@@@",
-      "@@@STEP_LOG_LINE@python.inline@  os.makedirs(dst)@@@",
-      "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@",
-      "@@@STEP_LOG_LINE@python.inline@  if e.errno != errno.EEXIST:@@@",
-      "@@@STEP_LOG_LINE@python.inline@    raise@@@",
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@for pattern in build_products:@@@",
-      "@@@STEP_LOG_LINE@python.inline@  path = os.path.join(src, pattern)@@@",
-      "@@@STEP_LOG_LINE@python.inline@  for f in glob.glob(path):@@@",
-      "@@@STEP_LOG_LINE@python.inline@    dst_path = os.path.join(dst, os.path.relpath(f, src))@@@",
-      "@@@STEP_LOG_LINE@python.inline@    if not os.path.isdir(os.path.dirname(dst_path)):@@@",
-      "@@@STEP_LOG_LINE@python.inline@      os.makedirs(os.path.dirname(dst_path))@@@",
-      "@@@STEP_LOG_LINE@python.inline@    print 'Copying build product %s to %s' % (f, dst_path)@@@",
-      "@@@STEP_LOG_LINE@python.inline@    shutil.move(f, dst_path)@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/infra/bots/recipe_modules/build/examples/full.expected/unknown-docker-image.json b/infra/bots/recipe_modules/build/examples/full.expected/unknown-docker-image.json
index cdae0d8..c406e29 100644
--- a/infra/bots/recipe_modules/build/examples/full.expected/unknown-docker-image.json
+++ b/infra/bots/recipe_modules/build/examples/full.expected/unknown-docker-image.json
@@ -19,7 +19,7 @@
       "    api.build(checkout_root=checkout_root, out_dir=out_dir)",
       "  File \"RECIPE_REPO[recipe_engine]/recipe_engine/recipe_api.py\", in _inner",
       "    return func(*a, **kw)",
-      "  File \"RECIPE_REPO[skia]/infra/bots/recipe_modules/build/api.py\", line 61, in __call__",
+      "  File \"RECIPE_REPO[skia]/infra/bots/recipe_modules/build/api.py\", line 57, in __call__",
       "    self.compile_fn(self.m, checkout_root, out_dir)",
       "  File \"RECIPE_REPO[skia]/infra/bots/recipe_modules/build/docker.py\", line 85, in compile_fn",
       "    raise Exception('Not implemented: ' + api.vars.builder_name)",
diff --git a/infra/bots/recipe_modules/build/examples/full.py b/infra/bots/recipe_modules/build/examples/full.py
index d35f8bf..3847820 100644
--- a/infra/bots/recipe_modules/build/examples/full.py
+++ b/infra/bots/recipe_modules/build/examples/full.py
@@ -34,7 +34,6 @@
   'Build-Debian9-Clang-arm-Release-Android_API26',
   'Build-Debian9-Clang-arm-Release-Android_ASAN',
   'Build-Debian9-Clang-arm-Release-Chromebook_GLES',
-  'Build-Debian9-Clang-arm-Release-Chromecast',
   'Build-Debian9-Clang-arm-Release-Flutter_Android',
   'Build-Debian9-Clang-arm64-Release-Android_Wuffs',
   'Build-Debian9-Clang-x86-devrel-Android_SKQP',
diff --git a/infra/bots/recipe_modules/flavor/android.py b/infra/bots/recipe_modules/flavor/android.py
index d13957f..30174ec 100644
--- a/infra/bots/recipe_modules/flavor/android.py
+++ b/infra/bots/recipe_modules/flavor/android.py
@@ -76,10 +76,6 @@
       "Nexus5x": 600000000,
     }
 
-  def _run(self, title, *cmd, **kwargs):
-    with self.m.context(cwd=self.m.path['start_dir'].join('skia')):
-      return self.m.run(self.m.step, title, cmd=list(cmd), **kwargs)
-
   def _adb(self, title, *cmd, **kwargs):
     # The only non-infra adb steps (dm / nanobench) happen to not use _adb().
     if 'infra_step' not in kwargs:
diff --git a/infra/bots/recipe_modules/flavor/api.py b/infra/bots/recipe_modules/flavor/api.py
index dc89baf..15bc28b 100644
--- a/infra/bots/recipe_modules/flavor/api.py
+++ b/infra/bots/recipe_modules/flavor/api.py
@@ -10,7 +10,6 @@
 
 from . import android
 from . import chromebook
-from . import chromecast
 from . import default
 from . import docker
 from . import ios
@@ -43,10 +42,6 @@
   return ('Android' in vars_api.extra_tokens or
           'Android' in vars_api.builder_cfg.get('os', ''))
 
-def is_chromecast(vars_api):
-  return ('Chromecast' in vars_api.extra_tokens or
-          'Chromecast' in vars_api.builder_cfg.get('os', ''))
-
 def is_chromebook(vars_api):
   return ('Chromebook' in vars_api.extra_tokens or
           'ChromeOS' in vars_api.builder_cfg.get('os', ''))
@@ -72,8 +67,6 @@
 class SkiaFlavorApi(recipe_api.RecipeApi):
   def get_flavor(self, vars_api):
     """Return a flavor utils object specific to the given builder."""
-    if is_chromecast(vars_api):
-      return chromecast.ChromecastFlavor(self)
     if is_chromebook(vars_api):
       return chromebook.ChromebookFlavor(self)
     if is_android(vars_api) and not is_test_skqp(vars_api):
diff --git a/infra/bots/recipe_modules/flavor/chromecast.py b/infra/bots/recipe_modules/flavor/chromecast.py
deleted file mode 100644
index cf8efae..0000000
--- a/infra/bots/recipe_modules/flavor/chromecast.py
+++ /dev/null
@@ -1,160 +0,0 @@
-# Copyright 2016 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.
-
-from recipe_engine import recipe_api
-
-from . import android
-from . import default
-
-
-"""Chromecast flavor, used for running code on Chromecast"""
-
-
-class ChromecastFlavor(android.AndroidFlavor):
-  def __init__(self, m):
-    super(ChromecastFlavor, self).__init__(m)
-    self._ever_ran_adb = False
-    self._user_ip = ''
-
-    # Disk space is extremely tight on the Chromecasts (~100M) There is not
-    # enough space on the android_data_dir (/cache/skia) to fit the images,
-    # resources, executable and output the dm images.  So, we have dm_out be
-    # on the tempfs (i.e. RAM) /dev/shm. (which is about 140M)
-    data_dir = '/cache/skia/'
-    self.device_dirs = default.DeviceDirs(
-        bin_dir        = '/cache/skia/bin',
-        dm_dir         = '/dev/shm/skia/dm_out',
-        perf_data_dir  = data_dir + 'perf',
-        resource_dir   = data_dir + 'resources',
-        images_dir     = data_dir + 'images',
-        lotties_dir    = data_dir + 'lotties',
-        skp_dir        = data_dir + 'skps',
-        svg_dir        = data_dir + 'svgs',
-        mskp_dir       = data_dir + 'mskp',
-        tmp_dir        = data_dir,
-        texttraces_dir = '')
-
-  @property
-  def user_ip_host(self):
-    if not self._user_ip:
-      self._user_ip = 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
-
-    return self._user_ip
-
-  @property
-  def user_ip(self):
-    return self.user_ip_host.split(':')[0]
-
-  def install(self):
-    super(ChromecastFlavor, self).install()
-    self._adb('mkdir ' + self.device_dirs.bin_dir,
-              'shell', 'mkdir', '-p', self.device_dirs.bin_dir)
-
-  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):
-    self.m.run(self.m.step, 'adb connect %s' % self.user_ip_host, cmd=['adb',
-      'connect', self.user_ip_host], 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 > (1.5 * 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)
-
-  def cleanup_steps(self):
-    if self._ever_ran_adb:
-      # To clean up disk space for next time
-      self._ssh('Delete executables', 'rm', '-r', self.device_dirs.bin_dir,
-                abort_on_failure=False, infra_step=True)
-      # Reconnect if was disconnected
-      self._adb('disconnect', 'disconnect')
-      self._connect_to_remote()
-      self.m.run(self.m.python.inline, 'dump log', program="""
-          import os
-          import subprocess
-          import sys
-          out = sys.argv[1]
-          log = subprocess.check_output(['adb', 'logcat', '-d'])
-          for line in log.split('\\n'):
-            tokens = line.split()
-            if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':
-              addr, path = tokens[-2:]
-              local = os.path.join(out, os.path.basename(path))
-              if os.path.exists(local):
-                try:
-                  sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])
-                  line = line.replace(addr, addr + ' ' + sym.strip())
-                except subprocess.CalledProcessError:
-                  pass
-            print line
-          """,
-          args=[self.host_dirs.bin_dir],
-          infra_step=True,
-          abort_on_failure=False)
-
-      self._adb('disconnect', 'disconnect')
-      self._adb('kill adb server', 'kill-server')
-
-  def _ssh(self, title, *cmd, **kwargs):
-    # Don't use -t -t (Force psuedo-tty allocation) like in the ChromeOS
-    # version because the pseudo-tty allocation seems to fail
-    # instantly when talking to a Chromecast.
-    # This was excacerbated when we migrated to kitchen and was marked by
-    # the symptoms of all the ssh commands instantly failing (even after
-    # connecting and authenticating) with exit code -1 (255)
-    ssh_cmd = ['ssh', '-oConnectTimeout=15', '-oBatchMode=yes',
-               '-T', 'root@%s' % self.user_ip] + list(cmd)
-
-    return self.m.run(self.m.step, title, cmd=ssh_cmd, **kwargs)
-
-  def step(self, name, cmd, **kwargs):
-    app = self.host_dirs.bin_dir.join(cmd[0])
-
-    self._adb('push %s' % cmd[0],
-              'push', app, self.device_dirs.bin_dir)
-
-    cmd[0] = '%s/%s' % (self.device_dirs.bin_dir, cmd[0])
-    self._ssh(str(name), *cmd, infra_step=False)
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json
deleted file mode 100644
index becc901..0000000
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json
+++ /dev/null
@@ -1,888 +0,0 @@
-[
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
-    ],
-    "name": "get swarming bot id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read chromecast ip",
-    "~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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555"
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "file.txt",
-      "file.txt"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push file.txt file.txt"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "file.txt"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read file.txt"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "file.txt"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm file.txt"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "rmtree",
-      "results_dir"
-    ],
-    "infra_step": true,
-    "name": "rmtree results_dir"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "results_dir"
-    ],
-    "infra_step": true,
-    "name": "makedirs results_dir"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "device_results_dir"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm device_results_dir"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "device_results_dir"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir device_results_dir"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/resources"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/resources"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/bin"
-  },
-  {
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get skp VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "42",
-      "[START_DIR]/tmp/SKP_VERSION"
-    ],
-    "infra_step": true,
-    "name": "write SKP_VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
-      "@@@STEP_LOG_END@SKP_VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/skps"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/SKP_VERSION /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get skimage VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "42",
-      "[START_DIR]/tmp/SK_IMAGE_VERSION"
-    ],
-    "infra_step": true,
-    "name": "write SK_IMAGE_VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@",
-      "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "/cache/skia/SK_IMAGE_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read /cache/skia/SK_IMAGE_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "/cache/skia/SK_IMAGE_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/SK_IMAGE_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/cache/skia/images"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/images"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/images"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/images"
-  },
-  {
-    "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 > (1.5 * 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]/skimage",
-      "/cache/skia/images"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/skimage/* /cache/skia/images",
-    "~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 > (1.5 * 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/SK_IMAGE_VERSION",
-      "/cache/skia/SK_IMAGE_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /cache/skia/SK_IMAGE_VERSION"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get svg VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "42",
-      "[START_DIR]/tmp/SVG_VERSION"
-    ],
-    "infra_step": true,
-    "name": "write SVG_VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@SVG_VERSION@42@@@",
-      "@@@STEP_LOG_END@SVG_VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "/cache/skia/SVG_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read /cache/skia/SVG_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "/cache/skia/SVG_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/SVG_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/cache/skia/svgs"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/svgs"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/svgs"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/svgs"
-  },
-  {
-    "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 > (1.5 * 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]/svg",
-      "/cache/skia/svgs"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/svg/* /cache/skia/svgs",
-    "~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 > (1.5 * 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/SVG_VERSION",
-      "/cache/skia/SVG_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/SVG_VERSION /cache/skia/SVG_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "[START_DIR]/build/nanobench",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push nanobench"
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "/cache/skia/bin/nanobench",
-      "--some-flag"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "name": "nanobench"
-  },
-  {
-    "cmd": [],
-    "name": "adb pull"
-  },
-  {
-    "cmd": [
-      "adb",
-      "pull",
-      "/cache/skia/perf",
-      "[CLEANUP]/adb_pull_tmp_1"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb pull.pull /cache/skia/perf",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "glob",
-      "[CLEANUP]/adb_pull_tmp_1",
-      "perf/*"
-    ],
-    "infra_step": true,
-    "name": "adb pull.list pulled files",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/1.png@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/2.png@@@",
-      "@@@STEP_LOG_END@glob@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/1.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 1.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/2.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 2.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "rm",
-      "-r",
-      "/cache/skia/bin"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "Delete executables"
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect"
-  },
-  {
-    "cmd": [
-      "adb",
-      "connect",
-      "192.168.1.2:5555"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555 (2)"
-  },
-  {
-    "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      try:\n        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n        line = line.replace(addr, addr + ' ' + sym.strip())\n      except subprocess.CalledProcessError:\n        pass\n  print line\n",
-      "[START_DIR]/build"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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@      try:@@@",
-      "@@@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@      except subprocess.CalledProcessError:@@@",
-      "@@@STEP_LOG_LINE@python.inline@        pass@@@",
-      "@@@STEP_LOG_LINE@python.inline@  print line@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect (2)"
-  },
-  {
-    "cmd": [
-      "adb",
-      "kill-server"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "kill adb server"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/infra/bots/recipe_modules/flavor/examples/full.py b/infra/bots/recipe_modules/flavor/examples/full.py
index c241c44..9a1b644 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.py
+++ b/infra/bots/recipe_modules/flavor/examples/full.py
@@ -75,7 +75,6 @@
   'Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android',
   'Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench_Mskp',
   'Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All',
-  'Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All',
   'Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-MSAN',
   'Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-ASAN',
   'Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN',
@@ -118,10 +117,6 @@
     )
     if 'Win' in buildername and not 'LenovoYogaC630' in buildername:
       test += api.platform('win', 64)
-    if 'Chromecast' in buildername:
-      test += api.step_data(
-          'read chromecast ip',
-          stdout=api.raw_io.output('192.168.1.2:5555'))
     yield test
 
   builder = 'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All'
diff --git a/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All.json b/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All.json
deleted file mode 100644
index 632f29b..0000000
--- a/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All.json
+++ /dev/null
@@ -1,457 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[START_DIR]/tmp"
-    ],
-    "infra_step": true,
-    "name": "makedirs tmp_dir"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
-    ],
-    "name": "get swarming bot id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read chromecast ip",
-    "~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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/resources"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/resources"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/bin"
-  },
-  {
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get skp VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "42",
-      "[START_DIR]/tmp/SKP_VERSION"
-    ],
-    "infra_step": true,
-    "name": "write SKP_VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
-      "@@@STEP_LOG_END@SKP_VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/skps"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/SKP_VERSION /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
-    ],
-    "name": "get swarming task id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "[START_DIR]/build/nanobench",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push nanobench"
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "/cache/skia/bin/nanobench",
-      "--nogpu",
-      "--config",
-      "8888",
-      "-i",
-      "/cache/skia/resources",
-      "--images",
-      "/cache/skia/resources/images/color_wheel.jpg",
-      "--skps",
-      "/cache/skia/skps",
-      "--pre_log",
-      "--dontReduceOpsTaskSplitting",
-      "--match",
-      "~matrixconvolution",
-      "~blur_image_filter",
-      "~blur_0.01",
-      "~GM_animated-image-blurs",
-      "~blendmode_mask_",
-      "~desk_carsvg.skp",
-      "~^path_text_clipped",
-      "~shapes_rrect_inner_rrect_50_500x500",
-      "~compositing_images",
-      "~bulkrect",
-      "--loops",
-      "1"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "name": "nanobench"
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "rm",
-      "-r",
-      "/cache/skia/bin"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "Delete executables"
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect"
-  },
-  {
-    "cmd": [
-      "adb",
-      "connect",
-      "192.168.1.2:5555"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555 (2)"
-  },
-  {
-    "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      try:\n        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n        line = line.replace(addr, addr + ' ' + sym.strip())\n      except subprocess.CalledProcessError:\n        pass\n  print line\n",
-      "[START_DIR]/build"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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@      try:@@@",
-      "@@@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@      except subprocess.CalledProcessError:@@@",
-      "@@@STEP_LOG_LINE@python.inline@        pass@@@",
-      "@@@STEP_LOG_LINE@python.inline@  print line@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect (2)"
-  },
-  {
-    "cmd": [
-      "adb",
-      "kill-server"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "kill adb server"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json b/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json
deleted file mode 100644
index fc118a7..0000000
--- a/infra/bots/recipes/perf.expected/Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json
+++ /dev/null
@@ -1,600 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[START_DIR]/tmp"
-    ],
-    "infra_step": true,
-    "name": "makedirs tmp_dir"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
-    ],
-    "name": "get swarming bot id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read chromecast ip",
-    "~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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/resources"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/resources"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/bin"
-  },
-  {
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get skp VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "42",
-      "[START_DIR]/tmp/SKP_VERSION"
-    ],
-    "infra_step": true,
-    "name": "write SKP_VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
-      "@@@STEP_LOG_END@SKP_VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/skps"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/perf"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/perf"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/perf"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
-    ],
-    "name": "get swarming task id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "[START_DIR]/build/nanobench",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push nanobench"
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "/cache/skia/bin/nanobench",
-      "--nocpu",
-      "--config",
-      "gles",
-      "-i",
-      "/cache/skia/resources",
-      "--images",
-      "/cache/skia/resources/images/color_wheel.jpg",
-      "--skps",
-      "/cache/skia/skps",
-      "--pre_log",
-      "--dontReduceOpsTaskSplitting",
-      "--match",
-      "~matrixconvolution",
-      "~blur_image_filter",
-      "~blur_0.01",
-      "~GM_animated-image-blurs",
-      "~blendmode_mask_",
-      "~desk_carsvg.skp",
-      "~^path_text_clipped",
-      "~shapes_rrect_inner_rrect_50_500x500",
-      "~compositing_images",
-      "~bulkrect",
-      "--outResultsFile",
-      "/cache/skia/perf/nanobench_abc123_1337000001.json",
-      "--properties",
-      "gitHash",
-      "abc123",
-      "swarming_bot_id",
-      "skia-bot-123",
-      "swarming_task_id",
-      "123456",
-      "--key",
-      "arch",
-      "arm",
-      "compiler",
-      "Clang",
-      "cpu_or_gpu",
-      "GPU",
-      "cpu_or_gpu_value",
-      "Cortex_A7",
-      "model",
-      "Chorizo",
-      "os",
-      "Chromecast"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "name": "nanobench"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "makedirs perf_dir"
-  },
-  {
-    "cmd": [],
-    "name": "adb pull"
-  },
-  {
-    "cmd": [
-      "adb",
-      "pull",
-      "/cache/skia/perf",
-      "[CLEANUP]/adb_pull_tmp_1"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb pull.pull /cache/skia/perf",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "glob",
-      "[CLEANUP]/adb_pull_tmp_1",
-      "perf/*"
-    ],
-    "infra_step": true,
-    "name": "adb pull.list pulled files",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/1.png@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/2.png@@@",
-      "@@@STEP_LOG_END@glob@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/1.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 1.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/2.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 2.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "rm",
-      "-r",
-      "/cache/skia/bin"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "Delete executables"
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect"
-  },
-  {
-    "cmd": [
-      "adb",
-      "connect",
-      "192.168.1.2:5555"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555 (2)"
-  },
-  {
-    "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      try:\n        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n        line = line.replace(addr, addr + ' ' + sym.strip())\n      except subprocess.CalledProcessError:\n        pass\n  print line\n",
-      "[START_DIR]/build"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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@      try:@@@",
-      "@@@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@      except subprocess.CalledProcessError:@@@",
-      "@@@STEP_LOG_LINE@python.inline@        pass@@@",
-      "@@@STEP_LOG_LINE@python.inline@  print line@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect (2)"
-  },
-  {
-    "cmd": [
-      "adb",
-      "kill-server"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "kill adb server"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/infra/bots/recipes/perf.py b/infra/bots/recipes/perf.py
index 4d3175e..018a3af 100644
--- a/infra/bots/recipes/perf.py
+++ b/infra/bots/recipes/perf.py
@@ -159,7 +159,7 @@
     args.extend(['--keepAlive', 'true'])
 
   # skia:9036
-  if 'NVIDIA_Shield' in bot or 'Chorizo' in bot:
+  if 'NVIDIA_Shield' in bot:
     args.extend(['--dontReduceOpsTaskSplitting'])
 
   # Some people don't like verbose output.
@@ -293,35 +293,6 @@
 
   args.extend(nanobench_flags(api, 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]
-    if api.vars.builder_cfg.get('cpu_or_gpu') == 'CPU':
-      args.extend(['--nogpu', '--config', '8888'])
-    elif api.vars.builder_cfg.get('cpu_or_gpu') == 'GPU':
-      args.extend(['--nocpu', '--config', 'gles'])
-    args.extend([
-      '-i', api.flavor.device_dirs.resource_dir,
-      '--images', api.flavor.device_path_join(
-          api.flavor.device_dirs.resource_dir, 'images', 'color_wheel.jpg'),
-      '--skps',  api.flavor.device_dirs.skp_dir,
-      '--pre_log',
-      '--dontReduceOpsTaskSplitting',
-      '--match', # skia:6687
-      '~matrixconvolution',
-      '~blur_image_filter',
-      '~blur_0.01',
-      '~GM_animated-image-blurs',
-      '~blendmode_mask_',
-      '~desk_carsvg.skp',
-      '~^path_text_clipped', # Bot times out; skia:7190
-      '~shapes_rrect_inner_rrect_50_500x500', # skia:7551
-      '~compositing_images',
-      '~bulkrect'
-    ])
-    if 'Debug' in api.vars.builder_name:
-      args.extend(['--loops', '1'])
-
   if upload_perf_results(b):
     now = api.time.utcnow()
     ts = int(calendar.timegm(now.utctimetuple()))
@@ -361,9 +332,7 @@
     env['IOS_MOUNT_POINT'] = api.vars.slave_dir.join('mnt_iosdevice')
   with api.env(env):
     try:
-      if 'Chromecast' in api.vars.builder_name:
-        api.flavor.install(resources=True, skps=True)
-      elif all(v in api.vars.builder_name for v in ['Android', 'CPU']):
+      if all(v in api.vars.builder_name for v in ['Android', 'CPU']):
         api.flavor.install(skps=True, images=True, svgs=True, resources=True, texttraces=True)
       else:
         api.flavor.install(skps=True, images=True, svgs=True, resources=True)
@@ -383,8 +352,6 @@
   'Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android',
   'Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All',
   'Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All',
-  'Perf-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Debug-All',
-  'Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All',
   'Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All',
   'Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN',
   'Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs',
@@ -429,11 +396,6 @@
     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-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All'
diff --git a/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json b/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json
deleted file mode 100644
index 60525cb..0000000
--- a/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All.json
+++ /dev/null
@@ -1,710 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[START_DIR]/tmp"
-    ],
-    "infra_step": true,
-    "name": "makedirs tmp_dir"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
-    ],
-    "name": "get swarming bot id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read chromecast ip",
-    "~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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/resources"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/resources"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/bin"
-  },
-  {
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get skp VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "42",
-      "[START_DIR]/tmp/SKP_VERSION"
-    ],
-    "infra_step": true,
-    "name": "write SKP_VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
-      "@@@STEP_LOG_END@SKP_VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/skps"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/SKP_VERSION /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "rmtree",
-      "[START_DIR]/test"
-    ],
-    "infra_step": true,
-    "name": "rmtree test"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[START_DIR]/test"
-    ],
-    "infra_step": true,
-    "name": "makedirs test"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/dev/shm/skia/dm_out"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /dev/shm/skia/dm_out"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/dev/shm/skia/dm_out"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /dev/shm/skia/dm_out"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = sys.argv[1]\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n  try:\n    with contextlib.closing(\n        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n      hashes = w.read()\n      with open(sys.argv[2], 'w') as f:\n        f.write(hashes)\n        break\n  except Exception as e:\n    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n    print e\n    if retry == RETRIES:\n      raise\n    waittime = WAIT_BASE * math.pow(2, retry)\n    print 'Retry in %d seconds.' % waittime\n    time.sleep(waittime)\n",
-      "https://example.com/hashes.txt",
-      "[START_DIR]/tmp/uninteresting_hashes.txt"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "get uninteresting hashes",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@import contextlib@@@",
-      "@@@STEP_LOG_LINE@python.inline@import math@@@",
-      "@@@STEP_LOG_LINE@python.inline@import socket@@@",
-      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
-      "@@@STEP_LOG_LINE@python.inline@import time@@@",
-      "@@@STEP_LOG_LINE@python.inline@import urllib2@@@",
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@",
-      "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@",
-      "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@",
-      "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@",
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@",
-      "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@",
-      "@@@STEP_LOG_LINE@python.inline@  try:@@@",
-      "@@@STEP_LOG_LINE@python.inline@    with contextlib.closing(@@@",
-      "@@@STEP_LOG_LINE@python.inline@        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@",
-      "@@@STEP_LOG_LINE@python.inline@      hashes = w.read()@@@",
-      "@@@STEP_LOG_LINE@python.inline@      with open(sys.argv[2], 'w') as f:@@@",
-      "@@@STEP_LOG_LINE@python.inline@        f.write(hashes)@@@",
-      "@@@STEP_LOG_LINE@python.inline@        break@@@",
-      "@@@STEP_LOG_LINE@python.inline@  except Exception as e:@@@",
-      "@@@STEP_LOG_LINE@python.inline@    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@",
-      "@@@STEP_LOG_LINE@python.inline@    print e@@@",
-      "@@@STEP_LOG_LINE@python.inline@    if retry == RETRIES:@@@",
-      "@@@STEP_LOG_LINE@python.inline@      raise@@@",
-      "@@@STEP_LOG_LINE@python.inline@    waittime = WAIT_BASE * math.pow(2, retry)@@@",
-      "@@@STEP_LOG_LINE@python.inline@    print 'Retry in %d seconds.' % waittime@@@",
-      "@@@STEP_LOG_LINE@python.inline@    time.sleep(waittime)@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "[START_DIR]/tmp/uninteresting_hashes.txt",
-      "/cache/skia/uninteresting_hashes.txt"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/uninteresting_hashes.txt /cache/skia/uninteresting_hashes.txt"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
-    ],
-    "name": "get swarming task id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "[START_DIR]/build/dm",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push dm"
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "/cache/skia/bin/dm",
-      "--resourcePath",
-      "/cache/skia/resources",
-      "--skps",
-      "/cache/skia/skps",
-      "--images",
-      "/cache/skia/resources/images/color_wheel.jpg",
-      "--nameByHash",
-      "--dontReduceOpsTaskSplitting",
-      "--properties",
-      "gitHash",
-      "abc123",
-      "builder",
-      "Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All",
-      "buildbucket_build_id",
-      "123454321",
-      "task_id",
-      "task_12345",
-      "swarming_bot_id",
-      "skia-bot-123",
-      "swarming_task_id",
-      "123456",
-      "--key",
-      "arch",
-      "arm",
-      "compiler",
-      "Clang",
-      "configuration",
-      "Release",
-      "cpu_or_gpu",
-      "CPU",
-      "cpu_or_gpu_value",
-      "Cortex_A7",
-      "model",
-      "Chorizo",
-      "os",
-      "Chromecast",
-      "style",
-      "default",
-      "--uninterestingHashesFile",
-      "/cache/skia/uninteresting_hashes.txt",
-      "--writePath",
-      "/dev/shm/skia/dm_out",
-      "--randomProcessorTest",
-      "--threads",
-      "0",
-      "--ignoreSigInt",
-      "--nogpu",
-      "--config",
-      "8888",
-      "--src",
-      "tests",
-      "gm",
-      "image",
-      "colorImage",
-      "--blacklist",
-      "_",
-      "image",
-      "gen_platf",
-      "error",
-      "_",
-      "test",
-      "_",
-      "GrShape",
-      "_",
-      "gm",
-      "_",
-      "compositor_quads_filter",
-      "--match",
-      "~bigbitmaprect_",
-      "~DrawBitmapRect",
-      "~drawbitmaprect",
-      "~GM_animated-image-blurs",
-      "~ImageFilterBlurLargeImage",
-      "~savelayer_clipmask",
-      "~TextBlobCache",
-      "~verylarge",
-      "--nonativeFonts",
-      "--verbose"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "name": "dm"
-  },
-  {
-    "cmd": [],
-    "name": "adb pull"
-  },
-  {
-    "cmd": [
-      "adb",
-      "pull",
-      "/dev/shm/skia/dm_out",
-      "[CLEANUP]/adb_pull_tmp_1"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb pull.pull /dev/shm/skia/dm_out",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "glob",
-      "[CLEANUP]/adb_pull_tmp_1",
-      "dm_out/*"
-    ],
-    "infra_step": true,
-    "name": "adb pull.list pulled files",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/1.png@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/2.png@@@",
-      "@@@STEP_LOG_END@glob@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/1.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 1.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/2.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 2.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "rm",
-      "-r",
-      "/cache/skia/bin"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "Delete executables"
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect"
-  },
-  {
-    "cmd": [
-      "adb",
-      "connect",
-      "192.168.1.2:5555"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555 (2)"
-  },
-  {
-    "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      try:\n        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n        line = line.replace(addr, addr + ' ' + sym.strip())\n      except subprocess.CalledProcessError:\n        pass\n  print line\n",
-      "[START_DIR]/build"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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@      try:@@@",
-      "@@@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@      except subprocess.CalledProcessError:@@@",
-      "@@@STEP_LOG_LINE@python.inline@        pass@@@",
-      "@@@STEP_LOG_LINE@python.inline@  print line@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect (2)"
-  },
-  {
-    "cmd": [
-      "adb",
-      "kill-server"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "kill adb server"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json b/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json
deleted file mode 100644
index c80989a..0000000
--- a/infra/bots/recipes/test.expected/Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All.json
+++ /dev/null
@@ -1,821 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[START_DIR]/tmp"
-    ],
-    "infra_step": true,
-    "name": "makedirs tmp_dir"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
-    ],
-    "name": "get swarming bot id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read chromecast ip",
-    "~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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/resources"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/resources"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /cache/skia/bin"
-  },
-  {
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "Get skp VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@VERSION@42@@@",
-      "@@@STEP_LOG_END@VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "42",
-      "[START_DIR]/tmp/SKP_VERSION"
-    ],
-    "infra_step": true,
-    "name": "write SKP_VERSION",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
-      "@@@STEP_LOG_END@SKP_VERSION@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "cat",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "read /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-f",
-      "/cache/skia/SKP_VERSION"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /cache/skia/skps"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/cache/skia/skps"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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 > (1.5 * 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": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/SKP_VERSION /cache/skia/SKP_VERSION"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "rmtree",
-      "[START_DIR]/test"
-    ],
-    "infra_step": true,
-    "name": "rmtree test"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[START_DIR]/test"
-    ],
-    "infra_step": true,
-    "name": "makedirs test"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "rm",
-      "-r",
-      "/dev/shm/skia/dm_out"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "rm /dev/shm/skia/dm_out"
-  },
-  {
-    "cmd": [
-      "adb",
-      "shell",
-      "mkdir",
-      "-p",
-      "/dev/shm/skia/dm_out"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "mkdir /dev/shm/skia/dm_out"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = sys.argv[1]\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n  try:\n    with contextlib.closing(\n        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n      hashes = w.read()\n      with open(sys.argv[2], 'w') as f:\n        f.write(hashes)\n        break\n  except Exception as e:\n    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n    print e\n    if retry == RETRIES:\n      raise\n    waittime = WAIT_BASE * math.pow(2, retry)\n    print 'Retry in %d seconds.' % waittime\n    time.sleep(waittime)\n",
-      "https://example.com/hashes.txt",
-      "[START_DIR]/tmp/uninteresting_hashes.txt"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "get uninteresting hashes",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@import contextlib@@@",
-      "@@@STEP_LOG_LINE@python.inline@import math@@@",
-      "@@@STEP_LOG_LINE@python.inline@import socket@@@",
-      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
-      "@@@STEP_LOG_LINE@python.inline@import time@@@",
-      "@@@STEP_LOG_LINE@python.inline@import urllib2@@@",
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@",
-      "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@",
-      "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@",
-      "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@",
-      "@@@STEP_LOG_LINE@python.inline@@@@",
-      "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@",
-      "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@",
-      "@@@STEP_LOG_LINE@python.inline@  try:@@@",
-      "@@@STEP_LOG_LINE@python.inline@    with contextlib.closing(@@@",
-      "@@@STEP_LOG_LINE@python.inline@        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@",
-      "@@@STEP_LOG_LINE@python.inline@      hashes = w.read()@@@",
-      "@@@STEP_LOG_LINE@python.inline@      with open(sys.argv[2], 'w') as f:@@@",
-      "@@@STEP_LOG_LINE@python.inline@        f.write(hashes)@@@",
-      "@@@STEP_LOG_LINE@python.inline@        break@@@",
-      "@@@STEP_LOG_LINE@python.inline@  except Exception as e:@@@",
-      "@@@STEP_LOG_LINE@python.inline@    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@",
-      "@@@STEP_LOG_LINE@python.inline@    print e@@@",
-      "@@@STEP_LOG_LINE@python.inline@    if retry == RETRIES:@@@",
-      "@@@STEP_LOG_LINE@python.inline@      raise@@@",
-      "@@@STEP_LOG_LINE@python.inline@    waittime = WAIT_BASE * math.pow(2, retry)@@@",
-      "@@@STEP_LOG_LINE@python.inline@    print 'Retry in %d seconds.' % waittime@@@",
-      "@@@STEP_LOG_LINE@python.inline@    time.sleep(waittime)@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "[START_DIR]/tmp/uninteresting_hashes.txt",
-      "/cache/skia/uninteresting_hashes.txt"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push [START_DIR]/tmp/uninteresting_hashes.txt /cache/skia/uninteresting_hashes.txt"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
-    ],
-    "name": "get swarming task id",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@python.inline@import os@@@",
-      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "push",
-      "[START_DIR]/build/dm",
-      "/cache/skia/bin"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "push dm"
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "/cache/skia/bin/dm",
-      "--resourcePath",
-      "/cache/skia/resources",
-      "--skps",
-      "/cache/skia/skps",
-      "--images",
-      "/cache/skia/resources/images/color_wheel.jpg",
-      "--nameByHash",
-      "--dontReduceOpsTaskSplitting",
-      "--properties",
-      "gitHash",
-      "abc123",
-      "builder",
-      "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All",
-      "buildbucket_build_id",
-      "123454321",
-      "task_id",
-      "task_12345",
-      "swarming_bot_id",
-      "skia-bot-123",
-      "swarming_task_id",
-      "123456",
-      "--key",
-      "arch",
-      "arm",
-      "compiler",
-      "Clang",
-      "configuration",
-      "Release",
-      "cpu_or_gpu",
-      "GPU",
-      "cpu_or_gpu_value",
-      "Cortex_A7",
-      "model",
-      "Chorizo",
-      "os",
-      "Chromecast",
-      "style",
-      "default",
-      "--uninterestingHashesFile",
-      "/cache/skia/uninteresting_hashes.txt",
-      "--writePath",
-      "/dev/shm/skia/dm_out",
-      "--randomProcessorTest",
-      "--threads",
-      "0",
-      "--ignoreSigInt",
-      "--nocpu",
-      "--config",
-      "gles",
-      "--src",
-      "tests",
-      "gm",
-      "image",
-      "colorImage",
-      "svg",
-      "--blacklist",
-      "_",
-      "gm",
-      "_",
-      "savelayer_clipmask",
-      "_",
-      "svg",
-      "_",
-      "svgparse_",
-      "_",
-      "image",
-      "gen_platf",
-      "error",
-      "_",
-      "test",
-      "_",
-      "GrShape",
-      "_",
-      "image",
-      "_",
-      "interlaced1.png",
-      "_",
-      "image",
-      "_",
-      "interlaced2.png",
-      "_",
-      "image",
-      "_",
-      "interlaced3.png",
-      "_",
-      "image",
-      "_",
-      ".arw",
-      "_",
-      "image",
-      "_",
-      ".cr2",
-      "_",
-      "image",
-      "_",
-      ".dng",
-      "_",
-      "image",
-      "_",
-      ".nef",
-      "_",
-      "image",
-      "_",
-      ".nrw",
-      "_",
-      "image",
-      "_",
-      ".orf",
-      "_",
-      "image",
-      "_",
-      ".raf",
-      "_",
-      "image",
-      "_",
-      ".rw2",
-      "_",
-      "image",
-      "_",
-      ".pef",
-      "_",
-      "image",
-      "_",
-      ".srw",
-      "_",
-      "image",
-      "_",
-      ".ARW",
-      "_",
-      "image",
-      "_",
-      ".CR2",
-      "_",
-      "image",
-      "_",
-      ".DNG",
-      "_",
-      "image",
-      "_",
-      ".NEF",
-      "_",
-      "image",
-      "_",
-      ".NRW",
-      "_",
-      "image",
-      "_",
-      ".ORF",
-      "_",
-      "image",
-      "_",
-      ".RAF",
-      "_",
-      "image",
-      "_",
-      ".RW2",
-      "_",
-      "image",
-      "_",
-      ".PEF",
-      "_",
-      "image",
-      "_",
-      ".SRW",
-      "_",
-      "gm",
-      "_",
-      "compositor_quads_filter",
-      "--match",
-      "~animated-image-blurs",
-      "~blur_0.01",
-      "~blur_image_filter",
-      "~check_small_sigma_offset",
-      "~imageblur2",
-      "~lighting",
-      "~longpathdash",
-      "~matrixconvolution",
-      "~textblobmixedsizes_df",
-      "~textblobrandomfont",
-      "~bigbitmaprect_",
-      "~DrawBitmapRect",
-      "~drawbitmaprect",
-      "~GM_animated-image-blurs",
-      "~ImageFilterBlurLargeImage",
-      "~savelayer_clipmask",
-      "~TextBlobCache",
-      "~verylarge",
-      "--nonativeFonts",
-      "--verbose"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "name": "dm"
-  },
-  {
-    "cmd": [],
-    "name": "adb pull"
-  },
-  {
-    "cmd": [
-      "adb",
-      "pull",
-      "/dev/shm/skia/dm_out",
-      "[CLEANUP]/adb_pull_tmp_1"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb pull.pull /dev/shm/skia/dm_out",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "glob",
-      "[CLEANUP]/adb_pull_tmp_1",
-      "dm_out/*"
-    ],
-    "infra_step": true,
-    "name": "adb pull.list pulled files",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/1.png@@@",
-      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/2.png@@@",
-      "@@@STEP_LOG_END@glob@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/1.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 1.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CLEANUP]/adb_pull_tmp_1/2.png",
-      "[START_DIR]/[SWARM_OUT_DIR]"
-    ],
-    "infra_step": true,
-    "name": "adb pull.copy 2.png",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "ssh",
-      "-oConnectTimeout=15",
-      "-oBatchMode=yes",
-      "-T",
-      "root@192.168.1.2",
-      "rm",
-      "-r",
-      "/cache/skia/bin"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "Delete executables"
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect"
-  },
-  {
-    "cmd": [
-      "adb",
-      "connect",
-      "192.168.1.2:5555"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "adb connect 192.168.1.2:5555 (2)"
-  },
-  {
-    "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      try:\n        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n        line = line.replace(addr, addr + ' ' + sym.strip())\n      except subprocess.CalledProcessError:\n        pass\n  print line\n",
-      "[START_DIR]/build"
-    ],
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "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@      try:@@@",
-      "@@@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@      except subprocess.CalledProcessError:@@@",
-      "@@@STEP_LOG_LINE@python.inline@        pass@@@",
-      "@@@STEP_LOG_LINE@python.inline@  print line@@@",
-      "@@@STEP_LOG_END@python.inline@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "adb",
-      "disconnect"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "disconnect (2)"
-  },
-  {
-    "cmd": [
-      "adb",
-      "kill-server"
-    ],
-    "cwd": "[START_DIR]/skia",
-    "env": {
-      "CHROME_HEADLESS": "1",
-      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
-    },
-    "infra_step": true,
-    "name": "kill adb server"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/infra/bots/recipes/test.py b/infra/bots/recipes/test.py
index 602621e..b43fc9f 100644
--- a/infra/bots/recipes/test.py
+++ b/infra/bots/recipes/test.py
@@ -75,7 +75,7 @@
     thread_limit = 4
 
   # These bots run out of memory easily.
-  if 'Chromecast' in bot or 'MotoG4' in bot or 'Nexus7' in bot:
+  if 'MotoG4' in bot or 'Nexus7' in bot:
     thread_limit = MAIN_THREAD_ONLY
 
   # Avoid issues with dynamically exceeding resource cache limits.
@@ -85,13 +85,6 @@
   if thread_limit is not None:
     args.extend(['--threads', str(thread_limit)])
 
-  # Android's kernel will occasionally attempt to kill our process, using
-  # SIGINT, in an effort to free up resources. If requested, that signal
-  # is ignored and dm will keep attempting to proceed until we actually
-  # exhaust the available resources.
-  if 'Chromecast' in bot:
-    args.append('--ignoreSigInt')
-
   if 'SwiftShader' in api.vars.extra_tokens:
     configs.extend(['gles', 'glesdft'])
     args.append('--disableDriverCorrectnessWorkarounds')
@@ -227,8 +220,7 @@
     if 'GPU' in bot and ('Nexus7' in bot or
                          'NVIDIA_Shield' in bot or
                          'Nexus5x' in bot or
-                         ('Win10' in bot and 'GTX660' in bot and 'Vulkan' in bot) or
-                         'Chorizo' in bot):
+                         ('Win10' in bot and 'GTX660' in bot and 'Vulkan' in bot)):
       blacklist(['_', 'gm', '_', 'savelayer_clipmask'])
 
     # skbug.com/9123
@@ -304,9 +296,6 @@
       # Just run GLES for now - maybe add gles_msaa4 in the future
       configs = ['gles']
 
-    if 'Chromecast' in bot:
-      configs = ['gles']
-
     # Test coverage counting path renderer.
     if 'CCPR' in bot:
       configs = [c for c in configs if c == 'gl' or c == 'gles']
@@ -488,7 +477,7 @@
   # avoid lots of images on Gold.
   blacklist('_ image gen_platf error')
 
-  if 'Android' in bot or 'iOS' in bot or 'Chromecast' in bot:
+  if 'Android' in bot or 'iOS' in bot:
     # This test crashes the N9 (perhaps because of large malloc/frees). It also
     # is fairly slow and not platform-specific. So we just disable it on all of
     # Android and iOS. skia:5438
@@ -663,29 +652,6 @@
     match.append('~PremulAlphaRoundTrip_Gpu')  # skia:7501
     match.append('~ReimportImageTextureWithMipLevels')  # skia:8090
 
-  if 'Chromecast' in bot:
-    if 'GPU' in bot:
-      # skia:6687
-      match.append('~animated-image-blurs')
-      match.append('~blur_0.01')
-      match.append('~blur_image_filter')
-      match.append('~check_small_sigma_offset')
-      match.append('~imageblur2')
-      match.append('~lighting')
-      match.append('~longpathdash')
-      match.append('~matrixconvolution')
-      match.append('~textblobmixedsizes_df')
-      match.append('~textblobrandomfont')
-    # Blacklisted to avoid OOM (we see DM just end with "broken pipe")
-    match.append('~bigbitmaprect_')
-    match.append('~DrawBitmapRect')
-    match.append('~drawbitmaprect')
-    match.append('~GM_animated-image-blurs')
-    match.append('~ImageFilterBlurLargeImage')
-    match.append('~savelayer_clipmask')
-    match.append('~TextBlobCache')
-    match.append('~verylarge')
-
   if 'GalaxyS6' in bot:
     match.append('~SpecialImage') # skia:6338
     match.append('~skbug6653') # skia:6653
@@ -762,10 +728,6 @@
     # skia:6857
     blacklist(['angle_d3d9_es2', 'gm', '_', 'lighting'])
 
-  if 'Chorizo' in bot:
-    # skia:8869
-    blacklist(['_', 'gm', '_', 'compositor_quads_filter'])
-
   if 'PowerVRGX6250' in bot:
     match.append('~gradients_view_perspective_nodither') #skia:6972
 
@@ -913,38 +875,25 @@
   properties.extend(['swarming_bot_id', api.vars.swarming_bot_id])
   properties.extend(['swarming_task_id', api.vars.swarming_task_id])
 
-  if 'Chromecast' in api.vars.builder_cfg.get('os', ''):
-    # Due to limited disk space, we only deal with skps and one image.
-    args = [
-      'dm',
-      '--resourcePath', api.flavor.device_dirs.resource_dir,
-      '--skps', api.flavor.device_dirs.skp_dir,
-      '--images', api.flavor.device_path_join(
-          api.flavor.device_dirs.resource_dir, 'images', 'color_wheel.jpg'),
-      '--nameByHash',
-      '--dontReduceOpsTaskSplitting',
-      '--properties'
-    ] + properties
-  else:
-    args = [
-      'dm',
-      '--resourcePath', api.flavor.device_dirs.resource_dir,
-      '--skps', api.flavor.device_dirs.skp_dir,
-      '--images', api.flavor.device_path_join(
-          api.flavor.device_dirs.images_dir, 'dm'),
-      '--colorImages', api.flavor.device_path_join(
-          api.flavor.device_dirs.images_dir, 'colorspace'),
-      '--nameByHash',
-      '--properties'
-    ] + properties
+  args = [
+    'dm',
+    '--resourcePath', api.flavor.device_dirs.resource_dir,
+    '--skps', api.flavor.device_dirs.skp_dir,
+    '--images', api.flavor.device_path_join(
+        api.flavor.device_dirs.images_dir, 'dm'),
+    '--colorImages', api.flavor.device_path_join(
+        api.flavor.device_dirs.images_dir, 'colorspace'),
+    '--nameByHash',
+    '--properties'
+  ] + properties
 
-    args.extend(['--svgs', api.flavor.device_dirs.svg_dir])
-    if 'Lottie' in api.vars.builder_cfg.get('extra_config', ''):
-      args.extend([
-        '--lotties',
-        api.flavor.device_path_join(
-            api.flavor.device_dirs.resource_dir, 'skottie'),
-        api.flavor.device_dirs.lotties_dir])
+  args.extend(['--svgs', api.flavor.device_dirs.svg_dir])
+  if 'Lottie' in api.vars.builder_cfg.get('extra_config', ''):
+    args.extend([
+      '--lotties',
+      api.flavor.device_path_join(
+          api.flavor.device_dirs.resource_dir, 'skottie'),
+      api.flavor.device_dirs.lotties_dir])
 
   args.append('--key')
   keys = key_params(api)
@@ -993,9 +942,7 @@
     env['IOS_MOUNT_POINT'] = api.vars.slave_dir.join('mnt_iosdevice')
   with api.context(env=env):
     try:
-      if 'Chromecast' in api.vars.builder_name:
-        api.flavor.install(resources=True, skps=True)
-      elif 'Lottie' in api.vars.builder_name:
+      if 'Lottie' in api.vars.builder_name:
         api.flavor.install(resources=True, lotties=True)
       else:
         api.flavor.install(skps=True, images=True, svgs=True, resources=True)
@@ -1023,8 +970,6 @@
   'Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android',
   ('Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-'
    'arm-Debug-All'),
-  'Test-Chromecast-Clang-Chorizo-CPU-Cortex_A7-arm-Release-All',
-  'Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All',
   'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN',
   'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs',
   'Test-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-shard_00_10-Coverage',
@@ -1104,11 +1049,6 @@
     if 'Win' in builder and not 'LenovoYogaC630' 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 = 'Test-Win8-Clang-Golo-CPU-AVX-x86-Debug-All'
diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json
index b1047fa..29b6a9e 100755
--- a/infra/bots/tasks.json
+++ b/infra/bots/tasks.json
@@ -86,11 +86,6 @@
         "Build-Debian9-Clang-arm-Debug-Chromebook_GLES"
       ]
     },
-    "Build-Debian9-Clang-arm-Debug-Chromecast": {
-      "tasks": [
-        "Build-Debian9-Clang-arm-Debug-Chromecast"
-      ]
-    },
     "Build-Debian9-Clang-arm-Release-Android": {
       "tasks": [
         "Build-Debian9-Clang-arm-Release-Android"
@@ -111,11 +106,6 @@
         "Build-Debian9-Clang-arm-Release-Chromebook_GLES"
       ]
     },
-    "Build-Debian9-Clang-arm-Release-Chromecast": {
-      "tasks": [
-        "Build-Debian9-Clang-arm-Release-Chromecast"
-      ]
-    },
     "Build-Debian9-Clang-arm-Release-Flutter_Android": {
       "tasks": [
         "Build-Debian9-Clang-arm-Release-Flutter_Android"
@@ -1042,11 +1032,6 @@
         "Upload-Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All"
       ]
     },
-    "Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": {
-      "tasks": [
-        "Upload-Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All"
-      ]
-    },
     "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": {
       "tasks": [
         "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN"
@@ -1927,16 +1912,6 @@
         "Upload-Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All"
       ]
     },
-    "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All": {
-      "tasks": [
-        "Upload-Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All"
-      ]
-    },
-    "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": {
-      "tasks": [
-        "Upload-Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All"
-      ]
-    },
     "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": {
       "tasks": [
         "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker"
@@ -4358,81 +4333,6 @@
       ],
       "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
     },
-    "Build-Debian9-Clang-arm-Debug-Chromecast": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "skia/bots/cast_toolchain",
-          "path": "cast_toolchain",
-          "version": "version:8"
-        },
-        {
-          "name": "skia/bots/chromebook_arm_gles",
-          "path": "chromebook_arm_gles",
-          "version": "version:0"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "compile",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Debug-Chromecast\",\"swarm_out_dir\":\"build\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes"
-      ],
-      "dimensions": [
-        "cpu:x86-64-Haswell_GCE",
-        "gpu:none",
-        "machine_type:n1-highcpu-64",
-        "os:Debian-9.8",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 3600000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "idempotent": true,
-      "io_timeout_ns": 3600000000000,
-      "isolate": "compile.isolate",
-      "max_attempts": 2,
-      "outputs": [
-        "build"
-      ],
-      "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
-    },
     "Build-Debian9-Clang-arm-Release-Android": {
       "caches": [
         {
@@ -4723,81 +4623,6 @@
       ],
       "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
     },
-    "Build-Debian9-Clang-arm-Release-Chromecast": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "skia/bots/cast_toolchain",
-          "path": "cast_toolchain",
-          "version": "version:8"
-        },
-        {
-          "name": "skia/bots/chromebook_arm_gles",
-          "path": "chromebook_arm_gles",
-          "version": "version:0"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "compile",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildername\":\"Build-Debian9-Clang-arm-Release-Chromecast\",\"swarm_out_dir\":\"build\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes"
-      ],
-      "dimensions": [
-        "cpu:x86-64-Haswell_GCE",
-        "gpu:none",
-        "machine_type:n1-highcpu-64",
-        "os:Debian-9.8",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 3600000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "idempotent": true,
-      "io_timeout_ns": 3600000000000,
-      "isolate": "compile.isolate",
-      "max_attempts": 2,
-      "outputs": [
-        "build"
-      ],
-      "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
-    },
     "Build-Debian9-Clang-arm-Release-Flutter_Android": {
       "caches": [
         {
@@ -18904,71 +18729,6 @@
         "perf"
       ]
     },
-    "Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "perf",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes",
-        "Build-Debian9-Clang-arm-Release-Chromecast",
-        "Housekeeper-PerCommit-IsolateSKP"
-      ],
-      "dimensions": [
-        "device_os:1.30_109591",
-        "device_type:chorizo",
-        "os:Android",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 14400000000000,
-      "expiration_ns": 72000000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "io_timeout_ns": 14400000000000,
-      "isolate": "perf_skia_bundled.isolate",
-      "max_attempts": 2,
-      "outputs": [
-        "perf"
-      ]
-    },
     "Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": {
       "caches": [
         {
@@ -31787,136 +31547,6 @@
         "test"
       ]
     },
-    "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "test",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes",
-        "Build-Debian9-Clang-arm-Debug-Chromecast",
-        "Housekeeper-PerCommit-IsolateSKP"
-      ],
-      "dimensions": [
-        "device_os:1.30_109591",
-        "device_type:chorizo",
-        "os:Android",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 14400000000000,
-      "expiration_ns": 72000000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "io_timeout_ns": 14400000000000,
-      "isolate": "test_skia_bundled.isolate",
-      "max_attempts": 2,
-      "outputs": [
-        "test"
-      ]
-    },
-    "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "test",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes",
-        "Build-Debian9-Clang-arm-Release-Chromecast",
-        "Housekeeper-PerCommit-IsolateSKP"
-      ],
-      "dimensions": [
-        "device_os:1.30_109591",
-        "device_type:chorizo",
-        "os:Android",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 14400000000000,
-      "expiration_ns": 72000000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "io_timeout_ns": 14400000000000,
-      "isolate": "test_skia_bundled.isolate",
-      "max_attempts": 2,
-      "outputs": [
-        "test"
-      ]
-    },
     "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": {
       "caches": [
         {
@@ -52850,73 +52480,6 @@
       "max_attempts": 2,
       "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com"
     },
-    "Upload-Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/gsutil",
-          "path": "cipd_bin_packages",
-          "version": "version:4.46"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "upload_nano_results",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes",
-        "Perf-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All"
-      ],
-      "dimensions": [
-        "cpu:x86-64-Haswell_GCE",
-        "gpu:none",
-        "machine_type:n1-highmem-2",
-        "os:Debian-9.8",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 3600000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "io_timeout_ns": 3600000000000,
-      "isolate": "swarm_recipe.isolate",
-      "max_attempts": 2,
-      "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com"
-    },
     "Upload-Perf-Debian9-Clang-GCE-CPU-AVX2-x86_64-Release-All": {
       "caches": [
         {
@@ -63869,140 +63432,6 @@
       "max_attempts": 2,
       "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com"
     },
-    "Upload-Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/gsutil",
-          "path": "cipd_bin_packages",
-          "version": "version:4.46"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "upload_dm_results",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes",
-        "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Debug-All"
-      ],
-      "dimensions": [
-        "cpu:x86-64-Haswell_GCE",
-        "gpu:none",
-        "machine_type:n1-highmem-2",
-        "os:Debian-9.8",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 3600000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "io_timeout_ns": 3600000000000,
-      "isolate": "swarm_recipe.isolate",
-      "max_attempts": 2,
-      "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com"
-    },
-    "Upload-Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All": {
-      "caches": [
-        {
-          "name": "vpython",
-          "path": "cache/vpython"
-        }
-      ],
-      "cipd_packages": [
-        {
-          "name": "infra/tools/luci/kitchen/${platform}",
-          "path": ".",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci-auth/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/tools/luci/vpython/${platform}",
-          "path": "cipd_bin_packages",
-          "version": "git_revision:c674023879026da0993d36df8c96153cfd31e5a1"
-        },
-        {
-          "name": "infra/gsutil",
-          "path": "cipd_bin_packages",
-          "version": "version:4.46"
-        }
-      ],
-      "command": [
-        "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}",
-        "-u",
-        "skia/infra/bots/run_recipe.py",
-        "${ISOLATED_OUTDIR}",
-        "upload_dm_results",
-        "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}",
-        "skia"
-      ],
-      "dependencies": [
-        "Housekeeper-PerCommit-BundleRecipes",
-        "Test-Chromecast-Clang-Chorizo-GPU-Cortex_A7-arm-Release-All"
-      ],
-      "dimensions": [
-        "cpu:x86-64-Haswell_GCE",
-        "gpu:none",
-        "machine_type:n1-highmem-2",
-        "os:Debian-9.8",
-        "pool:Skia"
-      ],
-      "env_prefixes": {
-        "PATH": [
-          "cipd_bin_packages",
-          "cipd_bin_packages/bin"
-        ],
-        "VPYTHON_VIRTUALENV_ROOT": [
-          "cache/vpython"
-        ]
-      },
-      "execution_timeout_ns": 3600000000000,
-      "extra_tags": {
-        "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations"
-      },
-      "io_timeout_ns": 3600000000000,
-      "isolate": "swarm_recipe.isolate",
-      "max_attempts": 2,
-      "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com"
-    },
     "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": {
       "caches": [
         {