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