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