1[
2  {
3    "cmd": [
4      "adb",
5      "reboot"
6    ],
7    "cwd": "[START_DIR]/skia",
8    "env": {
9      "BUILDTYPE": "Release",
10      "CHROME_HEADLESS": "1",
11      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
12      "SKIA_OUT": "[START_DIR]/out"
13    },
14    "infra_step": true,
15    "name": "rebooting device"
16  },
17  {
18    "cmd": [
19      "python",
20      "-u",
21      "\nimport subprocess\nimport sys\nimport time\n\nkicks = 0\nwhile True:\n\n  times = 0\n  while times < 30:\n    print 'Waiting for the device to be connected and ready.'\n    try:\n      times += 1\n      output = subprocess.check_output(['adb', 'shell',\n                                        'getprop', 'sys.boot_completed'])\n      if '1' in output:\n        print 'Connected'\n        sys.exit(0)\n    except subprocess.CalledProcessError:\n      # no device connected/authorized yet\n      pass\n    time.sleep(5)\n  if kicks >= 3:\n    break\n  print 'Giving the device a \"kick\" by trying to reboot it.'\n  kicks += 1\n  print subprocess.check_output(['adb', 'reboot'])\n\nprint 'Timed out waiting for device'\nsys.exit(1)\n"
22    ],
23    "env": {
24      "BUILDTYPE": "Release",
25      "CHROME_HEADLESS": "1",
26      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
27      "SKIA_OUT": "[START_DIR]/out"
28    },
29    "infra_step": true,
30    "name": "wait for device",
31    "~followup_annotations": [
32      "@@@STEP_LOG_LINE@python.inline@@@@",
33      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
34      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
35      "@@@STEP_LOG_LINE@python.inline@import time@@@",
36      "@@@STEP_LOG_LINE@python.inline@@@@",
37      "@@@STEP_LOG_LINE@python.inline@kicks = 0@@@",
38      "@@@STEP_LOG_LINE@python.inline@while True:@@@",
39      "@@@STEP_LOG_LINE@python.inline@@@@",
40      "@@@STEP_LOG_LINE@python.inline@  times = 0@@@",
41      "@@@STEP_LOG_LINE@python.inline@  while times < 30:@@@",
42      "@@@STEP_LOG_LINE@python.inline@    print 'Waiting for the device to be connected and ready.'@@@",
43      "@@@STEP_LOG_LINE@python.inline@    try:@@@",
44      "@@@STEP_LOG_LINE@python.inline@      times += 1@@@",
45      "@@@STEP_LOG_LINE@python.inline@      output = subprocess.check_output(['adb', 'shell',@@@",
46      "@@@STEP_LOG_LINE@python.inline@                                        'getprop', 'sys.boot_completed'])@@@",
47      "@@@STEP_LOG_LINE@python.inline@      if '1' in output:@@@",
48      "@@@STEP_LOG_LINE@python.inline@        print 'Connected'@@@",
49      "@@@STEP_LOG_LINE@python.inline@        sys.exit(0)@@@",
50      "@@@STEP_LOG_LINE@python.inline@    except subprocess.CalledProcessError:@@@",
51      "@@@STEP_LOG_LINE@python.inline@      # no device connected/authorized yet@@@",
52      "@@@STEP_LOG_LINE@python.inline@      pass@@@",
53      "@@@STEP_LOG_LINE@python.inline@    time.sleep(5)@@@",
54      "@@@STEP_LOG_LINE@python.inline@  if kicks >= 3:@@@",
55      "@@@STEP_LOG_LINE@python.inline@    break@@@",
56      "@@@STEP_LOG_LINE@python.inline@  print 'Giving the device a \"kick\" by trying to reboot it.'@@@",
57      "@@@STEP_LOG_LINE@python.inline@  kicks += 1@@@",
58      "@@@STEP_LOG_LINE@python.inline@  print subprocess.check_output(['adb', 'reboot'])@@@",
59      "@@@STEP_LOG_LINE@python.inline@@@@",
60      "@@@STEP_LOG_LINE@python.inline@print 'Timed out waiting for device'@@@",
61      "@@@STEP_LOG_LINE@python.inline@sys.exit(1)@@@",
62      "@@@STEP_LOG_END@python.inline@@@"
63    ]
64  },
65  {
66    "cmd": [
67      "adb",
68      "shell",
69      "mkdir",
70      "-p",
71      "/sdcard/revenge_of_the_skiabot/resources"
72    ],
73    "cwd": "[START_DIR]/skia",
74    "env": {
75      "BUILDTYPE": "Release",
76      "CHROME_HEADLESS": "1",
77      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
78      "SKIA_OUT": "[START_DIR]/out"
79    },
80    "infra_step": true,
81    "name": "mkdir /sdcard/revenge_of_the_skiabot/resources"
82  },
83  {
84    "cmd": [
85      "python",
86      "-u",
87      "\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    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
88      "[START_DIR]/skia/resources",
89      "/sdcard/revenge_of_the_skiabot/resources"
90    ],
91    "env": {
92      "BUILDTYPE": "Release",
93      "CHROME_HEADLESS": "1",
94      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
95      "SKIA_OUT": "[START_DIR]/out"
96    },
97    "infra_step": true,
98    "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources",
99    "~followup_annotations": [
100      "@@@STEP_LOG_LINE@python.inline@@@@",
101      "@@@STEP_LOG_LINE@python.inline@import os@@@",
102      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
103      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
104      "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
105      "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
106      "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
107      "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
108      "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
109      "@@@STEP_LOG_LINE@python.inline@    continue@@@",
110      "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
111      "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
112      "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
113      "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
114      "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
115      "@@@STEP_LOG_END@python.inline@@@"
116    ]
117  },
118  {
119    "cmd": [
120      "python",
121      "-u",
122      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
123      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
124      "/path/to/tmp/"
125    ],
126    "infra_step": true,
127    "name": "Get downloaded SKP VERSION"
128  },
129  {
130    "cmd": [
131      "python",
132      "-u",
133      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
134      "42",
135      "[START_DIR]/tmp/SKP_VERSION"
136    ],
137    "infra_step": true,
138    "name": "write SKP_VERSION"
139  },
140  {
141    "cmd": [
142      "adb",
143      "shell",
144      "cat",
145      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
146    ],
147    "cwd": "[START_DIR]/skia",
148    "env": {
149      "BUILDTYPE": "Release",
150      "CHROME_HEADLESS": "1",
151      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
152      "SKIA_OUT": "[START_DIR]/out"
153    },
154    "infra_step": true,
155    "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION",
156    "stdout": "/path/to/tmp/"
157  },
158  {
159    "cmd": [
160      "adb",
161      "shell",
162      "rm",
163      "-f",
164      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
165    ],
166    "cwd": "[START_DIR]/skia",
167    "env": {
168      "BUILDTYPE": "Release",
169      "CHROME_HEADLESS": "1",
170      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
171      "SKIA_OUT": "[START_DIR]/out"
172    },
173    "infra_step": true,
174    "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION"
175  },
176  {
177    "cmd": [
178      "adb",
179      "shell",
180      "rm",
181      "-rf",
182      "/sdcard/revenge_of_the_skiabot/skps"
183    ],
184    "cwd": "[START_DIR]/skia",
185    "env": {
186      "BUILDTYPE": "Release",
187      "CHROME_HEADLESS": "1",
188      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
189      "SKIA_OUT": "[START_DIR]/out"
190    },
191    "infra_step": true,
192    "name": "rm /sdcard/revenge_of_the_skiabot/skps"
193  },
194  {
195    "cmd": [
196      "adb",
197      "shell",
198      "mkdir",
199      "-p",
200      "/sdcard/revenge_of_the_skiabot/skps"
201    ],
202    "cwd": "[START_DIR]/skia",
203    "env": {
204      "BUILDTYPE": "Release",
205      "CHROME_HEADLESS": "1",
206      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
207      "SKIA_OUT": "[START_DIR]/out"
208    },
209    "infra_step": true,
210    "name": "mkdir /sdcard/revenge_of_the_skiabot/skps"
211  },
212  {
213    "cmd": [
214      "python",
215      "-u",
216      "\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    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
217      "[START_DIR]/skp",
218      "/sdcard/revenge_of_the_skiabot/skps"
219    ],
220    "env": {
221      "BUILDTYPE": "Release",
222      "CHROME_HEADLESS": "1",
223      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
224      "SKIA_OUT": "[START_DIR]/out"
225    },
226    "infra_step": true,
227    "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps",
228    "~followup_annotations": [
229      "@@@STEP_LOG_LINE@python.inline@@@@",
230      "@@@STEP_LOG_LINE@python.inline@import os@@@",
231      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
232      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
233      "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
234      "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
235      "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
236      "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
237      "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
238      "@@@STEP_LOG_LINE@python.inline@    continue@@@",
239      "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
240      "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
241      "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
242      "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
243      "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
244      "@@@STEP_LOG_END@python.inline@@@"
245    ]
246  },
247  {
248    "cmd": [
249      "adb",
250      "push",
251      "[START_DIR]/tmp/SKP_VERSION",
252      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
253    ],
254    "cwd": "[START_DIR]/skia",
255    "env": {
256      "BUILDTYPE": "Release",
257      "CHROME_HEADLESS": "1",
258      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
259      "SKIA_OUT": "[START_DIR]/out"
260    },
261    "infra_step": true,
262    "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION"
263  },
264  {
265    "cmd": [
266      "python",
267      "-u",
268      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
269      "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
270      "/path/to/tmp/"
271    ],
272    "infra_step": true,
273    "name": "Get downloaded skimage VERSION"
274  },
275  {
276    "cmd": [
277      "python",
278      "-u",
279      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
280      "42",
281      "[START_DIR]/tmp/SK_IMAGE_VERSION"
282    ],
283    "infra_step": true,
284    "name": "write SK_IMAGE_VERSION"
285  },
286  {
287    "cmd": [
288      "adb",
289      "shell",
290      "cat",
291      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
292    ],
293    "cwd": "[START_DIR]/skia",
294    "env": {
295      "BUILDTYPE": "Release",
296      "CHROME_HEADLESS": "1",
297      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
298      "SKIA_OUT": "[START_DIR]/out"
299    },
300    "infra_step": true,
301    "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION",
302    "stdout": "/path/to/tmp/"
303  },
304  {
305    "cmd": [
306      "adb",
307      "shell",
308      "rm",
309      "-f",
310      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
311    ],
312    "cwd": "[START_DIR]/skia",
313    "env": {
314      "BUILDTYPE": "Release",
315      "CHROME_HEADLESS": "1",
316      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
317      "SKIA_OUT": "[START_DIR]/out"
318    },
319    "infra_step": true,
320    "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
321  },
322  {
323    "cmd": [
324      "adb",
325      "shell",
326      "rm",
327      "-rf",
328      "/sdcard/revenge_of_the_skiabot/images"
329    ],
330    "cwd": "[START_DIR]/skia",
331    "env": {
332      "BUILDTYPE": "Release",
333      "CHROME_HEADLESS": "1",
334      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
335      "SKIA_OUT": "[START_DIR]/out"
336    },
337    "infra_step": true,
338    "name": "rm /sdcard/revenge_of_the_skiabot/images"
339  },
340  {
341    "cmd": [
342      "adb",
343      "shell",
344      "mkdir",
345      "-p",
346      "/sdcard/revenge_of_the_skiabot/images"
347    ],
348    "cwd": "[START_DIR]/skia",
349    "env": {
350      "BUILDTYPE": "Release",
351      "CHROME_HEADLESS": "1",
352      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
353      "SKIA_OUT": "[START_DIR]/out"
354    },
355    "infra_step": true,
356    "name": "mkdir /sdcard/revenge_of_the_skiabot/images"
357  },
358  {
359    "cmd": [
360      "python",
361      "-u",
362      "\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    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
363      "[START_DIR]/skimage",
364      "/sdcard/revenge_of_the_skiabot/images"
365    ],
366    "env": {
367      "BUILDTYPE": "Release",
368      "CHROME_HEADLESS": "1",
369      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
370      "SKIA_OUT": "[START_DIR]/out"
371    },
372    "infra_step": true,
373    "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images",
374    "~followup_annotations": [
375      "@@@STEP_LOG_LINE@python.inline@@@@",
376      "@@@STEP_LOG_LINE@python.inline@import os@@@",
377      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
378      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
379      "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
380      "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
381      "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
382      "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
383      "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
384      "@@@STEP_LOG_LINE@python.inline@    continue@@@",
385      "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
386      "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
387      "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
388      "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
389      "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
390      "@@@STEP_LOG_END@python.inline@@@"
391    ]
392  },
393  {
394    "cmd": [
395      "adb",
396      "push",
397      "[START_DIR]/tmp/SK_IMAGE_VERSION",
398      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
399    ],
400    "cwd": "[START_DIR]/skia",
401    "env": {
402      "BUILDTYPE": "Release",
403      "CHROME_HEADLESS": "1",
404      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
405      "SKIA_OUT": "[START_DIR]/out"
406    },
407    "infra_step": true,
408    "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
409  },
410  {
411    "cmd": [
412      "python",
413      "-u",
414      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
415      "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
416      "/path/to/tmp/"
417    ],
418    "infra_step": true,
419    "name": "Get downloaded SVG VERSION"
420  },
421  {
422    "cmd": [
423      "python",
424      "-u",
425      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
426      "42",
427      "[START_DIR]/tmp/SVG_VERSION"
428    ],
429    "infra_step": true,
430    "name": "write SVG_VERSION"
431  },
432  {
433    "cmd": [
434      "adb",
435      "shell",
436      "cat",
437      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
438    ],
439    "cwd": "[START_DIR]/skia",
440    "env": {
441      "BUILDTYPE": "Release",
442      "CHROME_HEADLESS": "1",
443      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
444      "SKIA_OUT": "[START_DIR]/out"
445    },
446    "infra_step": true,
447    "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION",
448    "stdout": "/path/to/tmp/"
449  },
450  {
451    "cmd": [
452      "adb",
453      "shell",
454      "rm",
455      "-f",
456      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
457    ],
458    "cwd": "[START_DIR]/skia",
459    "env": {
460      "BUILDTYPE": "Release",
461      "CHROME_HEADLESS": "1",
462      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
463      "SKIA_OUT": "[START_DIR]/out"
464    },
465    "infra_step": true,
466    "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION"
467  },
468  {
469    "cmd": [
470      "adb",
471      "shell",
472      "rm",
473      "-rf",
474      "/sdcard/revenge_of_the_skiabot/svgs"
475    ],
476    "cwd": "[START_DIR]/skia",
477    "env": {
478      "BUILDTYPE": "Release",
479      "CHROME_HEADLESS": "1",
480      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
481      "SKIA_OUT": "[START_DIR]/out"
482    },
483    "infra_step": true,
484    "name": "rm /sdcard/revenge_of_the_skiabot/svgs"
485  },
486  {
487    "cmd": [
488      "adb",
489      "shell",
490      "mkdir",
491      "-p",
492      "/sdcard/revenge_of_the_skiabot/svgs"
493    ],
494    "cwd": "[START_DIR]/skia",
495    "env": {
496      "BUILDTYPE": "Release",
497      "CHROME_HEADLESS": "1",
498      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
499      "SKIA_OUT": "[START_DIR]/out"
500    },
501    "infra_step": true,
502    "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs"
503  },
504  {
505    "cmd": [
506      "python",
507      "-u",
508      "\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    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
509      "[START_DIR]/svg",
510      "/sdcard/revenge_of_the_skiabot/svgs"
511    ],
512    "env": {
513      "BUILDTYPE": "Release",
514      "CHROME_HEADLESS": "1",
515      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
516      "SKIA_OUT": "[START_DIR]/out"
517    },
518    "infra_step": true,
519    "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs",
520    "~followup_annotations": [
521      "@@@STEP_LOG_LINE@python.inline@@@@",
522      "@@@STEP_LOG_LINE@python.inline@import os@@@",
523      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
524      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
525      "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
526      "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
527      "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
528      "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
529      "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
530      "@@@STEP_LOG_LINE@python.inline@    continue@@@",
531      "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
532      "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
533      "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
534      "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
535      "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
536      "@@@STEP_LOG_END@python.inline@@@"
537    ]
538  },
539  {
540    "cmd": [
541      "adb",
542      "push",
543      "[START_DIR]/tmp/SVG_VERSION",
544      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
545    ],
546    "cwd": "[START_DIR]/skia",
547    "env": {
548      "BUILDTYPE": "Release",
549      "CHROME_HEADLESS": "1",
550      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
551      "SKIA_OUT": "[START_DIR]/out"
552    },
553    "infra_step": true,
554    "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION"
555  },
556  {
557    "cmd": [
558      "adb",
559      "shell",
560      "rm",
561      "-rf",
562      "/sdcard/revenge_of_the_skiabot/perf"
563    ],
564    "cwd": "[START_DIR]/skia",
565    "env": {
566      "BUILDTYPE": "Release",
567      "CHROME_HEADLESS": "1",
568      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
569      "SKIA_OUT": "[START_DIR]/out"
570    },
571    "infra_step": true,
572    "name": "rm /sdcard/revenge_of_the_skiabot/perf"
573  },
574  {
575    "cmd": [
576      "adb",
577      "shell",
578      "mkdir",
579      "-p",
580      "/sdcard/revenge_of_the_skiabot/perf"
581    ],
582    "cwd": "[START_DIR]/skia",
583    "env": {
584      "BUILDTYPE": "Release",
585      "CHROME_HEADLESS": "1",
586      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
587      "SKIA_OUT": "[START_DIR]/out"
588    },
589    "infra_step": true,
590    "name": "mkdir /sdcard/revenge_of_the_skiabot/perf"
591  },
592  {
593    "cmd": [
594      "adb",
595      "push",
596      "[START_DIR]/out/Release/nanobench",
597      "/data/local/tmp/"
598    ],
599    "cwd": "[START_DIR]/skia",
600    "env": {
601      "BUILDTYPE": "Release",
602      "CHROME_HEADLESS": "1",
603      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
604      "SKIA_OUT": "[START_DIR]/out"
605    },
606    "infra_step": true,
607    "name": "push nanobench"
608  },
609  {
610    "cmd": [
611      "python",
612      "-u",
613      "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
614      "set -x; /data/local/tmp/nanobench --undefok -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --nocpu --pre_log --images --gpuStatsDump true --useThermalManager 1,1,10,1000 --scales 1.0 1.1 --config vk --match ~blurroundrect ~patch_grid ~desk_carsvg ~desk_unicodetable ~hardstop ~inc0.gif ~inc1.gif ~incInterlaced.gif ~inc0.jpg ~incGray.jpg ~inc0.wbmp ~inc1.wbmp ~inc0.webp ~inc1.webp ~inc0.ico ~inc1.ico ~inc0.png ~inc1.png ~inc2.png ~inc12.png ~inc13.png ~inc14.png ~inc0.webp ~inc1.webp --outResultsFile /sdcard/revenge_of_the_skiabot/perf/nanobench_abc123_1337000001.json --properties gitHash abc123 build_number 5 --key arch x86 compiler Clang cpu_or_gpu GPU cpu_or_gpu_value PowerVR extra_config GN_Android_Vulkan model NexusPlayer os Android; echo $? >/data/local/tmp/rc",
615      "[START_DIR]/tmp/nanobench.sh"
616    ],
617    "env": {
618      "BUILDTYPE": "Release",
619      "CHROME_HEADLESS": "1",
620      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
621      "SKIA_OUT": "[START_DIR]/out"
622    },
623    "infra_step": true,
624    "name": "write nanobench.sh"
625  },
626  {
627    "cmd": [
628      "adb",
629      "push",
630      "[START_DIR]/tmp/nanobench.sh",
631      "/data/local/tmp/"
632    ],
633    "cwd": "[START_DIR]/skia",
634    "env": {
635      "BUILDTYPE": "Release",
636      "CHROME_HEADLESS": "1",
637      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
638      "SKIA_OUT": "[START_DIR]/out"
639    },
640    "infra_step": true,
641    "name": "push nanobench.sh"
642  },
643  {
644    "cmd": [
645      "adb",
646      "logcat",
647      "-c"
648    ],
649    "cwd": "[START_DIR]/skia",
650    "env": {
651      "BUILDTYPE": "Release",
652      "CHROME_HEADLESS": "1",
653      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
654      "SKIA_OUT": "[START_DIR]/out"
655    },
656    "infra_step": true,
657    "name": "clear log"
658  },
659  {
660    "cmd": [
661      "python",
662      "-u",
663      "\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",
664      "/data/local/tmp/",
665      "nanobench.sh"
666    ],
667    "env": {
668      "BUILDTYPE": "Release",
669      "CHROME_HEADLESS": "1",
670      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
671      "SKIA_OUT": "[START_DIR]/out"
672    },
673    "name": "nanobench",
674    "~followup_annotations": [
675      "@@@STEP_LOG_LINE@python.inline@@@@",
676      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
677      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
678      "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@",
679      "@@@STEP_LOG_LINE@python.inline@sh      = sys.argv[2]@@@",
680      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['adb', 'shell', 'sh', bin_dir + sh])@@@",
681      "@@@STEP_LOG_LINE@python.inline@try:@@@",
682      "@@@STEP_LOG_LINE@python.inline@  sys.exit(int(subprocess.check_output(['adb', 'shell', 'cat',@@@",
683      "@@@STEP_LOG_LINE@python.inline@                                        bin_dir + 'rc'])))@@@",
684      "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@",
685      "@@@STEP_LOG_LINE@python.inline@  print \"Couldn't read the return code.  Probably killed for OOM.\"@@@",
686      "@@@STEP_LOG_LINE@python.inline@  sys.exit(1)@@@",
687      "@@@STEP_LOG_END@python.inline@@@"
688    ]
689  },
690  {
691    "cmd": [
692      "python",
693      "-u",
694      "\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",
695      "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-GN_Android_Vulkan/data",
696      "511"
697    ],
698    "name": "makedirs perf_dir",
699    "~followup_annotations": [
700      "@@@STEP_LOG_LINE@python.inline@@@@",
701      "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
702      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
703      "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
704      "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
705      "@@@STEP_LOG_LINE@python.inline@  if os.path.exists(path):@@@",
706      "@@@STEP_LOG_LINE@python.inline@    print \"%s exists but is not a dir\" % path@@@",
707      "@@@STEP_LOG_LINE@python.inline@    sys.exit(1)@@@",
708      "@@@STEP_LOG_LINE@python.inline@  os.makedirs(path, mode)@@@",
709      "@@@STEP_LOG_END@python.inline@@@"
710    ]
711  },
712  {
713    "cmd": [
714      "adb",
715      "pull",
716      "/sdcard/revenge_of_the_skiabot/perf",
717      "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-GN_Android_Vulkan/data"
718    ],
719    "cwd": "[START_DIR]/skia",
720    "env": {
721      "BUILDTYPE": "Release",
722      "CHROME_HEADLESS": "1",
723      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
724      "SKIA_OUT": "[START_DIR]/out"
725    },
726    "infra_step": true,
727    "name": "pull /sdcard/revenge_of_the_skiabot/perf [CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-GN_Android_Vulkan/data"
728  },
729  {
730    "cmd": [
731      "python",
732      "-u",
733      "\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",
734      "[START_DIR]/out/Release"
735    ],
736    "env": {
737      "BUILDTYPE": "Release",
738      "CHROME_HEADLESS": "1",
739      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
740      "SKIA_OUT": "[START_DIR]/out"
741    },
742    "infra_step": true,
743    "name": "dump log",
744    "~followup_annotations": [
745      "@@@STEP_LOG_LINE@python.inline@@@@",
746      "@@@STEP_LOG_LINE@python.inline@import os@@@",
747      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
748      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
749      "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@",
750      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['adb', 'logcat', '-d'])@@@",
751      "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@",
752      "@@@STEP_LOG_LINE@python.inline@  tokens = line.split()@@@",
753      "@@@STEP_LOG_LINE@python.inline@  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
754      "@@@STEP_LOG_LINE@python.inline@    addr, path = tokens[-2:]@@@",
755      "@@@STEP_LOG_LINE@python.inline@    local = os.path.join(out, os.path.basename(path))@@@",
756      "@@@STEP_LOG_LINE@python.inline@    if os.path.exists(local):@@@",
757      "@@@STEP_LOG_LINE@python.inline@      sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@",
758      "@@@STEP_LOG_LINE@python.inline@      line = line.replace(addr, addr + ' ' + sym.strip())@@@",
759      "@@@STEP_LOG_LINE@python.inline@  print line@@@",
760      "@@@STEP_LOG_END@python.inline@@@"
761    ]
762  },
763  {
764    "cmd": [
765      "adb",
766      "kill-server"
767    ],
768    "cwd": "[START_DIR]/skia",
769    "env": {
770      "BUILDTYPE": "Release",
771      "CHROME_HEADLESS": "1",
772      "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]",
773      "SKIA_OUT": "[START_DIR]/out"
774    },
775    "infra_step": true,
776    "name": "kill adb server"
777  },
778  {
779    "name": "$result",
780    "recipe_result": null,
781    "status_code": 0
782  }
783]