1[ 2 { 3 "cmd": [ 4 "vpython", 5 "-u", 6 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 7 "--json-output", 8 "/path/to/tmp/json", 9 "ensure-directory", 10 "--mode", 11 "0777", 12 "[START_DIR]/tmp" 13 ], 14 "infra_step": true, 15 "name": "makedirs tmp_dir" 16 }, 17 { 18 "cmd": [ 19 "python", 20 "-u", 21 "import os\nprint(os.environ.get('SWARMING_BOT_ID', ''))\n" 22 ], 23 "name": "get swarming bot id", 24 "~followup_annotations": [ 25 "@@@STEP_LOG_LINE@python.inline@import os@@@", 26 "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_BOT_ID', ''))@@@", 27 "@@@STEP_LOG_END@python.inline@@@" 28 ] 29 }, 30 { 31 "cmd": [ 32 "/usr/bin/adb.1.0.35", 33 "shell", 34 "mkdir", 35 "-p", 36 "/sdcard/revenge_of_the_skiabot/resources" 37 ], 38 "cwd": "[START_DIR]/skia", 39 "env": { 40 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 41 "CHROME_HEADLESS": "1", 42 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 43 }, 44 "infra_step": true, 45 "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" 46 }, 47 { 48 "cmd": [ 49 "vpython", 50 "-u", 51 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 52 "--json-output", 53 "/path/to/tmp/json", 54 "copy", 55 "[START_DIR]/skia/infra/bots/assets/mskp/VERSION", 56 "/path/to/tmp/" 57 ], 58 "infra_step": true, 59 "name": "Get mskp VERSION", 60 "~followup_annotations": [ 61 "@@@STEP_LOG_LINE@VERSION@42@@@", 62 "@@@STEP_LOG_END@VERSION@@@" 63 ] 64 }, 65 { 66 "cmd": [ 67 "vpython", 68 "-u", 69 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 70 "--json-output", 71 "/path/to/tmp/json", 72 "copy", 73 "42", 74 "[START_DIR]/tmp/MSKP_VERSION" 75 ], 76 "infra_step": true, 77 "name": "write MSKP_VERSION", 78 "~followup_annotations": [ 79 "@@@STEP_LOG_LINE@MSKP_VERSION@42@@@", 80 "@@@STEP_LOG_END@MSKP_VERSION@@@" 81 ] 82 }, 83 { 84 "cmd": [ 85 "/usr/bin/adb.1.0.35", 86 "shell", 87 "cat", 88 "/sdcard/revenge_of_the_skiabot/MSKP_VERSION" 89 ], 90 "cwd": "[START_DIR]/skia", 91 "env": { 92 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 93 "CHROME_HEADLESS": "1", 94 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 95 }, 96 "infra_step": true, 97 "name": "read /sdcard/revenge_of_the_skiabot/MSKP_VERSION" 98 }, 99 { 100 "cmd": [ 101 "python", 102 "-u", 103 "\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", 104 "/usr/bin/adb.1.0.35", 105 "/sdcard/revenge_of_the_skiabot/MSKP_VERSION" 106 ], 107 "env": { 108 "CHROME_HEADLESS": "1", 109 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 110 }, 111 "infra_step": true, 112 "name": "rm /sdcard/revenge_of_the_skiabot/MSKP_VERSION", 113 "~followup_annotations": [ 114 "@@@STEP_LOG_LINE@python.inline@@@@", 115 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 116 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 117 "@@@STEP_LOG_LINE@python.inline@@@@", 118 "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@", 119 "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@", 120 "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@", 121 "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@", 122 "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@", 123 "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@", 124 "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@", 125 "@@@STEP_LOG_LINE@python.inline@@@@", 126 "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@", 127 "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@", 128 "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@", 129 "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@", 130 "@@@STEP_LOG_LINE@python.inline@try:@@@", 131 "@@@STEP_LOG_LINE@python.inline@ output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@", 132 "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@", 133 "@@@STEP_LOG_LINE@python.inline@ output = e.output@@@", 134 "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@", 135 "@@@STEP_LOG_LINE@python.inline@print('======')@@@", 136 "@@@STEP_LOG_LINE@python.inline@print(output)@@@", 137 "@@@STEP_LOG_LINE@python.inline@print('======')@@@", 138 "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@", 139 "@@@STEP_LOG_LINE@python.inline@ raise Exception('%s exists despite being deleted' % path)@@@", 140 "@@@STEP_LOG_END@python.inline@@@" 141 ] 142 }, 143 { 144 "cmd": [ 145 "python", 146 "-u", 147 "\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", 148 "/usr/bin/adb.1.0.35", 149 "/sdcard/revenge_of_the_skiabot/mskp" 150 ], 151 "env": { 152 "CHROME_HEADLESS": "1", 153 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 154 }, 155 "infra_step": true, 156 "name": "rm /sdcard/revenge_of_the_skiabot/mskp", 157 "~followup_annotations": [ 158 "@@@STEP_LOG_LINE@python.inline@@@@", 159 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 160 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 161 "@@@STEP_LOG_LINE@python.inline@@@@", 162 "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@", 163 "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@", 164 "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@", 165 "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@", 166 "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@", 167 "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@", 168 "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@", 169 "@@@STEP_LOG_LINE@python.inline@@@@", 170 "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@", 171 "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@", 172 "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@", 173 "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@", 174 "@@@STEP_LOG_LINE@python.inline@try:@@@", 175 "@@@STEP_LOG_LINE@python.inline@ output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@", 176 "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@", 177 "@@@STEP_LOG_LINE@python.inline@ output = e.output@@@", 178 "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@", 179 "@@@STEP_LOG_LINE@python.inline@print('======')@@@", 180 "@@@STEP_LOG_LINE@python.inline@print(output)@@@", 181 "@@@STEP_LOG_LINE@python.inline@print('======')@@@", 182 "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@", 183 "@@@STEP_LOG_LINE@python.inline@ raise Exception('%s exists despite being deleted' % path)@@@", 184 "@@@STEP_LOG_END@python.inline@@@" 185 ] 186 }, 187 { 188 "cmd": [ 189 "/usr/bin/adb.1.0.35", 190 "shell", 191 "mkdir", 192 "-p", 193 "/sdcard/revenge_of_the_skiabot/mskp" 194 ], 195 "cwd": "[START_DIR]/skia", 196 "env": { 197 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 198 "CHROME_HEADLESS": "1", 199 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 200 }, 201 "infra_step": true, 202 "name": "mkdir /sdcard/revenge_of_the_skiabot/mskp" 203 }, 204 { 205 "cmd": [ 206 "vpython", 207 "-u", 208 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 209 "--json-output", 210 "/path/to/tmp/json", 211 "glob", 212 "[START_DIR]/mskp", 213 "*" 214 ], 215 "infra_step": true, 216 "name": "ls [START_DIR]/mskp/*", 217 "~followup_annotations": [ 218 "@@@STEP_LOG_LINE@glob@[START_DIR]/mskp/bar.jpg@@@", 219 "@@@STEP_LOG_LINE@glob@[START_DIR]/mskp/foo.png@@@", 220 "@@@STEP_LOG_END@glob@@@" 221 ] 222 }, 223 { 224 "cmd": [ 225 "/usr/bin/adb.1.0.35", 226 "push", 227 "[START_DIR]/mskp/bar.jpg", 228 "[START_DIR]/mskp/foo.png", 229 "/sdcard/revenge_of_the_skiabot/mskp" 230 ], 231 "cwd": "[START_DIR]/skia", 232 "env": { 233 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 234 "CHROME_HEADLESS": "1", 235 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 236 }, 237 "infra_step": true, 238 "name": "push [START_DIR]/mskp/* /sdcard/revenge_of_the_skiabot/mskp" 239 }, 240 { 241 "cmd": [ 242 "/usr/bin/adb.1.0.35", 243 "push", 244 "[START_DIR]/tmp/MSKP_VERSION", 245 "/sdcard/revenge_of_the_skiabot/MSKP_VERSION" 246 ], 247 "cwd": "[START_DIR]/skia", 248 "env": { 249 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 250 "CHROME_HEADLESS": "1", 251 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 252 }, 253 "infra_step": true, 254 "name": "push [START_DIR]/tmp/MSKP_VERSION /sdcard/revenge_of_the_skiabot/MSKP_VERSION" 255 }, 256 { 257 "cmd": [ 258 "vpython", 259 "-u", 260 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 261 "--json-output", 262 "/path/to/tmp/json", 263 "ensure-directory", 264 "--mode", 265 "0777", 266 "[START_DIR]/[SWARM_OUT_DIR]" 267 ], 268 "infra_step": true, 269 "name": "makedirs perf_dir" 270 }, 271 { 272 "cmd": [ 273 "adb.1.0.35", 274 "push", 275 "[START_DIR]/build/skpbench", 276 "/data/local/tmp/" 277 ], 278 "cwd": "[START_DIR]/skia", 279 "env": { 280 "CHROME_HEADLESS": "1", 281 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 282 }, 283 "infra_step": true, 284 "name": "push skpbench" 285 }, 286 { 287 "cmd": [ 288 "python", 289 "-u", 290 "[START_DIR]/skia/tools/skpbench/skpbench.py", 291 "/data/local/tmp/skpbench", 292 "--resultsfile", 293 "[START_DIR]/[SWARM_OUT_DIR]/table", 294 "--config", 295 "gles", 296 "--internalSamples", 297 "4", 298 "-v5", 299 "--adb", 300 "--adb_binary", 301 "adb.1.0.35", 302 "/sdcard/revenge_of_the_skiabot/mskp" 303 ], 304 "env": { 305 "CHROME_HEADLESS": "1", 306 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 307 }, 308 "name": "skpbench" 309 }, 310 { 311 "cmd": [ 312 "python", 313 "-u", 314 "import os\nprint(os.environ.get('SWARMING_TASK_ID', ''))\n" 315 ], 316 "name": "get swarming task id", 317 "~followup_annotations": [ 318 "@@@STEP_LOG_LINE@python.inline@import os@@@", 319 "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_TASK_ID', ''))@@@", 320 "@@@STEP_LOG_END@python.inline@@@" 321 ] 322 }, 323 { 324 "cmd": [ 325 "python", 326 "-u", 327 "[START_DIR]/skia/tools/skpbench/skiaperf.py", 328 "[START_DIR]/[SWARM_OUT_DIR]/table", 329 "--properties", 330 "gitHash", 331 "abc123", 332 "swarming_bot_id", 333 "skia-bot-123", 334 "swarming_task_id", 335 "123456", 336 "--outfile", 337 "[START_DIR]/[SWARM_OUT_DIR]/skpbench_abc123_1337000001.json", 338 "--key", 339 "arch", 340 "arm64", 341 "compiler", 342 "Clang", 343 "cpu_or_gpu", 344 "GPU", 345 "cpu_or_gpu_value", 346 "Adreno540", 347 "extra_config", 348 "Android_Skpbench_Mskp", 349 "model", 350 "Pixel2XL", 351 "os", 352 "Android", 353 "test_filter", 354 "All" 355 ], 356 "env": { 357 "CHROME_HEADLESS": "1", 358 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 359 }, 360 "name": "Parse skpbench output into Perf json" 361 }, 362 { 363 "cmd": [ 364 "python", 365 "-u", 366 "\nimport os\nimport subprocess\nimport sys\nout = sys.argv[1]\nlog = subprocess.check_output(['/usr/bin/adb.1.0.35', '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", 367 "[START_DIR]/build" 368 ], 369 "env": { 370 "CHROME_HEADLESS": "1", 371 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 372 }, 373 "infra_step": true, 374 "name": "dump log", 375 "timeout": 300, 376 "~followup_annotations": [ 377 "@@@STEP_LOG_LINE@python.inline@@@@", 378 "@@@STEP_LOG_LINE@python.inline@import os@@@", 379 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 380 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 381 "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@", 382 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])@@@", 383 "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@", 384 "@@@STEP_LOG_LINE@python.inline@ tokens = line.split()@@@", 385 "@@@STEP_LOG_LINE@python.inline@ if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@", 386 "@@@STEP_LOG_LINE@python.inline@ addr, path = tokens[-2:]@@@", 387 "@@@STEP_LOG_LINE@python.inline@ local = os.path.join(out, os.path.basename(path))@@@", 388 "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(local):@@@", 389 "@@@STEP_LOG_LINE@python.inline@ try:@@@", 390 "@@@STEP_LOG_LINE@python.inline@ sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@", 391 "@@@STEP_LOG_LINE@python.inline@ line = line.replace(addr, addr + ' ' + sym.strip())@@@", 392 "@@@STEP_LOG_LINE@python.inline@ except subprocess.CalledProcessError:@@@", 393 "@@@STEP_LOG_LINE@python.inline@ pass@@@", 394 "@@@STEP_LOG_LINE@python.inline@ print(line)@@@", 395 "@@@STEP_LOG_END@python.inline@@@" 396 ] 397 }, 398 { 399 "cmd": [ 400 "/usr/bin/adb.1.0.35", 401 "kill-server" 402 ], 403 "cwd": "[START_DIR]/skia", 404 "env": { 405 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 406 "CHROME_HEADLESS": "1", 407 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 408 }, 409 "infra_step": true, 410 "name": "kill adb server" 411 }, 412 { 413 "name": "$result" 414 } 415]