Enable ios on Raspberry Pi

Adds more jobs to iOS testing and switches to 
RPi based hosts. 

Bug: skia:
Change-Id: I0124c6554173fa3b22b077a198612bb30691d1fb
Reviewed-on: https://skia-review.googlesource.com/11521
Commit-Queue: Stephan Altmueller <stephana@google.com>
Reviewed-by: Eric Boren <borenet@google.com>
diff --git a/infra/bots/gen_tasks.go b/infra/bots/gen_tasks.go
index d3f14d4..d14f881 100644
--- a/infra/bots/gen_tasks.go
+++ b/infra/bots/gen_tasks.go
@@ -173,7 +173,18 @@
 		} else if strings.Contains(parts["os"], "iOS") {
 			d["device"] = map[string]string{
 				"iPadMini4": "iPad5,1",
+				"iPhone6":   "iPhone7,2",
+				"iPhone7":   "iPhone9,1",
+				"iPadPro":   "iPad6,3",
 			}[parts["model"]]
+
+			// TODO(stephana): Remove once we are fully switched to RaspberryPi.
+
+			// Use the RPi host.
+			if parts["extra_config"] == "RaspberryPi" {
+				d["os"] = "iOS-10.3.1"
+				d["machine_type"] = "RaspberryPi"
+			}
 		} else if parts["cpu_or_gpu"] == "CPU" {
 			d["gpu"] = "none"
 			d["cpu"] = map[string]string{
diff --git a/infra/bots/ios_bin.isolate b/infra/bots/ios_bin.isolate
index 524dad2..1994eb6 100644
--- a/infra/bots/ios_bin.isolate
+++ b/infra/bots/ios_bin.isolate
@@ -8,5 +8,13 @@
         ],
       },
     }],
+    ['OS=="iOS-10.3.1"', {
+      'variables': {
+        'files': [
+          '../../platform_tools/ios/bin/',
+          '../../gn/package_ios.py',
+        ],
+      },
+    }],
   ],
 }
diff --git a/infra/bots/jobs.json b/infra/bots/jobs.json
index 16e3117..23ac2d0 100644
--- a/infra/bots/jobs.json
+++ b/infra/bots/jobs.json
@@ -210,6 +210,12 @@
   "Perf-Win8-MSVC-Golo-CPU-AVX-x86_64-Release",
   "Perf-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Debug",
   "Perf-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Release",
+  "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi",
+  "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi",
+  "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi",
+  "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi",
+  "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi",
+  "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi",
   "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-Android",
   "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-Android",
   "Test-Android-Clang-Ci20-CPU-IngenicJZ4780-mipsel-Debug-Android",
@@ -355,5 +361,11 @@
   "Test-Win8-MSVC-Golo-CPU-AVX-x86_64-Release",
   "Test-Win8-MSVC-Golo-CPU-AVX-x86_64-Release-GDI",
   "Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Debug",
-  "Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Release"
+  "Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Release",
+  "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi",
+  "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi",
+  "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi",
+  "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi",
+  "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi",
+  "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi"
 ]
