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      "vpython",
20cb93a386Sopenharmony_ci      "-u",
21cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
22cb93a386Sopenharmony_ci      "--json-output",
23cb93a386Sopenharmony_ci      "/path/to/tmp/json",
24cb93a386Sopenharmony_ci      "copy",
25cb93a386Sopenharmony_ci      "[START_DIR]/skia/infra/bots/assets/lottie-samples/VERSION",
26cb93a386Sopenharmony_ci      "/path/to/tmp/"
27cb93a386Sopenharmony_ci    ],
28cb93a386Sopenharmony_ci    "infra_step": true,
29cb93a386Sopenharmony_ci    "name": "Get lottie-samples VERSION",
30cb93a386Sopenharmony_ci    "~followup_annotations": [
31cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@VERSION@42@@@",
32cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@VERSION@@@"
33cb93a386Sopenharmony_ci    ]
34cb93a386Sopenharmony_ci  },
35cb93a386Sopenharmony_ci  {
36cb93a386Sopenharmony_ci    "cmd": [
37cb93a386Sopenharmony_ci      "vpython",
38cb93a386Sopenharmony_ci      "-u",
39cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
40cb93a386Sopenharmony_ci      "--json-output",
41cb93a386Sopenharmony_ci      "/path/to/tmp/json",
42cb93a386Sopenharmony_ci      "copy",
43cb93a386Sopenharmony_ci      "42",
44cb93a386Sopenharmony_ci      "[START_DIR]/tmp/LOTTIE_VERSION"
45cb93a386Sopenharmony_ci    ],
46cb93a386Sopenharmony_ci    "infra_step": true,
47cb93a386Sopenharmony_ci    "name": "write LOTTIE_VERSION",
48cb93a386Sopenharmony_ci    "~followup_annotations": [
49cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@LOTTIE_VERSION@42@@@",
50cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@LOTTIE_VERSION@@@"
51cb93a386Sopenharmony_ci    ]
52cb93a386Sopenharmony_ci  },
53cb93a386Sopenharmony_ci  {
54cb93a386Sopenharmony_ci    "cmd": [
55cb93a386Sopenharmony_ci      "vpython",
56cb93a386Sopenharmony_ci      "-u",
57cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
58cb93a386Sopenharmony_ci      "--json-output",
59cb93a386Sopenharmony_ci      "/path/to/tmp/json",
60cb93a386Sopenharmony_ci      "rmtree",
61cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]"
62cb93a386Sopenharmony_ci    ],
63cb93a386Sopenharmony_ci    "infra_step": true,
64cb93a386Sopenharmony_ci    "name": "rmtree [SWARM_OUT_DIR]"
65cb93a386Sopenharmony_ci  },
66cb93a386Sopenharmony_ci  {
67cb93a386Sopenharmony_ci    "cmd": [
68cb93a386Sopenharmony_ci      "vpython",
69cb93a386Sopenharmony_ci      "-u",
70cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
71cb93a386Sopenharmony_ci      "--json-output",
72cb93a386Sopenharmony_ci      "/path/to/tmp/json",
73cb93a386Sopenharmony_ci      "ensure-directory",
74cb93a386Sopenharmony_ci      "--mode",
75cb93a386Sopenharmony_ci      "0777",
76cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]"
77cb93a386Sopenharmony_ci    ],
78cb93a386Sopenharmony_ci    "infra_step": true,
79cb93a386Sopenharmony_ci    "name": "makedirs [SWARM_OUT_DIR]"
80cb93a386Sopenharmony_ci  },
81cb93a386Sopenharmony_ci  {
82cb93a386Sopenharmony_ci    "cmd": [
83cb93a386Sopenharmony_ci      "vpython",
84cb93a386Sopenharmony_ci      "-u",
85cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
86cb93a386Sopenharmony_ci      "--json-output",
87cb93a386Sopenharmony_ci      "/path/to/tmp/json",
88cb93a386Sopenharmony_ci      "listdir",
89cb93a386Sopenharmony_ci      "[START_DIR]/lottie-samples"
90cb93a386Sopenharmony_ci    ],
91cb93a386Sopenharmony_ci    "infra_step": true,
92cb93a386Sopenharmony_ci    "name": "list lottie files",
93cb93a386Sopenharmony_ci    "~followup_annotations": [
94cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@listdir@[START_DIR]/lottie-samples/LICENSE@@@",
95cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@listdir@[START_DIR]/lottie-samples/lottie 3!.json@@@",
96cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@listdir@[START_DIR]/lottie-samples/lottie(test)'!2.json@@@",
97cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@listdir@[START_DIR]/lottie-samples/lottie1.json@@@",
98cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@listdir@@@"
99cb93a386Sopenharmony_ci    ]
100cb93a386Sopenharmony_ci  },
101cb93a386Sopenharmony_ci  {
102cb93a386Sopenharmony_ci    "cmd": [
103cb93a386Sopenharmony_ci      "python",
104cb93a386Sopenharmony_ci      "-u",
105cb93a386Sopenharmony_ci      "RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py",
106cb93a386Sopenharmony_ci      "[START_DIR]",
107cb93a386Sopenharmony_ci      "catchsegv",
108cb93a386Sopenharmony_ci      "[START_DIR]/build/dm",
109cb93a386Sopenharmony_ci      "--resourcePath",
110cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources",
111cb93a386Sopenharmony_ci      "--lotties",
112cb93a386Sopenharmony_ci      "[START_DIR]/lottie-samples",
113cb93a386Sopenharmony_ci      "--src",
114cb93a386Sopenharmony_ci      "lottie",
115cb93a386Sopenharmony_ci      "--nonativeFonts",
116cb93a386Sopenharmony_ci      "--verbose",
117cb93a386Sopenharmony_ci      "--traceMatch",
118cb93a386Sopenharmony_ci      "skottie",
119cb93a386Sopenharmony_ci      "--trace",
120cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/2.json",
121cb93a386Sopenharmony_ci      "--match",
122cb93a386Sopenharmony_ci      "^lottie 3!.json$",
123cb93a386Sopenharmony_ci      "--config",
124cb93a386Sopenharmony_ci      "8888",
125cb93a386Sopenharmony_ci      "--nogpu"
126cb93a386Sopenharmony_ci    ],
127cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
128cb93a386Sopenharmony_ci    "env": {
129cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
130cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
131cb93a386Sopenharmony_ci    },
132cb93a386Sopenharmony_ci    "name": "symbolized dm"
133cb93a386Sopenharmony_ci  },
134cb93a386Sopenharmony_ci  {
135cb93a386Sopenharmony_ci    "cmd": [
136cb93a386Sopenharmony_ci      "vpython",
137cb93a386Sopenharmony_ci      "-u",
138cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
139cb93a386Sopenharmony_ci      "--json-output",
140cb93a386Sopenharmony_ci      "/path/to/tmp/json",
141cb93a386Sopenharmony_ci      "copy",
142cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/2.json",
143cb93a386Sopenharmony_ci      "/path/to/tmp/"
144cb93a386Sopenharmony_ci    ],
145cb93a386Sopenharmony_ci    "infra_step": true,
146cb93a386Sopenharmony_ci    "name": "read [START_DIR]/[SWARM_OUT_DIR]/2.json",
147cb93a386Sopenharmony_ci    "~followup_annotations": [
148cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@2.json@@@"
149cb93a386Sopenharmony_ci    ]
150cb93a386Sopenharmony_ci  },
151cb93a386Sopenharmony_ci  {
152cb93a386Sopenharmony_ci    "cmd": [
153cb93a386Sopenharmony_ci      "python",
154cb93a386Sopenharmony_ci      "-u",
155cb93a386Sopenharmony_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",
156cb93a386Sopenharmony_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",
157cb93a386Sopenharmony_ci      "lottie 3!.json",
158cb93a386Sopenharmony_ci      "/path/to/tmp/json"
159cb93a386Sopenharmony_ci    ],
160cb93a386Sopenharmony_ci    "env": {
161cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
162cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
163cb93a386Sopenharmony_ci    },
164cb93a386Sopenharmony_ci    "name": "parse lottie 3!.json trace",
165cb93a386Sopenharmony_ci    "~followup_annotations": [
166cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@{@@@",
167cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_avg_us\": 179.71, @@@",
168cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_max_us\": 218.25, @@@",
169cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_min_us\": 141.17@@@",
170cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@}@@@",
171cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@json.output@@@",
172cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
173cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import json@@@",
174cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
175cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
176cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@trace_output = sys.argv[1]@@@",
177cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@trace_json = json.loads(trace_output)@@@",
178cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@lottie_filename = sys.argv[2]@@@",
179cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@output_json_file = sys.argv[3]@@@",
180cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
181cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results = {}@@@",
182cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_max = 0@@@",
183cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_min = 0@@@",
184cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_cumulative = 0@@@",
185cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@",
186cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@",
187cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@",
188cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@",
189cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if 'skottie::Animation::seek' in trace['name']:@@@",
190cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if frame_start:@@@",
191cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      raise Exception('We got consecutive Animation::seek without a ' +@@@",
192cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                      'render. Something is wrong.')@@@",
193cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_start = True@@@",
194cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    current_frame_duration = trace['dur']@@@",
195cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  elif 'skottie::Animation::render' in trace['name']:@@@",
196cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if not frame_start:@@@",
197cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      raise Exception('We got an Animation::render without a seek first. ' +@@@",
198cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                      'Something is wrong.')@@@",
199cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
200cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    current_frame_duration += trace['dur']@@@",
201cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_start = False@@@",
202cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    total_frames += 1@@@",
203cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_max = max(frame_max, current_frame_duration)@@@",
204cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_min = (min(frame_min, current_frame_duration)@@@",
205cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                 if frame_min else current_frame_duration)@@@",
206cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_cumulative += current_frame_duration@@@",
207cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
208cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@expected_dm_frames = 25@@@",
209cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if total_frames != expected_dm_frames:@@@",
210cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception(@@@",
211cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      'Got ' + str(total_frames) + ' frames instead of ' +@@@",
212cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      str(expected_dm_frames))@@@",
213cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_max_us'] = frame_max@@@",
214cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_min_us'] = frame_min@@@",
215cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_avg_us'] = frame_cumulative/total_frames@@@",
216cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
217cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Write perf_results to the output json.@@@",
218cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@with open(output_json_file, 'w') as f:@@@",
219cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  f.write(json.dumps(perf_results))@@@",
220cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
221cb93a386Sopenharmony_ci    ]
222cb93a386Sopenharmony_ci  },
223cb93a386Sopenharmony_ci  {
224cb93a386Sopenharmony_ci    "cmd": [
225cb93a386Sopenharmony_ci      "vpython",
226cb93a386Sopenharmony_ci      "-u",
227cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
228cb93a386Sopenharmony_ci      "--json-output",
229cb93a386Sopenharmony_ci      "/path/to/tmp/json",
230cb93a386Sopenharmony_ci      "remove",
231cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/2.json"
232cb93a386Sopenharmony_ci    ],
233cb93a386Sopenharmony_ci    "infra_step": true,
234cb93a386Sopenharmony_ci    "name": "remove [START_DIR]/[SWARM_OUT_DIR]/2.json"
235cb93a386Sopenharmony_ci  },
236cb93a386Sopenharmony_ci  {
237cb93a386Sopenharmony_ci    "cmd": [
238cb93a386Sopenharmony_ci      "python",
239cb93a386Sopenharmony_ci      "-u",
240cb93a386Sopenharmony_ci      "RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py",
241cb93a386Sopenharmony_ci      "[START_DIR]",
242cb93a386Sopenharmony_ci      "catchsegv",
243cb93a386Sopenharmony_ci      "[START_DIR]/build/dm",
244cb93a386Sopenharmony_ci      "--resourcePath",
245cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources",
246cb93a386Sopenharmony_ci      "--lotties",
247cb93a386Sopenharmony_ci      "[START_DIR]/lottie-samples",
248cb93a386Sopenharmony_ci      "--src",
249cb93a386Sopenharmony_ci      "lottie",
250cb93a386Sopenharmony_ci      "--nonativeFonts",
251cb93a386Sopenharmony_ci      "--verbose",
252cb93a386Sopenharmony_ci      "--traceMatch",
253cb93a386Sopenharmony_ci      "skottie",
254cb93a386Sopenharmony_ci      "--trace",
255cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/3.json",
256cb93a386Sopenharmony_ci      "--match",
257cb93a386Sopenharmony_ci      "^lottie(test)'!2.json$",
258cb93a386Sopenharmony_ci      "--config",
259cb93a386Sopenharmony_ci      "8888",
260cb93a386Sopenharmony_ci      "--nogpu"
261cb93a386Sopenharmony_ci    ],
262cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
263cb93a386Sopenharmony_ci    "env": {
264cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
265cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
266cb93a386Sopenharmony_ci    },
267cb93a386Sopenharmony_ci    "name": "symbolized dm (2)"
268cb93a386Sopenharmony_ci  },
269cb93a386Sopenharmony_ci  {
270cb93a386Sopenharmony_ci    "cmd": [
271cb93a386Sopenharmony_ci      "vpython",
272cb93a386Sopenharmony_ci      "-u",
273cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
274cb93a386Sopenharmony_ci      "--json-output",
275cb93a386Sopenharmony_ci      "/path/to/tmp/json",
276cb93a386Sopenharmony_ci      "copy",
277cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/3.json",
278cb93a386Sopenharmony_ci      "/path/to/tmp/"
279cb93a386Sopenharmony_ci    ],
280cb93a386Sopenharmony_ci    "infra_step": true,
281cb93a386Sopenharmony_ci    "name": "read [START_DIR]/[SWARM_OUT_DIR]/3.json",
282cb93a386Sopenharmony_ci    "~followup_annotations": [
283cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@3.json@@@"
284cb93a386Sopenharmony_ci    ]
285cb93a386Sopenharmony_ci  },
286cb93a386Sopenharmony_ci  {
287cb93a386Sopenharmony_ci    "cmd": [
288cb93a386Sopenharmony_ci      "python",
289cb93a386Sopenharmony_ci      "-u",
290cb93a386Sopenharmony_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",
291cb93a386Sopenharmony_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",
292cb93a386Sopenharmony_ci      "lottie(test)'!2.json",
293cb93a386Sopenharmony_ci      "/path/to/tmp/json"
294cb93a386Sopenharmony_ci    ],
295cb93a386Sopenharmony_ci    "env": {
296cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
297cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
298cb93a386Sopenharmony_ci    },
299cb93a386Sopenharmony_ci    "name": "parse lottie(test)'!2.json trace",
300cb93a386Sopenharmony_ci    "~followup_annotations": [
301cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@{@@@",
302cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_avg_us\": 179.71, @@@",
303cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_max_us\": 218.25, @@@",
304cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_min_us\": 141.17@@@",
305cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@}@@@",
306cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@json.output@@@",
307cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
308cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import json@@@",
309cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
310cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
311cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@trace_output = sys.argv[1]@@@",
312cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@trace_json = json.loads(trace_output)@@@",
313cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@lottie_filename = sys.argv[2]@@@",
314cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@output_json_file = sys.argv[3]@@@",
315cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
316cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results = {}@@@",
317cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_max = 0@@@",
318cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_min = 0@@@",
319cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_cumulative = 0@@@",
320cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@",
321cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@",
322cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@",
323cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@",
324cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if 'skottie::Animation::seek' in trace['name']:@@@",
325cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if frame_start:@@@",
326cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      raise Exception('We got consecutive Animation::seek without a ' +@@@",
327cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                      'render. Something is wrong.')@@@",
328cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_start = True@@@",
329cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    current_frame_duration = trace['dur']@@@",
330cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  elif 'skottie::Animation::render' in trace['name']:@@@",
331cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if not frame_start:@@@",
332cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      raise Exception('We got an Animation::render without a seek first. ' +@@@",
333cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                      'Something is wrong.')@@@",
334cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
335cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    current_frame_duration += trace['dur']@@@",
336cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_start = False@@@",
337cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    total_frames += 1@@@",
338cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_max = max(frame_max, current_frame_duration)@@@",
339cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_min = (min(frame_min, current_frame_duration)@@@",
340cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                 if frame_min else current_frame_duration)@@@",
341cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_cumulative += current_frame_duration@@@",
342cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
343cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@expected_dm_frames = 25@@@",
344cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if total_frames != expected_dm_frames:@@@",
345cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception(@@@",
346cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      'Got ' + str(total_frames) + ' frames instead of ' +@@@",
347cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      str(expected_dm_frames))@@@",
348cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_max_us'] = frame_max@@@",
349cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_min_us'] = frame_min@@@",
350cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_avg_us'] = frame_cumulative/total_frames@@@",
351cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
352cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Write perf_results to the output json.@@@",
353cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@with open(output_json_file, 'w') as f:@@@",
354cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  f.write(json.dumps(perf_results))@@@",
355cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
356cb93a386Sopenharmony_ci    ]
357cb93a386Sopenharmony_ci  },
358cb93a386Sopenharmony_ci  {
359cb93a386Sopenharmony_ci    "cmd": [
360cb93a386Sopenharmony_ci      "vpython",
361cb93a386Sopenharmony_ci      "-u",
362cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
363cb93a386Sopenharmony_ci      "--json-output",
364cb93a386Sopenharmony_ci      "/path/to/tmp/json",
365cb93a386Sopenharmony_ci      "remove",
366cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/3.json"
367cb93a386Sopenharmony_ci    ],
368cb93a386Sopenharmony_ci    "infra_step": true,
369cb93a386Sopenharmony_ci    "name": "remove [START_DIR]/[SWARM_OUT_DIR]/3.json"
370cb93a386Sopenharmony_ci  },
371cb93a386Sopenharmony_ci  {
372cb93a386Sopenharmony_ci    "cmd": [
373cb93a386Sopenharmony_ci      "python",
374cb93a386Sopenharmony_ci      "-u",
375cb93a386Sopenharmony_ci      "RECIPE_MODULE[skia::flavor]/resources/symbolize_stack_trace.py",
376cb93a386Sopenharmony_ci      "[START_DIR]",
377cb93a386Sopenharmony_ci      "catchsegv",
378cb93a386Sopenharmony_ci      "[START_DIR]/build/dm",
379cb93a386Sopenharmony_ci      "--resourcePath",
380cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources",
381cb93a386Sopenharmony_ci      "--lotties",
382cb93a386Sopenharmony_ci      "[START_DIR]/lottie-samples",
383cb93a386Sopenharmony_ci      "--src",
384cb93a386Sopenharmony_ci      "lottie",
385cb93a386Sopenharmony_ci      "--nonativeFonts",
386cb93a386Sopenharmony_ci      "--verbose",
387cb93a386Sopenharmony_ci      "--traceMatch",
388cb93a386Sopenharmony_ci      "skottie",
389cb93a386Sopenharmony_ci      "--trace",
390cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/4.json",
391cb93a386Sopenharmony_ci      "--match",
392cb93a386Sopenharmony_ci      "^lottie1.json$",
393cb93a386Sopenharmony_ci      "--config",
394cb93a386Sopenharmony_ci      "8888",
395cb93a386Sopenharmony_ci      "--nogpu"
396cb93a386Sopenharmony_ci    ],
397cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
398cb93a386Sopenharmony_ci    "env": {
399cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
400cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
401cb93a386Sopenharmony_ci    },
402cb93a386Sopenharmony_ci    "name": "symbolized dm (3)"
403cb93a386Sopenharmony_ci  },
404cb93a386Sopenharmony_ci  {
405cb93a386Sopenharmony_ci    "cmd": [
406cb93a386Sopenharmony_ci      "vpython",
407cb93a386Sopenharmony_ci      "-u",
408cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
409cb93a386Sopenharmony_ci      "--json-output",
410cb93a386Sopenharmony_ci      "/path/to/tmp/json",
411cb93a386Sopenharmony_ci      "copy",
412cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/4.json",
413cb93a386Sopenharmony_ci      "/path/to/tmp/"
414cb93a386Sopenharmony_ci    ],
415cb93a386Sopenharmony_ci    "infra_step": true,
416cb93a386Sopenharmony_ci    "name": "read [START_DIR]/[SWARM_OUT_DIR]/4.json",
417cb93a386Sopenharmony_ci    "~followup_annotations": [
418cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@4.json@@@"
419cb93a386Sopenharmony_ci    ]
420cb93a386Sopenharmony_ci  },
421cb93a386Sopenharmony_ci  {
422cb93a386Sopenharmony_ci    "cmd": [
423cb93a386Sopenharmony_ci      "python",
424cb93a386Sopenharmony_ci      "-u",
425cb93a386Sopenharmony_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",
426cb93a386Sopenharmony_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",
427cb93a386Sopenharmony_ci      "lottie1.json",
428cb93a386Sopenharmony_ci      "/path/to/tmp/json"
429cb93a386Sopenharmony_ci    ],
430cb93a386Sopenharmony_ci    "env": {
431cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
432cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
433cb93a386Sopenharmony_ci    },
434cb93a386Sopenharmony_ci    "name": "parse lottie1.json trace",
435cb93a386Sopenharmony_ci    "~followup_annotations": [
436cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@{@@@",
437cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_avg_us\": 179.71, @@@",
438cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_max_us\": 218.25, @@@",
439cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@  \"frame_min_us\": 141.17@@@",
440cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@json.output@}@@@",
441cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@json.output@@@",
442cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
443cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import json@@@",
444cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
445cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
446cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@trace_output = sys.argv[1]@@@",
447cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@trace_json = json.loads(trace_output)@@@",
448cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@lottie_filename = sys.argv[2]@@@",
449cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@output_json_file = sys.argv[3]@@@",
450cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
451cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results = {}@@@",
452cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_max = 0@@@",
453cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_min = 0@@@",
454cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_cumulative = 0@@@",
455cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@current_frame_duration = 0@@@",
456cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@total_frames = 0@@@",
457cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@frame_start = False@@@",
458cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@for trace in trace_json:@@@",
459cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if 'skottie::Animation::seek' in trace['name']:@@@",
460cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if frame_start:@@@",
461cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      raise Exception('We got consecutive Animation::seek without a ' +@@@",
462cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                      'render. Something is wrong.')@@@",
463cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_start = True@@@",
464cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    current_frame_duration = trace['dur']@@@",
465cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  elif 'skottie::Animation::render' in trace['name']:@@@",
466cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if not frame_start:@@@",
467cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      raise Exception('We got an Animation::render without a seek first. ' +@@@",
468cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                      'Something is wrong.')@@@",
469cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
470cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    current_frame_duration += trace['dur']@@@",
471cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_start = False@@@",
472cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    total_frames += 1@@@",
473cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_max = max(frame_max, current_frame_duration)@@@",
474cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_min = (min(frame_min, current_frame_duration)@@@",
475cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                 if frame_min else current_frame_duration)@@@",
476cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    frame_cumulative += current_frame_duration@@@",
477cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
478cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@expected_dm_frames = 25@@@",
479cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if total_frames != expected_dm_frames:@@@",
480cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception(@@@",
481cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      'Got ' + str(total_frames) + ' frames instead of ' +@@@",
482cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      str(expected_dm_frames))@@@",
483cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_max_us'] = frame_max@@@",
484cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_min_us'] = frame_min@@@",
485cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@perf_results['frame_avg_us'] = frame_cumulative/total_frames@@@",
486cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
487cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Write perf_results to the output json.@@@",
488cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@with open(output_json_file, 'w') as f:@@@",
489cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  f.write(json.dumps(perf_results))@@@",
490cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
491cb93a386Sopenharmony_ci    ]
492cb93a386Sopenharmony_ci  },
493cb93a386Sopenharmony_ci  {
494cb93a386Sopenharmony_ci    "cmd": [
495cb93a386Sopenharmony_ci      "vpython",
496cb93a386Sopenharmony_ci      "-u",
497cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
498cb93a386Sopenharmony_ci      "--json-output",
499cb93a386Sopenharmony_ci      "/path/to/tmp/json",
500cb93a386Sopenharmony_ci      "remove",
501cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/4.json"
502cb93a386Sopenharmony_ci    ],
503cb93a386Sopenharmony_ci    "infra_step": true,
504cb93a386Sopenharmony_ci    "name": "remove [START_DIR]/[SWARM_OUT_DIR]/4.json"
505cb93a386Sopenharmony_ci  },
506cb93a386Sopenharmony_ci  {
507cb93a386Sopenharmony_ci    "cmd": [
508cb93a386Sopenharmony_ci      "python",
509cb93a386Sopenharmony_ci      "-u",
510cb93a386Sopenharmony_ci      "import os\nprint(os.environ.get('SWARMING_BOT_ID', ''))\n"
511cb93a386Sopenharmony_ci    ],
512cb93a386Sopenharmony_ci    "name": "get swarming bot id",
513cb93a386Sopenharmony_ci    "~followup_annotations": [
514cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
515cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_BOT_ID', ''))@@@",
516cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
517cb93a386Sopenharmony_ci    ]
518cb93a386Sopenharmony_ci  },
519cb93a386Sopenharmony_ci  {
520cb93a386Sopenharmony_ci    "cmd": [
521cb93a386Sopenharmony_ci      "python",
522cb93a386Sopenharmony_ci      "-u",
523cb93a386Sopenharmony_ci      "import os\nprint(os.environ.get('SWARMING_TASK_ID', ''))\n"
524cb93a386Sopenharmony_ci    ],
525cb93a386Sopenharmony_ci    "name": "get swarming task id",
526cb93a386Sopenharmony_ci    "~followup_annotations": [
527cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
528cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_TASK_ID', ''))@@@",
529cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
530cb93a386Sopenharmony_ci    ]
531cb93a386Sopenharmony_ci  },
532cb93a386Sopenharmony_ci  {
533cb93a386Sopenharmony_ci    "cmd": [
534cb93a386Sopenharmony_ci      "vpython",
535cb93a386Sopenharmony_ci      "-u",
536cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
537cb93a386Sopenharmony_ci      "--json-output",
538cb93a386Sopenharmony_ci      "/path/to/tmp/json",
539cb93a386Sopenharmony_ci      "ensure-directory",
540cb93a386Sopenharmony_ci      "--mode",
541cb93a386Sopenharmony_ci      "0777",
542cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]"
543cb93a386Sopenharmony_ci    ],
544cb93a386Sopenharmony_ci    "infra_step": true,
545cb93a386Sopenharmony_ci    "name": "makedirs perf_dir"
546cb93a386Sopenharmony_ci  },
547cb93a386Sopenharmony_ci  {
548cb93a386Sopenharmony_ci    "cmd": [
549cb93a386Sopenharmony_ci      "vpython",
550cb93a386Sopenharmony_ci      "-u",
551cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
552cb93a386Sopenharmony_ci      "--json-output",
553cb93a386Sopenharmony_ci      "/path/to/tmp/json",
554cb93a386Sopenharmony_ci      "copy",
555cb93a386Sopenharmony_ci      "{\n    \"gitHash\": \"abc123\",\n    \"key\": {\n        \"arch\": \"x86_64\",\n        \"bench_type\": \"tracing\",\n        \"compiler\": \"Clang\",\n        \"configuration\": \"Release\",\n        \"cpu_or_gpu\": \"CPU\",\n        \"cpu_or_gpu_value\": \"AVX2\",\n        \"extra_config\": \"SkottieTracing\",\n        \"model\": \"GCE\",\n        \"os\": \"Debian10\",\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}",
556cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/perf_abc123_1337000001.json"
557cb93a386Sopenharmony_ci    ],
558cb93a386Sopenharmony_ci    "infra_step": true,
559cb93a386Sopenharmony_ci    "name": "write output JSON",
560cb93a386Sopenharmony_ci    "~followup_annotations": [
561cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@{@@@",
562cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"gitHash\": \"abc123\",@@@",
563cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"key\": {@@@",
564cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"arch\": \"x86_64\",@@@",
565cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"bench_type\": \"tracing\",@@@",
566cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"compiler\": \"Clang\",@@@",
567cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"configuration\": \"Release\",@@@",
568cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"cpu_or_gpu\": \"CPU\",@@@",
569cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"cpu_or_gpu_value\": \"AVX2\",@@@",
570cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"extra_config\": \"SkottieTracing\",@@@",
571cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"model\": \"GCE\",@@@",
572cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"os\": \"Debian10\",@@@",
573cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"source_type\": \"skottie\"@@@",
574cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    },@@@",
575cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"renderer\": \"skottie\",@@@",
576cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"results\": {@@@",
577cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"lottie 3!.json\": {@@@",
578cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            \"gles\": {@@@",
579cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_avg_us\": 179.71,@@@",
580cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_max_us\": 218.25,@@@",
581cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_min_us\": 141.17@@@",
582cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            }@@@",
583cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        },@@@",
584cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"lottie(test)'!2.json\": {@@@",
585cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            \"gles\": {@@@",
586cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_avg_us\": 179.71,@@@",
587cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_max_us\": 218.25,@@@",
588cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_min_us\": 141.17@@@",
589cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            }@@@",
590cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        },@@@",
591cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        \"lottie1.json\": {@@@",
592cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            \"gles\": {@@@",
593cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_avg_us\": 179.71,@@@",
594cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_max_us\": 218.25,@@@",
595cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@                \"frame_min_us\": 141.17@@@",
596cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@            }@@@",
597cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@        }@@@",
598cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    },@@@",
599cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"swarming_bot_id\": \"\",@@@",
600cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@    \"swarming_task_id\": \"\"@@@",
601cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@perf_abc123_1337000001.json@}@@@",
602cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@perf_abc123_1337000001.json@@@"
603cb93a386Sopenharmony_ci    ]
604cb93a386Sopenharmony_ci  },
605cb93a386Sopenharmony_ci  {
606cb93a386Sopenharmony_ci    "name": "$result"
607cb93a386Sopenharmony_ci  }
608cb93a386Sopenharmony_ci]