1[
2  {
3    "cmd": [
4      "vpython3",
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      "0o777",
12      "[START_DIR]/tmp"
13    ],
14    "infra_step": true,
15    "name": "makedirs tmp_dir"
16  },
17  {
18    "cmd": [
19      "python3",
20      "RECIPE_MODULE[skia::vars]/resources/get_env_var.py",
21      "SWARMING_BOT_ID"
22    ],
23    "name": "get swarming bot id"
24  },
25  {
26    "cmd": [
27      "/opt/infra-android/tools/adb",
28      "shell",
29      "mkdir",
30      "-p",
31      "/sdcard/revenge_of_the_skiabot/resources"
32    ],
33    "cwd": "[START_DIR]/skia",
34    "env": {
35      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
36      "CHROME_HEADLESS": "1",
37      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
38    },
39    "infra_step": true,
40    "name": "mkdir /sdcard/revenge_of_the_skiabot/resources"
41  },
42  {
43    "cmd": [
44      "python3",
45      "RECIPE_MODULE[skia::flavor]/resources/set_cpu_scaling_governor.py",
46      "/opt/infra-android/tools/adb",
47      "0",
48      "hotplug"
49    ],
50    "env": {
51      "CHROME_HEADLESS": "1",
52      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
53    },
54    "infra_step": true,
55    "name": "Set CPU 0's governor to hotplug",
56    "timeout": 30
57  },
58  {
59    "cmd": [
60      "/opt/infra-android/tools/adb",
61      "push",
62      "[START_DIR]/build/dm",
63      "/data/local/tmp/"
64    ],
65    "cwd": "[START_DIR]/skia",
66    "env": {
67      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
68      "CHROME_HEADLESS": "1",
69      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
70    },
71    "infra_step": true,
72    "name": "push dm"
73  },
74  {
75    "cmd": [
76      "vpython3",
77      "-u",
78      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
79      "--json-output",
80      "/path/to/tmp/json",
81      "glob",
82      "[START_DIR]/skia/resources",
83      "*"
84    ],
85    "infra_step": true,
86    "name": "ls [START_DIR]/skia/resources/*",
87    "~followup_annotations": [
88      "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/bar.jpg@@@",
89      "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/foo.png@@@",
90      "@@@STEP_LOG_END@glob@@@"
91    ]
92  },
93  {
94    "cmd": [
95      "/opt/infra-android/tools/adb",
96      "push",
97      "[START_DIR]/skia/resources/bar.jpg",
98      "[START_DIR]/skia/resources/foo.png",
99      "/sdcard/revenge_of_the_skiabot/resources"
100    ],
101    "cwd": "[START_DIR]/skia",
102    "env": {
103      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
104      "CHROME_HEADLESS": "1",
105      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
106    },
107    "infra_step": true,
108    "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources"
109  },
110  {
111    "cmd": [
112      "vpython3",
113      "-u",
114      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
115      "--json-output",
116      "/path/to/tmp/json",
117      "copy",
118      "[START_DIR]/skia/infra/bots/assets/lottie-samples/VERSION",
119      "/path/to/tmp/"
120    ],
121    "infra_step": true,
122    "name": "Get lottie-samples VERSION",
123    "~followup_annotations": [
124      "@@@STEP_LOG_LINE@VERSION@42@@@",
125      "@@@STEP_LOG_END@VERSION@@@"
126    ]
127  },
128  {
129    "cmd": [
130      "vpython3",
131      "-u",
132      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
133      "--json-output",
134      "/path/to/tmp/json",
135      "copy",
136      "42",
137      "[START_DIR]/tmp/LOTTIE_VERSION"
138    ],
139    "infra_step": true,
140    "name": "write LOTTIE_VERSION",
141    "~followup_annotations": [
142      "@@@STEP_LOG_LINE@LOTTIE_VERSION@42@@@",
143      "@@@STEP_LOG_END@LOTTIE_VERSION@@@"
144    ]
145  },
146  {
147    "cmd": [
148      "/opt/infra-android/tools/adb",
149      "shell",
150      "test",
151      "-f",
152      "/sdcard/revenge_of_the_skiabot/LOTTIE_VERSION"
153    ],
154    "cwd": "[START_DIR]/skia",
155    "env": {
156      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
157      "CHROME_HEADLESS": "1",
158      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
159    },
160    "infra_step": true,
161    "name": "check if /sdcard/revenge_of_the_skiabot/LOTTIE_VERSION exists"
162  },
163  {
164    "cmd": [
165      "/opt/infra-android/tools/adb",
166      "shell",
167      "cat",
168      "/sdcard/revenge_of_the_skiabot/LOTTIE_VERSION"
169    ],
170    "cwd": "[START_DIR]/skia",
171    "env": {
172      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
173      "CHROME_HEADLESS": "1",
174      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
175    },
176    "infra_step": true,
177    "name": "read /sdcard/revenge_of_the_skiabot/LOTTIE_VERSION"
178  },
179  {
180    "cmd": [
181      "python3",
182      "RECIPE_MODULE[skia::flavor]/resources/remove_file_on_device.py",
183      "/opt/infra-android/tools/adb",
184      "/sdcard/revenge_of_the_skiabot/LOTTIE_VERSION"
185    ],
186    "env": {
187      "CHROME_HEADLESS": "1",
188      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
189    },
190    "infra_step": true,
191    "name": "rm /sdcard/revenge_of_the_skiabot/LOTTIE_VERSION"
192  },
193  {
194    "cmd": [
195      "python3",
196      "RECIPE_MODULE[skia::flavor]/resources/remove_file_on_device.py",
197      "/opt/infra-android/tools/adb",
198      "/sdcard/revenge_of_the_skiabot/lotties"
199    ],
200    "env": {
201      "CHROME_HEADLESS": "1",
202      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
203    },
204    "infra_step": true,
205    "name": "rm /sdcard/revenge_of_the_skiabot/lotties"
206  },
207  {
208    "cmd": [
209      "/opt/infra-android/tools/adb",
210      "shell",
211      "mkdir",
212      "-p",
213      "/sdcard/revenge_of_the_skiabot/lotties"
214    ],
215    "cwd": "[START_DIR]/skia",
216    "env": {
217      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
218      "CHROME_HEADLESS": "1",
219      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
220    },
221    "infra_step": true,
222    "name": "mkdir /sdcard/revenge_of_the_skiabot/lotties"
223  },
224  {
225    "cmd": [
226      "vpython3",
227      "-u",
228      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
229      "--json-output",
230      "/path/to/tmp/json",
231      "glob",
232      "[START_DIR]/lottie-samples",
233      "*"
234    ],
235    "infra_step": true,
236    "name": "ls [START_DIR]/lottie-samples/*",
237    "~followup_annotations": [
238      "@@@STEP_LOG_LINE@glob@[START_DIR]/lottie-samples/bar.jpg@@@",
239      "@@@STEP_LOG_LINE@glob@[START_DIR]/lottie-samples/foo.png@@@",
240      "@@@STEP_LOG_END@glob@@@"
241    ]
242  },
243  {
244    "cmd": [
245      "/opt/infra-android/tools/adb",
246      "push",
247      "[START_DIR]/lottie-samples/bar.jpg",
248      "[START_DIR]/lottie-samples/foo.png",
249      "/sdcard/revenge_of_the_skiabot/lotties"
250    ],
251    "cwd": "[START_DIR]/skia",
252    "env": {
253      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
254      "CHROME_HEADLESS": "1",
255      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
256    },
257    "infra_step": true,
258    "name": "push [START_DIR]/lottie-samples/* /sdcard/revenge_of_the_skiabot/lotties"
259  },
260  {
261    "cmd": [
262      "/opt/infra-android/tools/adb",
263      "push",
264      "[START_DIR]/tmp/LOTTIE_VERSION",
265      "/sdcard/revenge_of_the_skiabot/LOTTIE_VERSION"
266    ],
267    "cwd": "[START_DIR]/skia",
268    "env": {
269      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
270      "CHROME_HEADLESS": "1",
271      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
272    },
273    "infra_step": true,
274    "name": "push [START_DIR]/tmp/LOTTIE_VERSION /sdcard/revenge_of_the_skiabot/LOTTIE_VERSION"
275  },
276  {
277    "cmd": [
278      "python3",
279      "RECIPE_MODULE[skia::flavor]/resources/remove_file_on_device.py",
280      "/opt/infra-android/tools/adb",
281      "/sdcard/revenge_of_the_skiabot/dm_out"
282    ],
283    "env": {
284      "CHROME_HEADLESS": "1",
285      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
286    },
287    "infra_step": true,
288    "name": "rm /sdcard/revenge_of_the_skiabot/dm_out"
289  },
290  {
291    "cmd": [
292      "/opt/infra-android/tools/adb",
293      "shell",
294      "mkdir",
295      "-p",
296      "/sdcard/revenge_of_the_skiabot/dm_out"
297    ],
298    "cwd": "[START_DIR]/skia",
299    "env": {
300      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
301      "CHROME_HEADLESS": "1",
302      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
303    },
304    "infra_step": true,
305    "name": "mkdir /sdcard/revenge_of_the_skiabot/dm_out"
306  },
307  {
308    "cmd": [
309      "python3",
310      "RECIPE_MODULE[skia::flavor]/resources/remove_file_on_device.py",
311      "/opt/infra-android/tools/adb",
312      "/sdcard/revenge_of_the_skiabot/lotties_with_assets"
313    ],
314    "env": {
315      "CHROME_HEADLESS": "1",
316      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
317    },
318    "infra_step": true,
319    "name": "rm /sdcard/revenge_of_the_skiabot/lotties_with_assets"
320  },
321  {
322    "cmd": [
323      "/opt/infra-android/tools/adb",
324      "shell",
325      "mkdir",
326      "-p",
327      "/sdcard/revenge_of_the_skiabot/lotties_with_assets"
328    ],
329    "cwd": "[START_DIR]/skia",
330    "env": {
331      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
332      "CHROME_HEADLESS": "1",
333      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
334    },
335    "infra_step": true,
336    "name": "mkdir /sdcard/revenge_of_the_skiabot/lotties_with_assets"
337  },
338  {
339    "cmd": [
340      "vpython3",
341      "-u",
342      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
343      "--json-output",
344      "/path/to/tmp/json",
345      "copytree",
346      "[START_DIR]/lotties_with_assets",
347      "[CLEANUP]/lwa_tmp_1/nosymlinks"
348    ],
349    "infra_step": true,
350    "name": "Copying files on host to remove symlinks"
351  },
352  {
353    "cmd": [
354      "vpython3",
355      "-u",
356      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
357      "--json-output",
358      "/path/to/tmp/json",
359      "glob",
360      "[CLEANUP]/lwa_tmp_1/nosymlinks",
361      "*"
362    ],
363    "infra_step": true,
364    "name": "ls [CLEANUP]/lwa_tmp_1/nosymlinks/*",
365    "~followup_annotations": [
366      "@@@STEP_LOG_LINE@glob@[CLEANUP]/lwa_tmp_1/nosymlinks/bar.jpg@@@",
367      "@@@STEP_LOG_LINE@glob@[CLEANUP]/lwa_tmp_1/nosymlinks/foo.png@@@",
368      "@@@STEP_LOG_END@glob@@@"
369    ]
370  },
371  {
372    "cmd": [
373      "/opt/infra-android/tools/adb",
374      "push",
375      "[CLEANUP]/lwa_tmp_1/nosymlinks/bar.jpg",
376      "[CLEANUP]/lwa_tmp_1/nosymlinks/foo.png",
377      "/sdcard/revenge_of_the_skiabot/lotties_with_assets"
378    ],
379    "cwd": "[START_DIR]/skia",
380    "env": {
381      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
382      "CHROME_HEADLESS": "1",
383      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
384    },
385    "infra_step": true,
386    "name": "push [CLEANUP]/lwa_tmp_1/nosymlinks/* /sdcard/revenge_of_the_skiabot/lotties_with_assets"
387  },
388  {
389    "cmd": [
390      "vpython3",
391      "-u",
392      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
393      "--json-output",
394      "/path/to/tmp/json",
395      "listdir",
396      "[CLEANUP]/lwa_tmp_1/nosymlinks"
397    ],
398    "infra_step": true,
399    "name": "list lottie files",
400    "~followup_annotations": [
401      "@@@STEP_LOG_LINE@listdir@[CLEANUP]/lwa_tmp_1/nosymlinks/skottie_asset_000@@@",
402      "@@@STEP_LOG_LINE@listdir@[CLEANUP]/lwa_tmp_1/nosymlinks/skottie_asset_001@@@",
403      "@@@STEP_LOG_LINE@listdir@[CLEANUP]/lwa_tmp_1/nosymlinks/skottie_asset_002@@@",
404      "@@@STEP_LOG_END@listdir@@@"
405    ]
406  },
407  {
408    "cmd": [
409      "vpython3",
410      "-u",
411      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
412      "--json-output",
413      "/path/to/tmp/json",
414      "copy",
415      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties_with_assets/skottie_asset_000 --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/1.json --match \\^data\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
416      "[START_DIR]/tmp/dm.sh"
417    ],
418    "env": {
419      "CHROME_HEADLESS": "1",
420      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
421    },
422    "infra_step": true,
423    "name": "write dm.sh",
424    "~followup_annotations": [
425      "@@@[email protected]@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties_with_assets/skottie_asset_000 --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/1.json --match \\^data\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
426      "@@@[email protected]@@@"
427    ]
428  },
429  {
430    "cmd": [
431      "/opt/infra-android/tools/adb",
432      "push",
433      "[START_DIR]/tmp/dm.sh",
434      "/data/local/tmp/"
435    ],
436    "cwd": "[START_DIR]/skia",
437    "env": {
438      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
439      "CHROME_HEADLESS": "1",
440      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
441    },
442    "infra_step": true,
443    "name": "push dm.sh"
444  },
445  {
446    "cmd": [
447      "/opt/infra-android/tools/adb",
448      "logcat",
449      "-c"
450    ],
451    "cwd": "[START_DIR]/skia",
452    "env": {
453      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
454      "CHROME_HEADLESS": "1",
455      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
456    },
457    "infra_step": true,
458    "name": "clear log"
459  },
460  {
461    "cmd": [
462      "python3",
463      "RECIPE_MODULE[skia::flavor]/resources/run_sh.py",
464      "/data/local/tmp/",
465      "dm.sh",
466      "/opt/infra-android/tools/adb"
467    ],
468    "env": {
469      "CHROME_HEADLESS": "1",
470      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
471    },
472    "name": "dm"
473  },
474  {
475    "cmd": [
476      "/opt/infra-android/tools/adb",
477      "shell",
478      "test",
479      "-f",
480      "/sdcard/revenge_of_the_skiabot/dm_out/1.json"
481    ],
482    "cwd": "[START_DIR]/skia",
483    "env": {
484      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
485      "CHROME_HEADLESS": "1",
486      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
487    },
488    "infra_step": true,
489    "name": "check if /sdcard/revenge_of_the_skiabot/dm_out/1.json exists"
490  },
491  {
492    "cmd": [
493      "/opt/infra-android/tools/adb",
494      "shell",
495      "cat",
496      "/sdcard/revenge_of_the_skiabot/dm_out/1.json"
497    ],
498    "cwd": "[START_DIR]/skia",
499    "env": {
500      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
501      "CHROME_HEADLESS": "1",
502      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
503    },
504    "infra_step": true,
505    "name": "read /sdcard/revenge_of_the_skiabot/dm_out/1.json"
506  },
507  {
508    "cmd": [
509      "python3",
510      "RECIPE_MODULE[skia::infra]/resources/parse_skottie_trace.py",
511      "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n",
512      "skottie_asset_000",
513      "/path/to/tmp/json",
514      "skottie::Animation::seek",
515      "skottie::Animation::render",
516      "25"
517    ],
518    "env": {
519      "CHROME_HEADLESS": "1",
520      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
521    },
522    "name": "parse skottie_asset_000 trace",
523    "~followup_annotations": [
524      "@@@[email protected]@{@@@",
525      "@@@[email protected]@  \"frame_avg_us\": 179.71,@@@",
526      "@@@[email protected]@  \"frame_max_us\": 218.25,@@@",
527      "@@@[email protected]@  \"frame_min_us\": 141.17@@@",
528      "@@@[email protected]@}@@@",
529      "@@@[email protected]@@@"
530    ]
531  },
532  {
533    "cmd": [
534      "python3",
535      "RECIPE_MODULE[skia::flavor]/resources/remove_file_on_device.py",
536      "/opt/infra-android/tools/adb",
537      "/sdcard/revenge_of_the_skiabot/dm_out/1.json"
538    ],
539    "env": {
540      "CHROME_HEADLESS": "1",
541      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
542    },
543    "infra_step": true,
544    "name": "rm /sdcard/revenge_of_the_skiabot/dm_out/1.json"
545  },
546  {
547    "cmd": [
548      "vpython3",
549      "-u",
550      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
551      "--json-output",
552      "/path/to/tmp/json",
553      "copy",
554      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties_with_assets/skottie_asset_001 --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \\^data\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
555      "[START_DIR]/tmp/dm.sh"
556    ],
557    "env": {
558      "CHROME_HEADLESS": "1",
559      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
560    },
561    "infra_step": true,
562    "name": "write dm.sh (2)",
563    "~followup_annotations": [
564      "@@@[email protected]@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties_with_assets/skottie_asset_001 --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/2.json --match \\^data\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
565      "@@@[email protected]@@@"
566    ]
567  },
568  {
569    "cmd": [
570      "/opt/infra-android/tools/adb",
571      "push",
572      "[START_DIR]/tmp/dm.sh",
573      "/data/local/tmp/"
574    ],
575    "cwd": "[START_DIR]/skia",
576    "env": {
577      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
578      "CHROME_HEADLESS": "1",
579      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
580    },
581    "infra_step": true,
582    "name": "push dm.sh (2)"
583  },
584  {
585    "cmd": [
586      "/opt/infra-android/tools/adb",
587      "logcat",
588      "-c"
589    ],
590    "cwd": "[START_DIR]/skia",
591    "env": {
592      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
593      "CHROME_HEADLESS": "1",
594      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
595    },
596    "infra_step": true,
597    "name": "clear log (2)"
598  },
599  {
600    "cmd": [
601      "python3",
602      "RECIPE_MODULE[skia::flavor]/resources/run_sh.py",
603      "/data/local/tmp/",
604      "dm.sh",
605      "/opt/infra-android/tools/adb"
606    ],
607    "env": {
608      "CHROME_HEADLESS": "1",
609      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
610    },
611    "name": "dm (2)"
612  },
613  {
614    "cmd": [
615      "/opt/infra-android/tools/adb",
616      "shell",
617      "test",
618      "-f",
619      "/sdcard/revenge_of_the_skiabot/dm_out/2.json"
620    ],
621    "cwd": "[START_DIR]/skia",
622    "env": {
623      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
624      "CHROME_HEADLESS": "1",
625      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
626    },
627    "infra_step": true,
628    "name": "check if /sdcard/revenge_of_the_skiabot/dm_out/2.json exists"
629  },
630  {
631    "cmd": [
632      "/opt/infra-android/tools/adb",
633      "shell",
634      "cat",
635      "/sdcard/revenge_of_the_skiabot/dm_out/2.json"
636    ],
637    "cwd": "[START_DIR]/skia",
638    "env": {
639      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
640      "CHROME_HEADLESS": "1",
641      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
642    },
643    "infra_step": true,
644    "name": "read /sdcard/revenge_of_the_skiabot/dm_out/2.json"
645  },
646  {
647    "cmd": [
648      "python3",
649      "RECIPE_MODULE[skia::infra]/resources/parse_skottie_trace.py",
650      "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n",
651      "skottie_asset_001",
652      "/path/to/tmp/json",
653      "skottie::Animation::seek",
654      "skottie::Animation::render",
655      "25"
656    ],
657    "env": {
658      "CHROME_HEADLESS": "1",
659      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
660    },
661    "name": "parse skottie_asset_001 trace",
662    "~followup_annotations": [
663      "@@@[email protected]@{@@@",
664      "@@@[email protected]@  \"frame_avg_us\": 179.71,@@@",
665      "@@@[email protected]@  \"frame_max_us\": 218.25,@@@",
666      "@@@[email protected]@  \"frame_min_us\": 141.17@@@",
667      "@@@[email protected]@}@@@",
668      "@@@[email protected]@@@"
669    ]
670  },
671  {
672    "cmd": [
673      "python3",
674      "RECIPE_MODULE[skia::flavor]/resources/remove_file_on_device.py",
675      "/opt/infra-android/tools/adb",
676      "/sdcard/revenge_of_the_skiabot/dm_out/2.json"
677    ],
678    "env": {
679      "CHROME_HEADLESS": "1",
680      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
681    },
682    "infra_step": true,
683    "name": "rm /sdcard/revenge_of_the_skiabot/dm_out/2.json"
684  },
685  {
686    "cmd": [
687      "vpython3",
688      "-u",
689      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
690      "--json-output",
691      "/path/to/tmp/json",
692      "copy",
693      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties_with_assets/skottie_asset_002 --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^data\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc",
694      "[START_DIR]/tmp/dm.sh"
695    ],
696    "env": {
697      "CHROME_HEADLESS": "1",
698      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
699    },
700    "infra_step": true,
701    "name": "write dm.sh (3)",
702    "~followup_annotations": [
703      "@@@[email protected]@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --lotties /sdcard/revenge_of_the_skiabot/lotties_with_assets/skottie_asset_002 --src lottie --nonativeFonts --verbose --traceMatch skottie --trace /sdcard/revenge_of_the_skiabot/dm_out/3.json --match \\^data\\.json\\$ --config gles --nocpu; echo $? >/data/local/tmp/rc@@@",
704      "@@@[email protected]@@@"
705    ]
706  },
707  {
708    "cmd": [
709      "/opt/infra-android/tools/adb",
710      "push",
711      "[START_DIR]/tmp/dm.sh",
712      "/data/local/tmp/"
713    ],
714    "cwd": "[START_DIR]/skia",
715    "env": {
716      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
717      "CHROME_HEADLESS": "1",
718      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
719    },
720    "infra_step": true,
721    "name": "push dm.sh (3)"
722  },
723  {
724    "cmd": [
725      "/opt/infra-android/tools/adb",
726      "logcat",
727      "-c"
728    ],
729    "cwd": "[START_DIR]/skia",
730    "env": {
731      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
732      "CHROME_HEADLESS": "1",
733      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
734    },
735    "infra_step": true,
736    "name": "clear log (3)"
737  },
738  {
739    "cmd": [
740      "python3",
741      "RECIPE_MODULE[skia::flavor]/resources/run_sh.py",
742      "/data/local/tmp/",
743      "dm.sh",
744      "/opt/infra-android/tools/adb"
745    ],
746    "env": {
747      "CHROME_HEADLESS": "1",
748      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
749    },
750    "name": "dm (3)"
751  },
752  {
753    "cmd": [
754      "/opt/infra-android/tools/adb",
755      "shell",
756      "test",
757      "-f",
758      "/sdcard/revenge_of_the_skiabot/dm_out/3.json"
759    ],
760    "cwd": "[START_DIR]/skia",
761    "env": {
762      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
763      "CHROME_HEADLESS": "1",
764      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
765    },
766    "infra_step": true,
767    "name": "check if /sdcard/revenge_of_the_skiabot/dm_out/3.json exists"
768  },
769  {
770    "cmd": [
771      "/opt/infra-android/tools/adb",
772      "shell",
773      "cat",
774      "/sdcard/revenge_of_the_skiabot/dm_out/3.json"
775    ],
776    "cwd": "[START_DIR]/skia",
777    "env": {
778      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/chrome_infrastructure_adbkey",
779      "CHROME_HEADLESS": "1",
780      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
781    },
782    "infra_step": true,
783    "name": "read /sdcard/revenge_of_the_skiabot/dm_out/3.json"
784  },
785  {
786    "cmd": [
787      "python3",
788      "RECIPE_MODULE[skia::infra]/resources/parse_skottie_trace.py",
789      "\n[{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":452,\"dur\":2.57,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPaint(const SkPaint &)\",\"ts\":473,\"dur\":2.67e+03,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.15e+03,\"dur\":2.25,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.15e+03,\"dur\":216,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void SkCanvas::drawPath(const SkPath &, const SkPaint &)\",\"ts\":3.35e+03,\"dur\":15.1,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::seek(SkScalar)\",\"ts\":3.37e+03,\"dur\":1.17,\"tid\":1,\"pid\":0},{\"ph\":\"X\",\"name\":\"void skottie::Animation::render(SkCanvas *, const SkRect *, RenderFlags) const\",\"ts\":3.37e+03,\"dur\":140,\"tid\":1,\"pid\":0}]\n",
790      "skottie_asset_002",
791      "/path/to/tmp/json",
792      "skottie::Animation::seek",
793      "skottie::Animation::render",
794      "25"
795    ],
796    "env": {
797      "CHROME_HEADLESS": "1",
798      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
799    },
800    "name": "parse skottie_asset_002 trace",
801    "~followup_annotations": [
802      "@@@[email protected]@{@@@",
803      "@@@[email protected]@  \"frame_avg_us\": 179.71,@@@",
804      "@@@[email protected]@  \"frame_max_us\": 218.25,@@@",
805      "@@@[email protected]@  \"frame_min_us\": 141.17@@@",
806      "@@@[email protected]@}@@@",
807      "@@@[email protected]@@@"
808    ]
809  },
810  {
811    "cmd": [
812      "python3",
813      "RECIPE_MODULE[skia::flavor]/resources/remove_file_on_device.py",
814      "/opt/infra-android/tools/adb",
815      "/sdcard/revenge_of_the_skiabot/dm_out/3.json"
816    ],
817    "env": {
818      "CHROME_HEADLESS": "1",
819      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
820    },
821    "infra_step": true,
822    "name": "rm /sdcard/revenge_of_the_skiabot/dm_out/3.json"
823  },
824  {
825    "cmd": [
826      "python3",
827      "RECIPE_MODULE[skia::vars]/resources/get_env_var.py",
828      "SWARMING_BOT_ID"
829    ],
830    "name": "get swarming bot id (2)"
831  },
832  {
833    "cmd": [
834      "python3",
835      "RECIPE_MODULE[skia::vars]/resources/get_env_var.py",
836      "SWARMING_TASK_ID"
837    ],
838    "name": "get swarming task id"
839  },
840  {
841    "cmd": [
842      "vpython3",
843      "-u",
844      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
845      "--json-output",
846      "/path/to/tmp/json",
847      "ensure-directory",
848      "--mode",
849      "0o777",
850      "[START_DIR]/[SWARM_OUT_DIR]"
851    ],
852    "infra_step": true,
853    "name": "makedirs perf_dir"
854  },
855  {
856    "cmd": [
857      "vpython3",
858      "-u",
859      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
860      "--json-output",
861      "/path/to/tmp/json",
862      "copy",
863      "{\n    \"gitHash\": \"abc123\",\n    \"key\": {\n        \"arch\": \"arm\",\n        \"bench_type\": \"tracing\",\n        \"compiler\": \"Clang\",\n        \"configuration\": \"Release\",\n        \"cpu_or_gpu\": \"GPU\",\n        \"cpu_or_gpu_value\": \"Mali400MP2\",\n        \"extra_config\": \"Android_SkottieTracing\",\n        \"model\": \"AndroidOne\",\n        \"os\": \"Android\",\n        \"source_type\": \"skottie\"\n    },\n    \"renderer\": \"skottie\",\n    \"results\": {\n        \"skottie_asset_000\": {\n            \"gles\": {\n                \"frame_avg_us\": 179.71,\n                \"frame_max_us\": 218.25,\n                \"frame_min_us\": 141.17\n            }\n        },\n        \"skottie_asset_001\": {\n            \"gles\": {\n                \"frame_avg_us\": 179.71,\n                \"frame_max_us\": 218.25,\n                \"frame_min_us\": 141.17\n            }\n        },\n        \"skottie_asset_002\": {\n            \"gles\": {\n                \"frame_avg_us\": 179.71,\n                \"frame_max_us\": 218.25,\n                \"frame_min_us\": 141.17\n            }\n        }\n    },\n    \"swarming_bot_id\": \"\",\n    \"swarming_task_id\": \"\"\n}",
864      "[START_DIR]/[SWARM_OUT_DIR]/perf_abc123_1337000001.json"
865    ],
866    "infra_step": true,
867    "name": "write output JSON",
868    "~followup_annotations": [
869      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@{@@@",
870      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"gitHash\": \"abc123\",@@@",
871      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"key\": {@@@",
872      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"arch\": \"arm\",@@@",
873      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"bench_type\": \"tracing\",@@@",
874      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"compiler\": \"Clang\",@@@",
875      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"configuration\": \"Release\",@@@",
876      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"cpu_or_gpu\": \"GPU\",@@@",
877      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"cpu_or_gpu_value\": \"Mali400MP2\",@@@",
878      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"extra_config\": \"Android_SkottieTracing\",@@@",
879      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"model\": \"AndroidOne\",@@@",
880      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"os\": \"Android\",@@@",
881      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"source_type\": \"skottie\"@@@",
882      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    },@@@",
883      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"renderer\": \"skottie\",@@@",
884      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"results\": {@@@",
885      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"skottie_asset_000\": {@@@",
886      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            \"gles\": {@@@",
887      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_avg_us\": 179.71,@@@",
888      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_max_us\": 218.25,@@@",
889      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_min_us\": 141.17@@@",
890      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            }@@@",
891      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        },@@@",
892      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"skottie_asset_001\": {@@@",
893      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            \"gles\": {@@@",
894      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_avg_us\": 179.71,@@@",
895      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_max_us\": 218.25,@@@",
896      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_min_us\": 141.17@@@",
897      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            }@@@",
898      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        },@@@",
899      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"skottie_asset_002\": {@@@",
900      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            \"gles\": {@@@",
901      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_avg_us\": 179.71,@@@",
902      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_max_us\": 218.25,@@@",
903      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_min_us\": 141.17@@@",
904      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            }@@@",
905      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        }@@@",
906      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    },@@@",
907      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"swarming_bot_id\": \"\",@@@",
908      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"swarming_task_id\": \"\"@@@",
909      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@}@@@",
910      "@@@STEP_LOG_END@perf_abc123_1337000001.json@@@"
911    ]
912  },
913  {
914    "cmd": [
915      "/opt/infra-android/tools/adb",
916      "reboot"
917    ],
918    "env": {
919      "CHROME_HEADLESS": "1",
920      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
921    },
922    "infra_step": true,
923    "name": "adb reboot device",
924    "timeout": 30
925  },
926  {
927    "cmd": [
928      "/opt/infra-android/tools/adb",
929      "wait-for-device",
930      "shell",
931      "while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done"
932    ],
933    "env": {
934      "CHROME_HEADLESS": "1",
935      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
936    },
937    "name": "wait for device after rebooting",
938    "timeout": 180
939  },
940  {
941    "cmd": [
942      "python3",
943      "RECIPE_MODULE[skia::flavor]/resources/dump_adb_log.py",
944      "[START_DIR]/build",
945      "/opt/infra-android/tools/adb"
946    ],
947    "env": {
948      "CHROME_HEADLESS": "1",
949      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
950    },
951    "infra_step": true,
952    "name": "dump log",
953    "timeout": 300
954  },
955  {
956    "name": "$result"
957  }
958]