diff --git a/infra/bots/recipe_modules/flavor/example.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Debug.json b/infra/bots/recipe_modules/flavor/example.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Debug.json
index 27640e4..3c7b431 100644
--- a/infra/bots/recipe_modules/flavor/example.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Debug.json
+++ b/infra/bots/recipe_modules/flavor/example.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Debug.json
@@ -90,6 +90,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file file.txt"
   },
   {
@@ -140,6 +141,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm device_results_dir"
   },
   {
@@ -153,10 +155,54 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir device_results_dir"
   },
   {
     "cmd": [
+      "ios.py"
+    ],
+    "env": {
+      "BUILDTYPE": "Debug",
+      "CHROME_HEADLESS": "1",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "setup_device"
+  },
+  {
+    "cmd": [
+      "ideviceinstaller",
+      "-i",
+      "[START_DIR]/out/Debug/dm.app"
+    ],
+    "env": {
+      "BUILDTYPE": "Debug",
+      "CHROME_HEADLESS": "1",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "install_dm"
+  },
+  {
+    "cmd": [
+      "ideviceinstaller",
+      "-i",
+      "[START_DIR]/out/Debug/nanobench.app"
+    ],
+    "env": {
+      "BUILDTYPE": "Debug",
+      "CHROME_HEADLESS": "1",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "install_nanobench"
+  },
+  {
+    "cmd": [
       "[START_DIR]/skia/platform_tools/ios/bin/ios_push_if_needed",
       "[START_DIR]/skia/resources",
       "resources"
@@ -167,6 +213,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skia/resources"
   },
   {
@@ -202,6 +249,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SKP_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -216,6 +264,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SKP_VERSION"
   },
   {
@@ -229,6 +278,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm skps"
   },
   {
@@ -242,6 +292,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir skps"
   },
   {
@@ -256,6 +307,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skp"
   },
   {
@@ -270,6 +322,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SKP_VERSION"
   },
   {
@@ -305,6 +358,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SK_IMAGE_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -319,6 +373,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SK_IMAGE_VERSION"
   },
   {
@@ -332,6 +387,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm images"
   },
   {
@@ -345,6 +401,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir images"
   },
   {
@@ -359,6 +416,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skimage"
   },
   {
@@ -373,6 +431,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SK_IMAGE_VERSION"
   },
   {
@@ -408,6 +467,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SVG_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -422,6 +482,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SVG_VERSION"
   },
   {
@@ -435,6 +496,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm svgs"
   },
   {
@@ -448,6 +510,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir svgs"
   },
   {
@@ -462,6 +525,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/svg"
   },
   {
@@ -476,14 +540,14 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SVG_VERSION"
   },
   {
     "cmd": [
-      "ios-deploy",
-      "-b",
-      "[START_DIR]/out/Debug/dm.app",
-      "-I",
+      "idevice-app-runner",
+      "-s",
+      "com.google.dm",
       "--args",
       "--some-flag"
     ],
@@ -507,6 +571,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "pull_if_needed dm"
   },
   {
@@ -521,6 +586,7 @@
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "pull_if_needed perf"
   },
   {
diff --git a/infra/bots/recipe_modules/flavor/ios_flavor.py b/infra/bots/recipe_modules/flavor/ios_flavor.py
index 976e840..cc6143a 100644
--- a/infra/bots/recipe_modules/flavor/ios_flavor.py
+++ b/infra/bots/recipe_modules/flavor/ios_flavor.py
@@ -9,12 +9,21 @@
 import gn_flavor
 import os
 
-# Infra step failures interact really annoyingly with swarming retries.
-kInfraStep = False
-
 class iOSFlavorUtils(gn_flavor.GNFlavorUtils):
 
   def install(self):
+    # Set up the device
+    self.m.run(self.m.step, 'setup_device', cmd=['ios.py'], infra_step=True)
+
+    # Install the app.
+    for app_name in ['dm', 'nanobench']:
+      app_package = self.m.vars.skia_out.join(self.m.vars.configuration,
+                                              '%s.app' % app_name)
+      self.m.run(self.m.step,
+                'install_' + app_name,
+                cmd=['ideviceinstaller', '-i', app_package],
+                infra_step=True)
+
     self.device_dirs = default_flavor.DeviceDirs(
         dm_dir='dm',
         perf_data_dir='perf',
@@ -33,21 +42,20 @@
     for app in ['dm', 'nanobench']:
       self._py('package ' + app,
               self.m.vars.skia_dir.join('gn', 'package_ios.py'),
-              args=[self.out_dir.join(app)])
+              args=[self.out_dir.join(app)], infra_step=True)
 
   def step(self, name, cmd, env=None, **kwargs):
-    app = self.m.vars.skia_out.join(self.m.vars.configuration, cmd[0])
-
-    self._run(name,
-              ['ios-deploy', '-b', '%s.app' % app,
-               '-I', '--args', ' '.join(map(str, cmd[1:]))])
+    bundle_id = 'com.google.%s' % cmd[0]
+    self.m.run(self.m.step, name,
+               cmd=['idevice-app-runner', '-s', bundle_id, '--args'] +
+                    map(str, cmd[1:]))
 
   def _run_ios_script(self, script, first, *rest):
     full = self.m.vars.skia_dir.join('platform_tools/ios/bin/ios_' + script)
     self.m.run(self.m.step,
                name = '%s %s' % (script, first),
                cmd = [full, first] + list(rest),
-               infra_step=kInfraStep)
+               infra_step=True)
 
   def copy_file_to_device(self, host, device):
     self._run_ios_script('push_file', host, device)
@@ -71,6 +79,6 @@
                     name = 'cat_file %s' % path,
                     cmd = [full, path],
                     stdout=self.m.raw_io.output(),
-                    infra_step=kInfraStep,
+                    infra_step=True,
                     **kwargs)
     return rv.stdout.rstrip() if rv and rv.stdout else None
diff --git a/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json b/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json
index 263cbd8..26f11e0 100644
--- a/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json
+++ b/infra/bots/recipes/perf.expected/Perf-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json
@@ -1,6 +1,55 @@
 [
   {
     "cmd": [
+      "ios.py"
+    ],
+    "env": {
+      "BUILDTYPE": "Release",
+      "CHROME_HEADLESS": "1",
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "setup_device"
+  },
+  {
+    "cmd": [
+      "ideviceinstaller",
+      "-i",
+      "[START_DIR]/out/Release/dm.app"
+    ],
+    "env": {
+      "BUILDTYPE": "Release",
+      "CHROME_HEADLESS": "1",
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "install_dm"
+  },
+  {
+    "cmd": [
+      "ideviceinstaller",
+      "-i",
+      "[START_DIR]/out/Release/nanobench.app"
+    ],
+    "env": {
+      "BUILDTYPE": "Release",
+      "CHROME_HEADLESS": "1",
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "install_nanobench"
+  },
+  {
+    "cmd": [
       "[START_DIR]/skia/platform_tools/ios/bin/ios_push_if_needed",
       "[START_DIR]/skia/resources",
       "resources"
@@ -9,9 +58,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skia/resources"
   },
   {
@@ -23,7 +74,8 @@
       "/path/to/tmp/"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "Get downloaded SKP VERSION"
@@ -37,7 +89,8 @@
       "[START_DIR]/tmp/SKP_VERSION"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "write SKP_VERSION"
@@ -51,9 +104,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SKP_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -66,9 +121,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SKP_VERSION"
   },
   {
@@ -80,9 +137,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm skps"
   },
   {
@@ -94,9 +153,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir skps"
   },
   {
@@ -109,9 +170,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skp"
   },
   {
@@ -124,9 +187,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SKP_VERSION"
   },
   {
@@ -138,7 +203,8 @@
       "/path/to/tmp/"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "Get downloaded skimage VERSION"
@@ -152,7 +218,8 @@
       "[START_DIR]/tmp/SK_IMAGE_VERSION"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "write SK_IMAGE_VERSION"
@@ -166,9 +233,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SK_IMAGE_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -181,9 +250,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SK_IMAGE_VERSION"
   },
   {
@@ -195,9 +266,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm images"
   },
   {
@@ -209,9 +282,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir images"
   },
   {
@@ -224,9 +299,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skimage"
   },
   {
@@ -239,9 +316,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SK_IMAGE_VERSION"
   },
   {
@@ -253,7 +332,8 @@
       "/path/to/tmp/"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "Get downloaded SVG VERSION"
@@ -267,7 +347,8 @@
       "[START_DIR]/tmp/SVG_VERSION"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "write SVG_VERSION"
@@ -281,9 +362,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SVG_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -296,9 +379,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SVG_VERSION"
   },
   {
@@ -310,9 +395,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm svgs"
   },
   {
@@ -324,9 +411,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir svgs"
   },
   {
@@ -339,9 +428,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/svg"
   },
   {
@@ -354,9 +445,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SVG_VERSION"
   },
   {
@@ -368,9 +461,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm perf"
   },
   {
@@ -382,9 +477,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir perf"
   },
   {
@@ -394,7 +491,8 @@
       "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "name": "get swarming bot id",
     "stdout": "/path/to/tmp/",
@@ -411,7 +509,8 @@
       "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "name": "get swarming task id",
     "stdout": "/path/to/tmp/",
@@ -423,17 +522,88 @@
   },
   {
     "cmd": [
-      "ios-deploy",
-      "-b",
-      "[START_DIR]/out/Release/nanobench.app",
-      "-I",
+      "idevice-app-runner",
+      "-s",
+      "com.google.nanobench",
       "--args",
-      "--undefok -i resources --skps skps --images images/nanobench --svgs svgs --nocpu --pre_log --images --gpuStatsDump true --scales 1.0 1.1 --skps ignore_skps --config 8888 nonrendering hwui gles --match ~blurroundrect ~patch_grid ~desk_carsvg ~keymobi ~path_hairline ~GLInstancedArraysBench ~inc0.gif ~inc1.gif ~incInterlaced.gif ~inc0.jpg ~incGray.jpg ~inc0.wbmp ~inc1.wbmp ~inc0.webp ~inc1.webp ~inc0.ico ~inc1.ico ~inc0.png ~inc1.png ~inc2.png ~inc12.png ~inc13.png ~inc14.png ~inc0.webp ~inc1.webp --outResultsFile perf/nanobench_abc123_1337000001.json --properties gitHash abc123 swarming_bot_id  swarming_task_id  --key arch arm compiler Clang cpu_or_gpu GPU cpu_or_gpu_value GX6450 model iPadMini4 os iOS"
+      "--undefok",
+      "-i",
+      "resources",
+      "--skps",
+      "skps",
+      "--images",
+      "images/nanobench",
+      "--svgs",
+      "svgs",
+      "--nocpu",
+      "--pre_log",
+      "--images",
+      "--gpuStatsDump",
+      "true",
+      "--scales",
+      "1.0",
+      "1.1",
+      "--skps",
+      "ignore_skps",
+      "--config",
+      "8888",
+      "nonrendering",
+      "hwui",
+      "gles",
+      "--match",
+      "~blurroundrect",
+      "~patch_grid",
+      "~desk_carsvg",
+      "~keymobi",
+      "~path_hairline",
+      "~GLInstancedArraysBench",
+      "~inc0.gif",
+      "~inc1.gif",
+      "~incInterlaced.gif",
+      "~inc0.jpg",
+      "~incGray.jpg",
+      "~inc0.wbmp",
+      "~inc1.wbmp",
+      "~inc0.webp",
+      "~inc1.webp",
+      "~inc0.ico",
+      "~inc1.ico",
+      "~inc0.png",
+      "~inc1.png",
+      "~inc2.png",
+      "~inc12.png",
+      "~inc13.png",
+      "~inc14.png",
+      "~inc0.webp",
+      "~inc1.webp",
+      "--outResultsFile",
+      "perf/nanobench_abc123_1337000001.json",
+      "--properties",
+      "gitHash",
+      "abc123",
+      "swarming_bot_id",
+      "",
+      "swarming_task_id",
+      "",
+      "--key",
+      "arch",
+      "arm",
+      "compiler",
+      "Clang",
+      "cpu_or_gpu",
+      "GPU",
+      "cpu_or_gpu_value",
+      "GX6450",
+      "model",
+      "iPadMini4",
+      "os",
+      "iOS"
     ],
     "env": {
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
@@ -448,7 +618,8 @@
       "511"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.nanobench"
+      "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "name": "makedirs perf_dir",
     "~followup_annotations": [
@@ -474,9 +645,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.nanobench",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "pull_if_needed perf"
   },
   {
diff --git a/infra/bots/recipes/perf.py b/infra/bots/recipes/perf.py
index 57ce232..2d3cef0 100644
--- a/infra/bots/recipes/perf.py
+++ b/infra/bots/recipes/perf.py
@@ -300,6 +300,7 @@
   env = {}
   if 'iOS' in api.vars.builder_name:
     env['IOS_BUNDLE_ID'] = 'com.google.nanobench'
+    env['IOS_MOUNT_POINT'] = api.vars.slave_dir.join('mnt_iosdevice')
   with api.env(env):
     try:
       if 'Chromecast' in api.vars.builder_name:
diff --git a/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json b/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json
index b5493e5..8bfb72a 100644
--- a/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json
+++ b/infra/bots/recipes/test.expected/Test-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release.json
@@ -1,6 +1,55 @@
 [
   {
     "cmd": [
+      "ios.py"
+    ],
+    "env": {
+      "BUILDTYPE": "Release",
+      "CHROME_HEADLESS": "1",
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "setup_device"
+  },
+  {
+    "cmd": [
+      "ideviceinstaller",
+      "-i",
+      "[START_DIR]/out/Release/dm.app"
+    ],
+    "env": {
+      "BUILDTYPE": "Release",
+      "CHROME_HEADLESS": "1",
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "install_dm"
+  },
+  {
+    "cmd": [
+      "ideviceinstaller",
+      "-i",
+      "[START_DIR]/out/Release/nanobench.app"
+    ],
+    "env": {
+      "BUILDTYPE": "Release",
+      "CHROME_HEADLESS": "1",
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
+      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
+      "SKIA_OUT": "[START_DIR]/out"
+    },
+    "infra_step": true,
+    "name": "install_nanobench"
+  },
+  {
+    "cmd": [
       "[START_DIR]/skia/platform_tools/ios/bin/ios_push_if_needed",
       "[START_DIR]/skia/resources",
       "resources"
@@ -9,9 +58,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skia/resources"
   },
   {
@@ -23,7 +74,8 @@
       "/path/to/tmp/"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "Get downloaded SKP VERSION"
@@ -37,7 +89,8 @@
       "[START_DIR]/tmp/SKP_VERSION"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "write SKP_VERSION"
@@ -51,9 +104,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SKP_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -66,9 +121,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SKP_VERSION"
   },
   {
@@ -80,9 +137,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm skps"
   },
   {
@@ -94,9 +153,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir skps"
   },
   {
@@ -109,9 +170,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skp"
   },
   {
@@ -124,9 +187,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SKP_VERSION"
   },
   {
@@ -138,7 +203,8 @@
       "/path/to/tmp/"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "Get downloaded skimage VERSION"
@@ -152,7 +218,8 @@
       "[START_DIR]/tmp/SK_IMAGE_VERSION"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "write SK_IMAGE_VERSION"
@@ -166,9 +233,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SK_IMAGE_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -181,9 +250,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SK_IMAGE_VERSION"
   },
   {
@@ -195,9 +266,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm images"
   },
   {
@@ -209,9 +282,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir images"
   },
   {
@@ -224,9 +299,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/skimage"
   },
   {
@@ -239,9 +316,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SK_IMAGE_VERSION"
   },
   {
@@ -253,7 +332,8 @@
       "/path/to/tmp/"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "Get downloaded SVG VERSION"
@@ -267,7 +347,8 @@
       "[START_DIR]/tmp/SVG_VERSION"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "write SVG_VERSION"
@@ -281,9 +362,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "cat_file tmp/SVG_VERSION",
     "stdout": "/path/to/tmp/"
   },
@@ -296,9 +379,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm tmp/SVG_VERSION"
   },
   {
@@ -310,9 +395,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm svgs"
   },
   {
@@ -324,9 +411,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir svgs"
   },
   {
@@ -339,9 +428,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_if_needed [START_DIR]/svg"
   },
   {
@@ -354,9 +445,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/SVG_VERSION"
   },
   {
@@ -369,6 +462,7 @@
     ],
     "env": {
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PYTHONPATH": "[START_DIR]/skia/infra/bots/.recipe_deps/build/scripts"
     },
     "infra_step": true,
@@ -383,7 +477,8 @@
       "511"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "makedirs dm",
@@ -409,9 +504,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "rm dm"
   },
   {
@@ -423,9 +520,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "mkdir dm"
   },
   {
@@ -437,7 +536,8 @@
       "511"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "infra_step": true,
     "name": "makedirs tmp_dir",
@@ -465,6 +565,7 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
@@ -514,9 +615,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "push_file [START_DIR]/tmp/uninteresting_hashes.txt"
   },
   {
@@ -526,7 +629,8 @@
       "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "name": "get swarming bot id",
     "stdout": "/path/to/tmp/",
@@ -543,7 +647,8 @@
       "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
     ],
     "env": {
-      "IOS_BUNDLE_ID": "com.google.dm"
+      "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice"
     },
     "name": "get swarming task id",
     "stdout": "/path/to/tmp/",
@@ -555,17 +660,464 @@
   },
   {
     "cmd": [
-      "ios-deploy",
-      "-b",
-      "[START_DIR]/out/Release/dm.app",
-      "-I",
+      "idevice-app-runner",
+      "-s",
+      "com.google.dm",
       "--args",
-      "--undefok --resourcePath resources --skps skps --images images/dm --colorImages images/colorspace --nameByHash --properties gitHash abc123 builder Test-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release swarming_bot_id  swarming_task_id  --svgs svgs --key arch arm compiler Clang configuration Release cpu_or_gpu GPU cpu_or_gpu_value GX6450 model iPadMini4 os iOS --uninterestingHashesFile tmp/uninteresting_hashes.txt --writePath dm --nocpu --randomProcessorTest --config 8888 srgb pdf gles glesdft glessrgb glesmsaa4 serialize-8888 tiles_rt-8888 pic-8888 --src tests gm image colorImage svg --blacklist glessrgb image _ _ 8888 image _ _ gles skp _ _ _ image gen_platf rgba32abf.bmp _ image gen_platf rgb24prof.bmp _ image gen_platf rgb24lprof.bmp _ image gen_platf 8bpp-pixeldata-cropped.bmp _ image gen_platf 4bpp-pixeldata-cropped.bmp _ image gen_platf 32bpp-pixeldata-cropped.bmp _ image gen_platf 24bpp-pixeldata-cropped.bmp _ image gen_platf frame_larger_than_image.gif _ image gen_platf inc0.png _ image gen_platf inc1.png _ image gen_platf inc2.png _ image gen_platf inc3.png _ image gen_platf inc4.png _ image gen_platf inc5.png _ image gen_platf inc6.png _ image gen_platf inc7.png _ image gen_platf inc8.png _ image gen_platf inc9.png _ image gen_platf inc10.png _ image gen_platf inc11.png _ image gen_platf inc12.png _ image gen_platf inc13.png _ image gen_platf inc14.png _ test _ GrShape serialize-8888 gm _ bleed_image serialize-8888 gm _ c_gms serialize-8888 gm _ colortype serialize-8888 gm _ colortype_xfermodes serialize-8888 gm _ drawfilter serialize-8888 gm _ fontmgr_bounds_0.75_0 serialize-8888 gm _ fontmgr_bounds_1_-0.25 serialize-8888 gm _ fontmgr_bounds serialize-8888 gm _ fontmgr_match serialize-8888 gm _ fontmgr_iter serialize-8888 gm _ imagemasksubset serialize-8888 gm _ bitmapfilters serialize-8888 gm _ bitmapshaders serialize-8888 gm _ bleed serialize-8888 gm _ bleed_alpha_bmp serialize-8888 gm _ bleed_alpha_bmp_shader serialize-8888 gm _ convex_poly_clip serialize-8888 gm _ extractalpha serialize-8888 gm _ filterbitmap_checkerboard_32_32_g8 serialize-8888 gm _ filterbitmap_image_mandrill_64 serialize-8888 gm _ shadows serialize-8888 gm _ simpleaaclip_aaclip serialize-8888 gm _ composeshader_bitmap serialize-8888 gm _ scaled_tilemodes_npot serialize-8888 gm _ scaled_tilemodes serialize-8888 gm _ typefacerendering_pfaMac serialize-8888 gm _ parsedpaths serialize-8888 gm _ ImageGeneratorExternal_rect serialize-8888 gm _ ImageGeneratorExternal_shader serialize-8888 gm _ shadow_utils serialize-8888 gm _ bleed_alpha_image serialize-8888 gm _ bleed_alpha_image_shader pic-8888 gm _ drawfilter pic-8888 gm _ image-cacherator-from-picture serialize-8888 gm _ image-cacherator-from-picture pic-8888 gm _ image-cacherator-from-raster serialize-8888 gm _ image-cacherator-from-raster pic-8888 gm _ image-cacherator-from-ctable serialize-8888 gm _ image-cacherator-from-ctable pic-8888 gm _ gamut serialize-8888 gm _ gamut pic-8888 gm _ complexclip4_bw serialize-8888 gm _ complexclip4_bw pic-8888 gm _ complexclip4_aa serialize-8888 gm _ complexclip4_aa tiles_rt-8888 gm _ complexclip4_bw tiles_rt-8888 gm _ complexclip4_aa _ 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"
+      "--undefok",
+      "--resourcePath",
+      "resources",
+      "--skps",
+      "skps",
+      "--images",
+      "images/dm",
+      "--colorImages",
+      "images/colorspace",
+      "--nameByHash",
+      "--properties",
+      "gitHash",
+      "abc123",
+      "builder",
+      "Test-iOS-Clang-iPadMini4-GPU-GX6450-arm-Release",
+      "swarming_bot_id",
+      "",
+      "swarming_task_id",
+      "",
+      "--svgs",
+      "svgs",
+      "--key",
+      "arch",
+      "arm",
+      "compiler",
+      "Clang",
+      "configuration",
+      "Release",
+      "cpu_or_gpu",
+      "GPU",
+      "cpu_or_gpu_value",
+      "GX6450",
+      "model",
+      "iPadMini4",
+      "os",
+      "iOS",
+      "--uninterestingHashesFile",
+      "tmp/uninteresting_hashes.txt",
+      "--writePath",
+      "dm",
+      "--nocpu",
+      "--randomProcessorTest",
+      "--config",
+      "8888",
+      "srgb",
+      "pdf",
+      "gles",
+      "glesdft",
+      "glessrgb",
+      "glesmsaa4",
+      "serialize-8888",
+      "tiles_rt-8888",
+      "pic-8888",
+      "--src",
+      "tests",
+      "gm",
+      "image",
+      "colorImage",
+      "svg",
+      "--blacklist",
+      "glessrgb",
+      "image",
+      "_",
+      "_",
+      "8888",
+      "image",
+      "_",
+      "_",
+      "gles",
+      "skp",
+      "_",
+      "_",
+      "_",
+      "image",
+      "gen_platf",
+      "rgba32abf.bmp",
+      "_",
+      "image",
+      "gen_platf",
+      "rgb24prof.bmp",
+      "_",
+      "image",
+      "gen_platf",
+      "rgb24lprof.bmp",
+      "_",
+      "image",
+      "gen_platf",
+      "8bpp-pixeldata-cropped.bmp",
+      "_",
+      "image",
+      "gen_platf",
+      "4bpp-pixeldata-cropped.bmp",
+      "_",
+      "image",
+      "gen_platf",
+      "32bpp-pixeldata-cropped.bmp",
+      "_",
+      "image",
+      "gen_platf",
+      "24bpp-pixeldata-cropped.bmp",
+      "_",
+      "image",
+      "gen_platf",
+      "frame_larger_than_image.gif",
+      "_",
+      "image",
+      "gen_platf",
+      "inc0.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc1.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc2.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc3.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc4.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc5.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc6.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc7.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc8.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc9.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc10.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc11.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc12.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc13.png",
+      "_",
+      "image",
+      "gen_platf",
+      "inc14.png",
+      "_",
+      "test",
+      "_",
+      "GrShape",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bleed_image",
+      "serialize-8888",
+      "gm",
+      "_",
+      "c_gms",
+      "serialize-8888",
+      "gm",
+      "_",
+      "colortype",
+      "serialize-8888",
+      "gm",
+      "_",
+      "colortype_xfermodes",
+      "serialize-8888",
+      "gm",
+      "_",
+      "drawfilter",
+      "serialize-8888",
+      "gm",
+      "_",
+      "fontmgr_bounds_0.75_0",
+      "serialize-8888",
+      "gm",
+      "_",
+      "fontmgr_bounds_1_-0.25",
+      "serialize-8888",
+      "gm",
+      "_",
+      "fontmgr_bounds",
+      "serialize-8888",
+      "gm",
+      "_",
+      "fontmgr_match",
+      "serialize-8888",
+      "gm",
+      "_",
+      "fontmgr_iter",
+      "serialize-8888",
+      "gm",
+      "_",
+      "imagemasksubset",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bitmapfilters",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bitmapshaders",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bleed",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bleed_alpha_bmp",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bleed_alpha_bmp_shader",
+      "serialize-8888",
+      "gm",
+      "_",
+      "convex_poly_clip",
+      "serialize-8888",
+      "gm",
+      "_",
+      "extractalpha",
+      "serialize-8888",
+      "gm",
+      "_",
+      "filterbitmap_checkerboard_32_32_g8",
+      "serialize-8888",
+      "gm",
+      "_",
+      "filterbitmap_image_mandrill_64",
+      "serialize-8888",
+      "gm",
+      "_",
+      "shadows",
+      "serialize-8888",
+      "gm",
+      "_",
+      "simpleaaclip_aaclip",
+      "serialize-8888",
+      "gm",
+      "_",
+      "composeshader_bitmap",
+      "serialize-8888",
+      "gm",
+      "_",
+      "scaled_tilemodes_npot",
+      "serialize-8888",
+      "gm",
+      "_",
+      "scaled_tilemodes",
+      "serialize-8888",
+      "gm",
+      "_",
+      "typefacerendering_pfaMac",
+      "serialize-8888",
+      "gm",
+      "_",
+      "parsedpaths",
+      "serialize-8888",
+      "gm",
+      "_",
+      "ImageGeneratorExternal_rect",
+      "serialize-8888",
+      "gm",
+      "_",
+      "ImageGeneratorExternal_shader",
+      "serialize-8888",
+      "gm",
+      "_",
+      "shadow_utils",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bleed_alpha_image",
+      "serialize-8888",
+      "gm",
+      "_",
+      "bleed_alpha_image_shader",
+      "pic-8888",
+      "gm",
+      "_",
+      "drawfilter",
+      "pic-8888",
+      "gm",
+      "_",
+      "image-cacherator-from-picture",
+      "serialize-8888",
+      "gm",
+      "_",
+      "image-cacherator-from-picture",
+      "pic-8888",
+      "gm",
+      "_",
+      "image-cacherator-from-raster",
+      "serialize-8888",
+      "gm",
+      "_",
+      "image-cacherator-from-raster",
+      "pic-8888",
+      "gm",
+      "_",
+      "image-cacherator-from-ctable",
+      "serialize-8888",
+      "gm",
+      "_",
+      "image-cacherator-from-ctable",
+      "pic-8888",
+      "gm",
+      "_",
+      "gamut",
+      "serialize-8888",
+      "gm",
+      "_",
+      "gamut",
+      "pic-8888",
+      "gm",
+      "_",
+      "complexclip4_bw",
+      "serialize-8888",
+      "gm",
+      "_",
+      "complexclip4_bw",
+      "pic-8888",
+      "gm",
+      "_",
+      "complexclip4_aa",
+      "serialize-8888",
+      "gm",
+      "_",
+      "complexclip4_aa",
+      "tiles_rt-8888",
+      "gm",
+      "_",
+      "complexclip4_bw",
+      "tiles_rt-8888",
+      "gm",
+      "_",
+      "complexclip4_aa",
+      "_",
+      "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"
     ],
     "env": {
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
@@ -581,9 +1133,11 @@
       "BUILDTYPE": "Release",
       "CHROME_HEADLESS": "1",
       "IOS_BUNDLE_ID": "com.google.dm",
+      "IOS_MOUNT_POINT": "[START_DIR]/mnt_iosdevice",
       "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
       "SKIA_OUT": "[START_DIR]/out"
     },
+    "infra_step": true,
     "name": "pull_if_needed dm"
   },
   {
diff --git a/infra/bots/recipes/test.py b/infra/bots/recipes/test.py
index 8625b11..50fd90e 100644
--- a/infra/bots/recipes/test.py
+++ b/infra/bots/recipes/test.py
@@ -692,6 +692,7 @@
   env = api.step.get_from_context('env', {})
   if 'iOS' in api.vars.builder_name:
     env['IOS_BUNDLE_ID'] = 'com.google.dm'
+    env['IOS_MOUNT_POINT'] = api.vars.slave_dir.join('mnt_iosdevice')
   with api.step.context({'env': env}):
     try:
       api.flavor.install_everything()
diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json
index 855a766..86fc963 100644
--- a/infra/bots/tasks.json
+++ b/infra/bots/tasks.json
@@ -1268,6 +1268,42 @@
         "Upload-Perf-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Release"
       ]
     },
+    "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi"
+      ]
+    },
+    "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi"
+      ]
+    },
+    "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi"
+      ]
+    },
+    "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi"
+      ]
+    },
+    "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi"
+      ]
+    },
+    "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi"
+      ]
+    },
     "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-Android": {
       "priority": 0.8,
       "tasks": [
@@ -2144,6 +2180,42 @@
       "tasks": [
         "Upload-Test-iOS-Clang-iPadMini4-GPU-GX6450-arm64-Release"
       ]
+    },
+    "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi"
+      ]
+    },
+    "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi"
+      ]
+    },
+    "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi"
+      ]
+    },
+    "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi"
+      ]
+    },
+    "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi"
+      ]
+    },
+    "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi": {
+      "priority": 0.8,
+      "tasks": [
+        "Upload-Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi"
+      ]
     }
   },
   "tasks": {
@@ -10696,6 +10768,294 @@
       "max_attempts": 1,
       "priority": 0.8
     },
