Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / skia / infra / bots / recipes / perf.expected / Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android.json
1 [
2   {
3     "cmd": [
4       "vpython",
5       "-u",
6       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
7       "--json-output",
8       "/path/to/tmp/json",
9       "ensure-directory",
10       "--mode",
11       "0777",
12       "[START_DIR]/tmp"
13     ],
14     "infra_step": true,
15     "name": "makedirs tmp_dir"
16   },
17   {
18     "cmd": [
19       "python",
20       "-u",
21       "import os\nprint(os.environ.get('SWARMING_BOT_ID', ''))\n"
22     ],
23     "name": "get swarming bot id",
24     "~followup_annotations": [
25       "@@@STEP_LOG_LINE@python.inline@import os@@@",
26       "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_BOT_ID', ''))@@@",
27       "@@@STEP_LOG_END@python.inline@@@"
28     ]
29   },
30   {
31     "cmd": [
32       "/usr/bin/adb.1.0.35",
33       "shell",
34       "mkdir",
35       "-p",
36       "/sdcard/revenge_of_the_skiabot/resources"
37     ],
38     "cwd": "[START_DIR]/skia",
39     "env": {
40       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
41       "CHROME_HEADLESS": "1",
42       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
43     },
44     "infra_step": true,
45     "name": "mkdir /sdcard/revenge_of_the_skiabot/resources"
46   },
47   {
48     "cmd": [
49       "python",
50       "-u",
51       "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root']).decode('utf-8')\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\nsubprocess.check_output([\n    ADB, 'shell',\n    'echo \"%s\" > /sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (\n        gov, cpu)]).decode('utf-8')\nactual_gov = subprocess.check_output([\n    ADB, 'shell', 'cat /sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' %\n        cpu]).decode('utf-8').strip()\nif actual_gov != gov:\n  raise Exception('(actual, expected) (%s, %s)'\n                  % (actual_gov, gov))\n",
52       "/usr/bin/adb.1.0.35",
53       "0",
54       "userspace"
55     ],
56     "env": {
57       "CHROME_HEADLESS": "1",
58       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
59     },
60     "infra_step": true,
61     "name": "Set CPU 0's governor to userspace",
62     "timeout": 30,
63     "~followup_annotations": [
64       "@@@STEP_LOG_LINE@python.inline@@@@",
65       "@@@STEP_LOG_LINE@python.inline@import os@@@",
66       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
67       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
68       "@@@STEP_LOG_LINE@python.inline@import time@@@",
69       "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
70       "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
71       "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@",
72       "@@@STEP_LOG_LINE@python.inline@@@@",
73       "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root']).decode('utf-8')@@@",
74       "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
75       "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
76       "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
77       "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
78       "@@@STEP_LOG_LINE@python.inline@@@@",
79       "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([@@@",
80       "@@@STEP_LOG_LINE@python.inline@    ADB, 'shell',@@@",
81       "@@@STEP_LOG_LINE@python.inline@    'echo \"%s\" > /sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (@@@",
82       "@@@STEP_LOG_LINE@python.inline@        gov, cpu)]).decode('utf-8')@@@",
83       "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([@@@",
84       "@@@STEP_LOG_LINE@python.inline@    ADB, 'shell', 'cat /sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' %@@@",
85       "@@@STEP_LOG_LINE@python.inline@        cpu]).decode('utf-8').strip()@@@",
86       "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@",
87       "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %s)'@@@",
88       "@@@STEP_LOG_LINE@python.inline@                  % (actual_gov, gov))@@@",
89       "@@@STEP_LOG_END@python.inline@@@"
90     ]
91   },
92   {
93     "cmd": [
94       "python",
95       "-u",
96       "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\nlog = subprocess.check_output([ADB, 'root']).decode('utf-8')\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n    'cat %s/scaling_available_frequencies' % root]).decode('utf-8')\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n  available_freqs = sorted(\n      int(i) for i in available_freqs.strip().split())\nelse:\n  raise Exception('Could not get list of available frequencies: %s' %\n                  available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n  if f <= target:\n    freq = f\n    break\n\nprint('Setting frequency to %d' % freq)\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_call([ADB, 'shell', 'echo 0 > '\n    '%s/scaling_min_freq' % root])\nsubprocess.check_call([ADB, 'shell', 'echo %d > '\n    '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_call([ADB, 'shell', 'echo %d > '\n    '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n    '%s/scaling_cur_freq' % root]).decode('utf-8').strip()\nif actual_freq != str(freq):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_freq, freq))\n",
97       "/usr/bin/adb.1.0.35",
98       "0.6",
99       "0"
100     ],
101     "env": {
102       "CHROME_HEADLESS": "1",
103       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
104     },
105     "infra_step": true,
106     "name": "Scale CPU 0 to 0.600000",
107     "timeout": 30,
108     "~followup_annotations": [
109       "@@@STEP_LOG_LINE@python.inline@@@@",
110       "@@@STEP_LOG_LINE@python.inline@import os@@@",
111       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
112       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
113       "@@@STEP_LOG_LINE@python.inline@import time@@@",
114       "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
115       "@@@STEP_LOG_LINE@python.inline@target_percent = float(sys.argv[2])@@@",
116       "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[3])@@@",
117       "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root']).decode('utf-8')@@@",
118       "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
119       "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
120       "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
121       "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
122       "@@@STEP_LOG_LINE@python.inline@@@@",
123       "@@@STEP_LOG_LINE@python.inline@root = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu@@@",
124       "@@@STEP_LOG_LINE@python.inline@@@@",
125       "@@@STEP_LOG_LINE@python.inline@# All devices we test on give a list of their available frequencies.@@@",
126       "@@@STEP_LOG_LINE@python.inline@available_freqs = subprocess.check_output([ADB, 'shell',@@@",
127       "@@@STEP_LOG_LINE@python.inline@    'cat %s/scaling_available_frequencies' % root]).decode('utf-8')@@@",
128       "@@@STEP_LOG_LINE@python.inline@@@@",
129       "@@@STEP_LOG_LINE@python.inline@# Check for message like '/system/bin/sh: file not found'@@@",
130       "@@@STEP_LOG_LINE@python.inline@if available_freqs and '/system/bin/sh' not in available_freqs:@@@",
131       "@@@STEP_LOG_LINE@python.inline@  available_freqs = sorted(@@@",
132       "@@@STEP_LOG_LINE@python.inline@      int(i) for i in available_freqs.strip().split())@@@",
133       "@@@STEP_LOG_LINE@python.inline@else:@@@",
134       "@@@STEP_LOG_LINE@python.inline@  raise Exception('Could not get list of available frequencies: %s' %@@@",
135       "@@@STEP_LOG_LINE@python.inline@                  available_freqs)@@@",
136       "@@@STEP_LOG_LINE@python.inline@@@@",
137       "@@@STEP_LOG_LINE@python.inline@maxfreq = available_freqs[-1]@@@",
138       "@@@STEP_LOG_LINE@python.inline@target = int(round(maxfreq * target_percent))@@@",
139       "@@@STEP_LOG_LINE@python.inline@freq = maxfreq@@@",
140       "@@@STEP_LOG_LINE@python.inline@for f in reversed(available_freqs):@@@",
141       "@@@STEP_LOG_LINE@python.inline@  if f <= target:@@@",
142       "@@@STEP_LOG_LINE@python.inline@    freq = f@@@",
143       "@@@STEP_LOG_LINE@python.inline@    break@@@",
144       "@@@STEP_LOG_LINE@python.inline@@@@",
145       "@@@STEP_LOG_LINE@python.inline@print('Setting frequency to %d' % freq)@@@",
146       "@@@STEP_LOG_LINE@python.inline@@@@",
147       "@@@STEP_LOG_LINE@python.inline@# If scaling_max_freq is lower than our attempted setting, it won't take.@@@",
148       "@@@STEP_LOG_LINE@python.inline@# We must set min first, because if we try to set max to be less than min@@@",
149       "@@@STEP_LOG_LINE@python.inline@# (which sometimes happens after certain devices reboot) it returns a@@@",
150       "@@@STEP_LOG_LINE@python.inline@# perplexing permissions error.@@@",
151       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call([ADB, 'shell', 'echo 0 > '@@@",
152       "@@@STEP_LOG_LINE@python.inline@    '%s/scaling_min_freq' % root])@@@",
153       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call([ADB, 'shell', 'echo %d > '@@@",
154       "@@@STEP_LOG_LINE@python.inline@    '%s/scaling_max_freq' % (freq, root)])@@@",
155       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call([ADB, 'shell', 'echo %d > '@@@",
156       "@@@STEP_LOG_LINE@python.inline@    '%s/scaling_setspeed' % (freq, root)])@@@",
157       "@@@STEP_LOG_LINE@python.inline@time.sleep(5)@@@",
158       "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@",
159       "@@@STEP_LOG_LINE@python.inline@    '%s/scaling_cur_freq' % root]).decode('utf-8').strip()@@@",
160       "@@@STEP_LOG_LINE@python.inline@if actual_freq != str(freq):@@@",
161       "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
162       "@@@STEP_LOG_LINE@python.inline@                  % (actual_freq, freq))@@@",
163       "@@@STEP_LOG_END@python.inline@@@"
164     ]
165   },
166   {
167     "cmd": [
168       "/usr/bin/adb.1.0.35",
169       "push",
170       "[START_DIR]/build/nanobench",
171       "/data/local/tmp/"
172     ],
173     "cwd": "[START_DIR]/skia",
174     "env": {
175       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
176       "CHROME_HEADLESS": "1",
177       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
178     },
179     "infra_step": true,
180     "name": "push nanobench"
181   },
182   {
183     "cmd": [
184       "vpython",
185       "-u",
186       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
187       "--json-output",
188       "/path/to/tmp/json",
189       "copy",
190       "[START_DIR]/skia/infra/bots/assets/text_blob_traces/VERSION",
191       "/path/to/tmp/"
192     ],
193     "infra_step": true,
194     "name": "Get text_blob_traces VERSION",
195     "~followup_annotations": [
196       "@@@STEP_LOG_LINE@VERSION@42@@@",
197       "@@@STEP_LOG_END@VERSION@@@"
198     ]
199   },
200   {
201     "cmd": [
202       "vpython",
203       "-u",
204       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
205       "--json-output",
206       "/path/to/tmp/json",
207       "copy",
208       "42",
209       "[START_DIR]/tmp/TEXTTRACES_VERSION"
210     ],
211     "infra_step": true,
212     "name": "write TEXTTRACES_VERSION",
213     "~followup_annotations": [
214       "@@@STEP_LOG_LINE@TEXTTRACES_VERSION@42@@@",
215       "@@@STEP_LOG_END@TEXTTRACES_VERSION@@@"
216     ]
217   },
218   {
219     "cmd": [
220       "/usr/bin/adb.1.0.35",
221       "shell",
222       "cat",
223       "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION"
224     ],
225     "cwd": "[START_DIR]/skia",
226     "env": {
227       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
228       "CHROME_HEADLESS": "1",
229       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
230     },
231     "infra_step": true,
232     "name": "read /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION"
233   },
234   {
235     "cmd": [
236       "python",
237       "-u",
238       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
239       "/usr/bin/adb.1.0.35",
240       "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION"
241     ],
242     "env": {
243       "CHROME_HEADLESS": "1",
244       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
245     },
246     "infra_step": true,
247     "name": "rm /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION",
248     "~followup_annotations": [
249       "@@@STEP_LOG_LINE@python.inline@@@@",
250       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
251       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
252       "@@@STEP_LOG_LINE@python.inline@@@@",
253       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
254       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
255       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
256       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
257       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
258       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
259       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
260       "@@@STEP_LOG_LINE@python.inline@@@@",
261       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
262       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
263       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
264       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
265       "@@@STEP_LOG_LINE@python.inline@try:@@@",
266       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
267       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
268       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
269       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
270       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
271       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
272       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
273       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
274       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
275       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
276       "@@@STEP_LOG_END@python.inline@@@"
277     ]
278   },
279   {
280     "cmd": [
281       "python",
282       "-u",
283       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
284       "/usr/bin/adb.1.0.35",
285       "/sdcard/revenge_of_the_skiabot/text_blob_traces"
286     ],
287     "env": {
288       "CHROME_HEADLESS": "1",
289       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
290     },
291     "infra_step": true,
292     "name": "rm /sdcard/revenge_of_the_skiabot/text_blob_traces",
293     "~followup_annotations": [
294       "@@@STEP_LOG_LINE@python.inline@@@@",
295       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
296       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
297       "@@@STEP_LOG_LINE@python.inline@@@@",
298       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
299       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
300       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
301       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
302       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
303       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
304       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
305       "@@@STEP_LOG_LINE@python.inline@@@@",
306       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
307       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
308       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
309       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
310       "@@@STEP_LOG_LINE@python.inline@try:@@@",
311       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
312       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
313       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
314       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
315       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
316       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
317       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
318       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
319       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
320       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
321       "@@@STEP_LOG_END@python.inline@@@"
322     ]
323   },
324   {
325     "cmd": [
326       "/usr/bin/adb.1.0.35",
327       "shell",
328       "mkdir",
329       "-p",
330       "/sdcard/revenge_of_the_skiabot/text_blob_traces"
331     ],
332     "cwd": "[START_DIR]/skia",
333     "env": {
334       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
335       "CHROME_HEADLESS": "1",
336       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
337     },
338     "infra_step": true,
339     "name": "mkdir /sdcard/revenge_of_the_skiabot/text_blob_traces"
340   },
341   {
342     "cmd": [
343       "vpython",
344       "-u",
345       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
346       "--json-output",
347       "/path/to/tmp/json",
348       "glob",
349       "[START_DIR]/text_blob_traces",
350       "*"
351     ],
352     "infra_step": true,
353     "name": "ls [START_DIR]/text_blob_traces/*",
354     "~followup_annotations": [
355       "@@@STEP_LOG_LINE@glob@[START_DIR]/text_blob_traces/bar.jpg@@@",
356       "@@@STEP_LOG_LINE@glob@[START_DIR]/text_blob_traces/foo.png@@@",
357       "@@@STEP_LOG_END@glob@@@"
358     ]
359   },
360   {
361     "cmd": [
362       "/usr/bin/adb.1.0.35",
363       "push",
364       "[START_DIR]/text_blob_traces/bar.jpg",
365       "[START_DIR]/text_blob_traces/foo.png",
366       "/sdcard/revenge_of_the_skiabot/text_blob_traces"
367     ],
368     "cwd": "[START_DIR]/skia",
369     "env": {
370       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
371       "CHROME_HEADLESS": "1",
372       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
373     },
374     "infra_step": true,
375     "name": "push --sync [START_DIR]/text_blob_traces/* /sdcard/revenge_of_the_skiabot/text_blob_traces"
376   },
377   {
378     "cmd": [
379       "/usr/bin/adb.1.0.35",
380       "push",
381       "[START_DIR]/tmp/TEXTTRACES_VERSION",
382       "/sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION"
383     ],
384     "cwd": "[START_DIR]/skia",
385     "env": {
386       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
387       "CHROME_HEADLESS": "1",
388       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
389     },
390     "infra_step": true,
391     "name": "push [START_DIR]/tmp/TEXTTRACES_VERSION /sdcard/revenge_of_the_skiabot/TEXTTRACES_VERSION"
392   },
393   {
394     "cmd": [
395       "vpython",
396       "-u",
397       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
398       "--json-output",
399       "/path/to/tmp/json",
400       "glob",
401       "[START_DIR]/skia/resources",
402       "*"
403     ],
404     "infra_step": true,
405     "name": "ls [START_DIR]/skia/resources/*",
406     "~followup_annotations": [
407       "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/bar.jpg@@@",
408       "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/foo.png@@@",
409       "@@@STEP_LOG_END@glob@@@"
410     ]
411   },
412   {
413     "cmd": [
414       "/usr/bin/adb.1.0.35",
415       "push",
416       "[START_DIR]/skia/resources/bar.jpg",
417       "[START_DIR]/skia/resources/foo.png",
418       "/sdcard/revenge_of_the_skiabot/resources"
419     ],
420     "cwd": "[START_DIR]/skia",
421     "env": {
422       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
423       "CHROME_HEADLESS": "1",
424       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
425     },
426     "infra_step": true,
427     "name": "push --sync [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources"
428   },
429   {
430     "cmd": [
431       "vpython",
432       "-u",
433       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
434       "--json-output",
435       "/path/to/tmp/json",
436       "copy",
437       "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
438       "/path/to/tmp/"
439     ],
440     "infra_step": true,
441     "name": "Get skp VERSION",
442     "~followup_annotations": [
443       "@@@STEP_LOG_LINE@VERSION@42@@@",
444       "@@@STEP_LOG_END@VERSION@@@"
445     ]
446   },
447   {
448     "cmd": [
449       "vpython",
450       "-u",
451       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
452       "--json-output",
453       "/path/to/tmp/json",
454       "copy",
455       "42",
456       "[START_DIR]/tmp/SKP_VERSION"
457     ],
458     "infra_step": true,
459     "name": "write SKP_VERSION",
460     "~followup_annotations": [
461       "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
462       "@@@STEP_LOG_END@SKP_VERSION@@@"
463     ]
464   },
465   {
466     "cmd": [
467       "/usr/bin/adb.1.0.35",
468       "shell",
469       "cat",
470       "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
471     ],
472     "cwd": "[START_DIR]/skia",
473     "env": {
474       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
475       "CHROME_HEADLESS": "1",
476       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
477     },
478     "infra_step": true,
479     "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION"
480   },
481   {
482     "cmd": [
483       "python",
484       "-u",
485       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
486       "/usr/bin/adb.1.0.35",
487       "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
488     ],
489     "env": {
490       "CHROME_HEADLESS": "1",
491       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
492     },
493     "infra_step": true,
494     "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION",
495     "~followup_annotations": [
496       "@@@STEP_LOG_LINE@python.inline@@@@",
497       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
498       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
499       "@@@STEP_LOG_LINE@python.inline@@@@",
500       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
501       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
502       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
503       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
504       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
505       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
506       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
507       "@@@STEP_LOG_LINE@python.inline@@@@",
508       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
509       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
510       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
511       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
512       "@@@STEP_LOG_LINE@python.inline@try:@@@",
513       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
514       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
515       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
516       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
517       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
518       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
519       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
520       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
521       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
522       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
523       "@@@STEP_LOG_END@python.inline@@@"
524     ]
525   },
526   {
527     "cmd": [
528       "python",
529       "-u",
530       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
531       "/usr/bin/adb.1.0.35",
532       "/sdcard/revenge_of_the_skiabot/skps"
533     ],
534     "env": {
535       "CHROME_HEADLESS": "1",
536       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
537     },
538     "infra_step": true,
539     "name": "rm /sdcard/revenge_of_the_skiabot/skps",
540     "~followup_annotations": [
541       "@@@STEP_LOG_LINE@python.inline@@@@",
542       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
543       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
544       "@@@STEP_LOG_LINE@python.inline@@@@",
545       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
546       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
547       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
548       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
549       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
550       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
551       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
552       "@@@STEP_LOG_LINE@python.inline@@@@",
553       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
554       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
555       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
556       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
557       "@@@STEP_LOG_LINE@python.inline@try:@@@",
558       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
559       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
560       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
561       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
562       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
563       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
564       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
565       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
566       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
567       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
568       "@@@STEP_LOG_END@python.inline@@@"
569     ]
570   },
571   {
572     "cmd": [
573       "/usr/bin/adb.1.0.35",
574       "shell",
575       "mkdir",
576       "-p",
577       "/sdcard/revenge_of_the_skiabot/skps"
578     ],
579     "cwd": "[START_DIR]/skia",
580     "env": {
581       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
582       "CHROME_HEADLESS": "1",
583       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
584     },
585     "infra_step": true,
586     "name": "mkdir /sdcard/revenge_of_the_skiabot/skps"
587   },
588   {
589     "cmd": [
590       "vpython",
591       "-u",
592       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
593       "--json-output",
594       "/path/to/tmp/json",
595       "glob",
596       "[START_DIR]/skp",
597       "*"
598     ],
599     "infra_step": true,
600     "name": "ls [START_DIR]/skp/*",
601     "~followup_annotations": [
602       "@@@STEP_LOG_LINE@glob@[START_DIR]/skp/bar.jpg@@@",
603       "@@@STEP_LOG_LINE@glob@[START_DIR]/skp/foo.png@@@",
604       "@@@STEP_LOG_END@glob@@@"
605     ]
606   },
607   {
608     "cmd": [
609       "/usr/bin/adb.1.0.35",
610       "push",
611       "[START_DIR]/skp/bar.jpg",
612       "[START_DIR]/skp/foo.png",
613       "/sdcard/revenge_of_the_skiabot/skps"
614     ],
615     "cwd": "[START_DIR]/skia",
616     "env": {
617       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
618       "CHROME_HEADLESS": "1",
619       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
620     },
621     "infra_step": true,
622     "name": "push --sync [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps"
623   },
624   {
625     "cmd": [
626       "/usr/bin/adb.1.0.35",
627       "push",
628       "[START_DIR]/tmp/SKP_VERSION",
629       "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
630     ],
631     "cwd": "[START_DIR]/skia",
632     "env": {
633       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
634       "CHROME_HEADLESS": "1",
635       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
636     },
637     "infra_step": true,
638     "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION"
639   },
640   {
641     "cmd": [
642       "vpython",
643       "-u",
644       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
645       "--json-output",
646       "/path/to/tmp/json",
647       "copy",
648       "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
649       "/path/to/tmp/"
650     ],
651     "infra_step": true,
652     "name": "Get skimage VERSION",
653     "~followup_annotations": [
654       "@@@STEP_LOG_LINE@VERSION@42@@@",
655       "@@@STEP_LOG_END@VERSION@@@"
656     ]
657   },
658   {
659     "cmd": [
660       "vpython",
661       "-u",
662       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
663       "--json-output",
664       "/path/to/tmp/json",
665       "copy",
666       "42",
667       "[START_DIR]/tmp/SK_IMAGE_VERSION"
668     ],
669     "infra_step": true,
670     "name": "write SK_IMAGE_VERSION",
671     "~followup_annotations": [
672       "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@",
673       "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@"
674     ]
675   },
676   {
677     "cmd": [
678       "/usr/bin/adb.1.0.35",
679       "shell",
680       "cat",
681       "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
682     ],
683     "cwd": "[START_DIR]/skia",
684     "env": {
685       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
686       "CHROME_HEADLESS": "1",
687       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
688     },
689     "infra_step": true,
690     "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
691   },
692   {
693     "cmd": [
694       "python",
695       "-u",
696       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
697       "/usr/bin/adb.1.0.35",
698       "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
699     ],
700     "env": {
701       "CHROME_HEADLESS": "1",
702       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
703     },
704     "infra_step": true,
705     "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION",
706     "~followup_annotations": [
707       "@@@STEP_LOG_LINE@python.inline@@@@",
708       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
709       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
710       "@@@STEP_LOG_LINE@python.inline@@@@",
711       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
712       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
713       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
714       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
715       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
716       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
717       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
718       "@@@STEP_LOG_LINE@python.inline@@@@",
719       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
720       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
721       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
722       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
723       "@@@STEP_LOG_LINE@python.inline@try:@@@",
724       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
725       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
726       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
727       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
728       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
729       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
730       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
731       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
732       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
733       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
734       "@@@STEP_LOG_END@python.inline@@@"
735     ]
736   },
737   {
738     "cmd": [
739       "python",
740       "-u",
741       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
742       "/usr/bin/adb.1.0.35",
743       "/sdcard/revenge_of_the_skiabot/images"
744     ],
745     "env": {
746       "CHROME_HEADLESS": "1",
747       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
748     },
749     "infra_step": true,
750     "name": "rm /sdcard/revenge_of_the_skiabot/images",
751     "~followup_annotations": [
752       "@@@STEP_LOG_LINE@python.inline@@@@",
753       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
754       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
755       "@@@STEP_LOG_LINE@python.inline@@@@",
756       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
757       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
758       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
759       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
760       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
761       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
762       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
763       "@@@STEP_LOG_LINE@python.inline@@@@",
764       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
765       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
766       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
767       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
768       "@@@STEP_LOG_LINE@python.inline@try:@@@",
769       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
770       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
771       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
772       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
773       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
774       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
775       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
776       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
777       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
778       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
779       "@@@STEP_LOG_END@python.inline@@@"
780     ]
781   },
782   {
783     "cmd": [
784       "/usr/bin/adb.1.0.35",
785       "shell",
786       "mkdir",
787       "-p",
788       "/sdcard/revenge_of_the_skiabot/images"
789     ],
790     "cwd": "[START_DIR]/skia",
791     "env": {
792       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
793       "CHROME_HEADLESS": "1",
794       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
795     },
796     "infra_step": true,
797     "name": "mkdir /sdcard/revenge_of_the_skiabot/images"
798   },
799   {
800     "cmd": [
801       "vpython",
802       "-u",
803       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
804       "--json-output",
805       "/path/to/tmp/json",
806       "glob",
807       "[START_DIR]/skimage",
808       "*"
809     ],
810     "infra_step": true,
811     "name": "ls [START_DIR]/skimage/*",
812     "~followup_annotations": [
813       "@@@STEP_LOG_LINE@glob@[START_DIR]/skimage/bar.jpg@@@",
814       "@@@STEP_LOG_LINE@glob@[START_DIR]/skimage/foo.png@@@",
815       "@@@STEP_LOG_END@glob@@@"
816     ]
817   },
818   {
819     "cmd": [
820       "/usr/bin/adb.1.0.35",
821       "push",
822       "[START_DIR]/skimage/bar.jpg",
823       "[START_DIR]/skimage/foo.png",
824       "/sdcard/revenge_of_the_skiabot/images"
825     ],
826     "cwd": "[START_DIR]/skia",
827     "env": {
828       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
829       "CHROME_HEADLESS": "1",
830       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
831     },
832     "infra_step": true,
833     "name": "push --sync [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images"
834   },
835   {
836     "cmd": [
837       "/usr/bin/adb.1.0.35",
838       "push",
839       "[START_DIR]/tmp/SK_IMAGE_VERSION",
840       "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
841     ],
842     "cwd": "[START_DIR]/skia",
843     "env": {
844       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
845       "CHROME_HEADLESS": "1",
846       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
847     },
848     "infra_step": true,
849     "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
850   },
851   {
852     "cmd": [
853       "vpython",
854       "-u",
855       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
856       "--json-output",
857       "/path/to/tmp/json",
858       "copy",
859       "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
860       "/path/to/tmp/"
861     ],
862     "infra_step": true,
863     "name": "Get svg VERSION",
864     "~followup_annotations": [
865       "@@@STEP_LOG_LINE@VERSION@42@@@",
866       "@@@STEP_LOG_END@VERSION@@@"
867     ]
868   },
869   {
870     "cmd": [
871       "vpython",
872       "-u",
873       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
874       "--json-output",
875       "/path/to/tmp/json",
876       "copy",
877       "42",
878       "[START_DIR]/tmp/SVG_VERSION"
879     ],
880     "infra_step": true,
881     "name": "write SVG_VERSION",
882     "~followup_annotations": [
883       "@@@STEP_LOG_LINE@SVG_VERSION@42@@@",
884       "@@@STEP_LOG_END@SVG_VERSION@@@"
885     ]
886   },
887   {
888     "cmd": [
889       "/usr/bin/adb.1.0.35",
890       "shell",
891       "cat",
892       "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
893     ],
894     "cwd": "[START_DIR]/skia",
895     "env": {
896       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
897       "CHROME_HEADLESS": "1",
898       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
899     },
900     "infra_step": true,
901     "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION"
902   },
903   {
904     "cmd": [
905       "python",
906       "-u",
907       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
908       "/usr/bin/adb.1.0.35",
909       "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
910     ],
911     "env": {
912       "CHROME_HEADLESS": "1",
913       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
914     },
915     "infra_step": true,
916     "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION",
917     "~followup_annotations": [
918       "@@@STEP_LOG_LINE@python.inline@@@@",
919       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
920       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
921       "@@@STEP_LOG_LINE@python.inline@@@@",
922       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
923       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
924       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
925       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
926       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
927       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
928       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
929       "@@@STEP_LOG_LINE@python.inline@@@@",
930       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
931       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
932       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
933       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
934       "@@@STEP_LOG_LINE@python.inline@try:@@@",
935       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
936       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
937       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
938       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
939       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
940       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
941       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
942       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
943       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
944       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
945       "@@@STEP_LOG_END@python.inline@@@"
946     ]
947   },
948   {
949     "cmd": [
950       "python",
951       "-u",
952       "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(\n      cmd, stderr=subprocess.STDOUT).decode('utf-8')\nexcept subprocess.CalledProcessError as e:\n  output = e.output.decode('utf-8')\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
953       "/usr/bin/adb.1.0.35",
954       "/sdcard/revenge_of_the_skiabot/svgs"
955     ],
956     "env": {
957       "CHROME_HEADLESS": "1",
958       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
959     },
960     "infra_step": true,
961     "name": "rm /sdcard/revenge_of_the_skiabot/svgs",
962     "~followup_annotations": [
963       "@@@STEP_LOG_LINE@python.inline@@@@",
964       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
965       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
966       "@@@STEP_LOG_LINE@python.inline@@@@",
967       "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
968       "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
969       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
970       "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
971       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
972       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
973       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
974       "@@@STEP_LOG_LINE@python.inline@@@@",
975       "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
976       "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
977       "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
978       "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
979       "@@@STEP_LOG_LINE@python.inline@try:@@@",
980       "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(@@@",
981       "@@@STEP_LOG_LINE@python.inline@      cmd, stderr=subprocess.STDOUT).decode('utf-8')@@@",
982       "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
983       "@@@STEP_LOG_LINE@python.inline@  output = e.output.decode('utf-8')@@@",
984       "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
985       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
986       "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
987       "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
988       "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
989       "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
990       "@@@STEP_LOG_END@python.inline@@@"
991     ]
992   },
993   {
994     "cmd": [
995       "/usr/bin/adb.1.0.35",
996       "shell",
997       "mkdir",
998       "-p",
999       "/sdcard/revenge_of_the_skiabot/svgs"
1000     ],
1001     "cwd": "[START_DIR]/skia",
1002     "env": {
1003       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1004       "CHROME_HEADLESS": "1",
1005       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1006     },
1007     "infra_step": true,
1008     "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs"
1009   },
1010   {
1011     "cmd": [
1012       "vpython",
1013       "-u",
1014       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1015       "--json-output",
1016       "/path/to/tmp/json",
1017       "glob",
1018       "[START_DIR]/svg",
1019       "*"
1020     ],
1021     "infra_step": true,
1022     "name": "ls [START_DIR]/svg/*",
1023     "~followup_annotations": [
1024       "@@@STEP_LOG_LINE@glob@[START_DIR]/svg/bar.jpg@@@",
1025       "@@@STEP_LOG_LINE@glob@[START_DIR]/svg/foo.png@@@",
1026       "@@@STEP_LOG_END@glob@@@"
1027     ]
1028   },
1029   {
1030     "cmd": [
1031       "/usr/bin/adb.1.0.35",
1032       "push",
1033       "[START_DIR]/svg/bar.jpg",
1034       "[START_DIR]/svg/foo.png",
1035       "/sdcard/revenge_of_the_skiabot/svgs"
1036     ],
1037     "cwd": "[START_DIR]/skia",
1038     "env": {
1039       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1040       "CHROME_HEADLESS": "1",
1041       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1042     },
1043     "infra_step": true,
1044     "name": "push --sync [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs"
1045   },
1046   {
1047     "cmd": [
1048       "/usr/bin/adb.1.0.35",
1049       "push",
1050       "[START_DIR]/tmp/SVG_VERSION",
1051       "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
1052     ],
1053     "cwd": "[START_DIR]/skia",
1054     "env": {
1055       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1056       "CHROME_HEADLESS": "1",
1057       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1058     },
1059     "infra_step": true,
1060     "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION"
1061   },
1062   {
1063     "cmd": [
1064       "python",
1065       "-u",
1066       "import os\nprint(os.environ.get('SWARMING_TASK_ID', ''))\n"
1067     ],
1068     "name": "get swarming task id",
1069     "~followup_annotations": [
1070       "@@@STEP_LOG_LINE@python.inline@import os@@@",
1071       "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_TASK_ID', ''))@@@",
1072       "@@@STEP_LOG_END@python.inline@@@"
1073     ]
1074   },
1075   {
1076     "cmd": [
1077       "vpython",
1078       "-u",
1079       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1080       "--json-output",
1081       "/path/to/tmp/json",
1082       "copy",
1083       "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --example --flags -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc",
1084       "[START_DIR]/tmp/nanobench.sh"
1085     ],
1086     "env": {
1087       "CHROME_HEADLESS": "1",
1088       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1089     },
1090     "infra_step": true,
1091     "name": "write nanobench.sh",
1092     "~followup_annotations": [
1093       "@@@STEP_LOG_LINE@nanobench.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/nanobench --example --flags -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --texttraces /sdcard/revenge_of_the_skiabot/text_blob_traces --svgs /sdcard/revenge_of_the_skiabot/svgs; echo $? >/data/local/tmp/rc@@@",
1094       "@@@STEP_LOG_END@nanobench.sh@@@"
1095     ]
1096   },
1097   {
1098     "cmd": [
1099       "/usr/bin/adb.1.0.35",
1100       "push",
1101       "[START_DIR]/tmp/nanobench.sh",
1102       "/data/local/tmp/"
1103     ],
1104     "cwd": "[START_DIR]/skia",
1105     "env": {
1106       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1107       "CHROME_HEADLESS": "1",
1108       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1109     },
1110     "infra_step": true,
1111     "name": "push nanobench.sh"
1112   },
1113   {
1114     "cmd": [
1115       "/usr/bin/adb.1.0.35",
1116       "logcat",
1117       "-c"
1118     ],
1119     "cwd": "[START_DIR]/skia",
1120     "env": {
1121       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1122       "CHROME_HEADLESS": "1",
1123       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1124     },
1125     "infra_step": true,
1126     "name": "clear log"
1127   },
1128   {
1129     "cmd": [
1130       "python",
1131       "-u",
1132       "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh      = sys.argv[2]\nsubprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])\ntry:\n  sys.exit(int(subprocess.check_output([\n      '/usr/bin/adb.1.0.35', 'shell', 'cat', bin_dir + 'rc']).decode('utf-8')))\nexcept ValueError:\n  print(\"Couldn't read the return code.  Probably killed for OOM.\")\n  sys.exit(1)\n",
1133       "/data/local/tmp/",
1134       "nanobench.sh"
1135     ],
1136     "env": {
1137       "CHROME_HEADLESS": "1",
1138       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1139     },
1140     "name": "nanobench",
1141     "~followup_annotations": [
1142       "@@@STEP_LOG_LINE@python.inline@@@@",
1143       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1144       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1145       "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@",
1146       "@@@STEP_LOG_LINE@python.inline@sh      = sys.argv[2]@@@",
1147       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])@@@",
1148       "@@@STEP_LOG_LINE@python.inline@try:@@@",
1149       "@@@STEP_LOG_LINE@python.inline@  sys.exit(int(subprocess.check_output([@@@",
1150       "@@@STEP_LOG_LINE@python.inline@      '/usr/bin/adb.1.0.35', 'shell', 'cat', bin_dir + 'rc']).decode('utf-8')))@@@",
1151       "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@",
1152       "@@@STEP_LOG_LINE@python.inline@  print(\"Couldn't read the return code.  Probably killed for OOM.\")@@@",
1153       "@@@STEP_LOG_LINE@python.inline@  sys.exit(1)@@@",
1154       "@@@STEP_LOG_END@python.inline@@@"
1155     ]
1156   },
1157   {
1158     "cmd": [
1159       "python",
1160       "-u",
1161       "\nimport os\nimport subprocess\nimport sys\nout = sys.argv[1]\nlog = subprocess.check_output([\n    '/usr/bin/adb.1.0.35', 'logcat', '-d']).decode('utf-8', errors='ignore')\nfor line in log.split('\\n'):\n  tokens = line.split()\n  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':\n    addr, path = tokens[-2:]\n    local = os.path.join(out, os.path.basename(path))\n    if os.path.exists(local):\n      try:\n        sym = subprocess.check_output([\n            'addr2line', '-Cfpe', local, addr]).decode('utf-8')\n        line = line.replace(addr, addr + ' ' + sym.strip())\n      except subprocess.CalledProcessError:\n        pass\n  print(line)\n",
1162       "[START_DIR]/build"
1163     ],
1164     "env": {
1165       "CHROME_HEADLESS": "1",
1166       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1167     },
1168     "infra_step": true,
1169     "name": "dump log",
1170     "timeout": 300,
1171     "~followup_annotations": [
1172       "@@@STEP_LOG_LINE@python.inline@@@@",
1173       "@@@STEP_LOG_LINE@python.inline@import os@@@",
1174       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1175       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1176       "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@",
1177       "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([@@@",
1178       "@@@STEP_LOG_LINE@python.inline@    '/usr/bin/adb.1.0.35', 'logcat', '-d']).decode('utf-8', errors='ignore')@@@",
1179       "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@",
1180       "@@@STEP_LOG_LINE@python.inline@  tokens = line.split()@@@",
1181       "@@@STEP_LOG_LINE@python.inline@  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
1182       "@@@STEP_LOG_LINE@python.inline@    addr, path = tokens[-2:]@@@",
1183       "@@@STEP_LOG_LINE@python.inline@    local = os.path.join(out, os.path.basename(path))@@@",
1184       "@@@STEP_LOG_LINE@python.inline@    if os.path.exists(local):@@@",
1185       "@@@STEP_LOG_LINE@python.inline@      try:@@@",
1186       "@@@STEP_LOG_LINE@python.inline@        sym = subprocess.check_output([@@@",
1187       "@@@STEP_LOG_LINE@python.inline@            'addr2line', '-Cfpe', local, addr]).decode('utf-8')@@@",
1188       "@@@STEP_LOG_LINE@python.inline@        line = line.replace(addr, addr + ' ' + sym.strip())@@@",
1189       "@@@STEP_LOG_LINE@python.inline@      except subprocess.CalledProcessError:@@@",
1190       "@@@STEP_LOG_LINE@python.inline@        pass@@@",
1191       "@@@STEP_LOG_LINE@python.inline@  print(line)@@@",
1192       "@@@STEP_LOG_END@python.inline@@@"
1193     ]
1194   },
1195   {
1196     "cmd": [
1197       "/usr/bin/adb.1.0.35",
1198       "kill-server"
1199     ],
1200     "cwd": "[START_DIR]/skia",
1201     "env": {
1202       "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1203       "CHROME_HEADLESS": "1",
1204       "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1205     },
1206     "infra_step": true,
1207     "name": "kill adb server"
1208   },
1209   {
1210     "name": "$result"
1211   }
1212 ]