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