+    "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Debug-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPad6,3",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "perf",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "perf_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Release-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPad6,3",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "perf",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "perf_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Debug-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone7,2",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "perf",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "perf_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Release-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone7,2",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "perf",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "perf_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Debug-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone9,1",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "perf",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "perf_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Release-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone9,1",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "perf",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "perf_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
     "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-Android": {
       "cipd_packages": [
         {
@@ -17656,6 +18016,294 @@
       "max_attempts": 1,
       "priority": 0.8
     },
+    "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Debug-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPad6,3",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "test",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "test_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Release-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPad6,3",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "test",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "test_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Debug-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone7,2",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "test",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "test_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Release-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone7,2",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "test",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "test_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Debug-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone9,1",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "test",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "test_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
+    "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi": {
+      "cipd_packages": [
+        {
+          "name": "skia/bots/skimage",
+          "path": "skimage",
+          "version": "version:24"
+        },
+        {
+          "name": "skia/bots/skp",
+          "path": "skp",
+          "version": "version:50"
+        },
+        {
+          "name": "skia/bots/svg",
+          "path": "svg",
+          "version": "version:5"
+        }
+      ],
+      "dependencies": [
+        "Build-Mac-Clang-arm64-Release-iOS",
+        "Housekeeper-PerCommit-BundleRecipes"
+      ],
+      "dimensions": [
+        "device:iPhone9,1",
+        "machine_type:RaspberryPi",
+        "os:iOS-10.3.1",
+        "pool:Skia"
+      ],
+      "execution_timeout_ns": 14400000000000,
+      "expiration_ns": 72000000000000,
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "test",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)"
+      ],
+      "io_timeout_ns": 2400000000000,
+      "isolate": "test_skia_bundled_unix.isolate",
+      "max_attempts": 1,
+      "priority": 0.8
+    },
     "Upload-Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-Android": {
       "dependencies": [
         "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-Android"
@@ -19303,6 +19951,87 @@
       "isolate": "upload_nano_results.isolate",
       "priority": 0.8
     },
+    "Upload-Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi": {
+      "dependencies": [
+        "Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_nano_results",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-perf"
+      ],
+      "isolate": "upload_nano_results.isolate",
+      "priority": 0.8
+    },
+    "Upload-Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi": {
+      "dependencies": [
+        "Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_nano_results",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-perf"
+      ],
+      "isolate": "upload_nano_results.isolate",
+      "priority": 0.8
+    },
+    "Upload-Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi": {
+      "dependencies": [
+        "Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_nano_results",
+        "repository=<(REPO)",
+        "buildername=Perf-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-perf"
+      ],
+      "isolate": "upload_nano_results.isolate",
+      "priority": 0.8
+    },
     "Upload-Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-Android": {
       "dependencies": [
         "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-Android"
@@ -22893,6 +23622,168 @@
       ],
       "isolate": "upload_dm_results.isolate",
       "priority": 0.8
+    },
+    "Upload-Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi": {
+      "dependencies": [
+        "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_dm_results",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-infra-gm"
+      ],
+      "isolate": "upload_dm_results.isolate",
+      "priority": 0.8
+    },
+    "Upload-Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi": {
+      "dependencies": [
+        "Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_dm_results",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-infra-gm"
+      ],
+      "isolate": "upload_dm_results.isolate",
+      "priority": 0.8
+    },
+    "Upload-Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi": {
+      "dependencies": [
+        "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_dm_results",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-infra-gm"
+      ],
+      "isolate": "upload_dm_results.isolate",
+      "priority": 0.8
+    },
+    "Upload-Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi": {
+      "dependencies": [
+        "Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_dm_results",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone6-GPU-GX6450-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-infra-gm"
+      ],
+      "isolate": "upload_dm_results.isolate",
+      "priority": 0.8
+    },
+    "Upload-Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi": {
+      "dependencies": [
+        "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_dm_results",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Debug-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-infra-gm"
+      ],
+      "isolate": "upload_dm_results.isolate",
+      "priority": 0.8
+    },
+    "Upload-Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi": {
+      "dependencies": [
+        "Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi"
+      ],
+      "dimensions": [
+        "cpu:x86-64-avx2",
+        "gpu:none",
+        "os:Ubuntu-14.04",
+        "pool:Skia"
+      ],
+      "extra_args": [
+        "--workdir",
+        "../../..",
+        "upload_dm_results",
+        "repository=<(REPO)",
+        "buildername=Test-iOS-Clang-iPhone7-GPU-GT7600-arm64-Release-RaspberryPi",
+        "swarm_out_dir=${ISOLATED_OUTDIR}",
+        "revision=<(REVISION)",
+        "patch_repo=<(PATCH_REPO)",
+        "patch_storage=<(PATCH_STORAGE)",
+        "patch_issue=<(ISSUE)",
+        "patch_set=<(PATCHSET)",
+        "gs_bucket=skia-infra-gm"
+      ],
+      "isolate": "upload_dm_results.isolate",
+      "priority": 0.8
     }
   }
 }
diff --git a/platform_tools/ios/bin/ios_setup.sh b/platform_tools/ios/bin/ios_setup.sh
index 3768396..0988722 100755
--- a/platform_tools/ios/bin/ios_setup.sh
+++ b/platform_tools/ios/bin/ios_setup.sh
@@ -9,7 +9,9 @@
 # ios_setup.sh: Sets environment variables used by other iOS scripts.
 
 # File system location where we mount the ios devices.
-IOS_MOUNT_POINT="/tmp/mnt_iosdevice"
+if [[ -z "${IOS_MOUNT_POINT}" ]]; then
+  IOS_MOUNT_POINT="/tmp/mnt_iosdevice"
+fi
 
 # Location on the ios device where all data are stored. This is
 # relative to the mount point.
@@ -88,10 +90,12 @@
 
 ios_cat() {
   local TARGET="$IOS_MOUNT_POINT/$IOS_DOCS_DIR/$1"
+  >&2 echo "target: '${TARGET}''"
   ios_mount
-  RET="$(cat $TARGET)"
+  RET="$( cat ${TARGET} )"
   ios_umount
-  echo -e "$RET"
+  >&2 echo "Result: '${RET}'"
+  echo -e "${RET}"
 }
 
 # ios_mount: mounts the iOS device for reading or writing.
@@ -107,14 +111,18 @@
     mkdir -p $IOS_MOUNT_POINT
   fi
   ifuse --container $IOS_BUNDLE_ID $IOS_MOUNT_POINT
-  sleep 1
+
+  sleep 2
+  if [[ ! -d "${IOS_MOUNT_POINT}/${IOS_DOCS_DIR}" ]]; then
+    exit 1
+  fi
   >&2 echo "Successfully mounted device."
   #find $IOS_MOUNT_POINT
 }
 
 # ios_umount: unmounts the ios device.
 ios_umount() {
-  umount $IOS_MOUNT_POINT
+  sudo umount $IOS_MOUNT_POINT
   sleep 1
 }
 
@@ -133,7 +141,7 @@
 
   ios_mount
   if [[ -d "${HOST_DST}" ]]; then
-    cp -r "$IOS_SRC/" "$HOST_DST"
+    cp -r "$IOS_SRC/." "$HOST_DST"
   else
     cp -r "$IOS_SRC" "$HOST_DST"
   fi
@@ -149,7 +157,7 @@
   ios_mount
   rm -rf $IOS_DST
   mkdir -p "$(dirname $IOS_DST)"
-  cp -r "$HOST_SRC" "$IOS_DST"
+  cp -r -L "$HOST_SRC" "$IOS_DST"
   ios_umount
 }