1[ 2 { 3 "cmd": [ 4 "python", 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 "stdout": "/path/to/tmp/", 25 "~followup_annotations": [ 26 "@@@STEP_LOG_LINE@python.inline@import os@@@", 27 "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", 28 "@@@STEP_LOG_END@python.inline@@@" 29 ] 30 }, 31 { 32 "cmd": [ 33 "/usr/bin/adb.1.0.35", 34 "shell", 35 "mkdir", 36 "-p", 37 "/sdcard/revenge_of_the_skiabot/resources" 38 ], 39 "cwd": "[START_DIR]/skia", 40 "env": { 41 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 42 "CHROME_HEADLESS": "1", 43 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 44 }, 45 "infra_step": true, 46 "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" 47 }, 48 { 49 "cmd": [ 50 "python", 51 "-u", 52 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 53 "[START_DIR]/skia/resources", 54 "/sdcard/revenge_of_the_skiabot/resources" 55 ], 56 "env": { 57 "CHROME_HEADLESS": "1", 58 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 59 }, 60 "infra_step": true, 61 "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources", 62 "~followup_annotations": [ 63 "@@@STEP_LOG_LINE@python.inline@@@@", 64 "@@@STEP_LOG_LINE@python.inline@import os@@@", 65 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 66 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 67 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 68 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 69 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 70 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 71 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 72 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 73 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 74 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 75 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 76 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 77 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 78 "@@@STEP_LOG_END@python.inline@@@" 79 ] 80 }, 81 { 82 "cmd": [ 83 "python", 84 "-u", 85 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 86 "--json-output", 87 "/path/to/tmp/json", 88 "copy", 89 "[START_DIR]/skia/infra/bots/assets/skp/VERSION", 90 "/path/to/tmp/" 91 ], 92 "infra_step": true, 93 "name": "Get skp VERSION" 94 }, 95 { 96 "cmd": [ 97 "python", 98 "-u", 99 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 100 "--json-output", 101 "/path/to/tmp/json", 102 "copy", 103 "42", 104 "[START_DIR]/tmp/SKP_VERSION" 105 ], 106 "infra_step": true, 107 "name": "write SKP_VERSION" 108 }, 109 { 110 "cmd": [ 111 "/usr/bin/adb.1.0.35", 112 "shell", 113 "cat", 114 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 115 ], 116 "cwd": "[START_DIR]/skia", 117 "env": { 118 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 119 "CHROME_HEADLESS": "1", 120 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 121 }, 122 "infra_step": true, 123 "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION", 124 "stdout": "/path/to/tmp/" 125 }, 126 { 127 "cmd": [ 128 "/usr/bin/adb.1.0.35", 129 "shell", 130 "rm", 131 "-f", 132 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 133 ], 134 "cwd": "[START_DIR]/skia", 135 "env": { 136 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 137 "CHROME_HEADLESS": "1", 138 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 139 }, 140 "infra_step": true, 141 "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION" 142 }, 143 { 144 "cmd": [ 145 "/usr/bin/adb.1.0.35", 146 "shell", 147 "rm", 148 "-rf", 149 "/sdcard/revenge_of_the_skiabot/skps" 150 ], 151 "cwd": "[START_DIR]/skia", 152 "env": { 153 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 154 "CHROME_HEADLESS": "1", 155 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 156 }, 157 "infra_step": true, 158 "name": "rm /sdcard/revenge_of_the_skiabot/skps" 159 }, 160 { 161 "cmd": [ 162 "/usr/bin/adb.1.0.35", 163 "shell", 164 "mkdir", 165 "-p", 166 "/sdcard/revenge_of_the_skiabot/skps" 167 ], 168 "cwd": "[START_DIR]/skia", 169 "env": { 170 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 171 "CHROME_HEADLESS": "1", 172 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 173 }, 174 "infra_step": true, 175 "name": "mkdir /sdcard/revenge_of_the_skiabot/skps" 176 }, 177 { 178 "cmd": [ 179 "python", 180 "-u", 181 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 182 "[START_DIR]/skp", 183 "/sdcard/revenge_of_the_skiabot/skps" 184 ], 185 "env": { 186 "CHROME_HEADLESS": "1", 187 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 188 }, 189 "infra_step": true, 190 "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps", 191 "~followup_annotations": [ 192 "@@@STEP_LOG_LINE@python.inline@@@@", 193 "@@@STEP_LOG_LINE@python.inline@import os@@@", 194 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 195 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 196 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 197 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 198 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 199 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 200 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 201 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 202 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 203 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 204 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 205 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 206 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 207 "@@@STEP_LOG_END@python.inline@@@" 208 ] 209 }, 210 { 211 "cmd": [ 212 "/usr/bin/adb.1.0.35", 213 "push", 214 "[START_DIR]/tmp/SKP_VERSION", 215 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 216 ], 217 "cwd": "[START_DIR]/skia", 218 "env": { 219 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 220 "CHROME_HEADLESS": "1", 221 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 222 }, 223 "infra_step": true, 224 "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION" 225 }, 226 { 227 "cmd": [ 228 "python", 229 "-u", 230 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 231 "--json-output", 232 "/path/to/tmp/json", 233 "copy", 234 "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", 235 "/path/to/tmp/" 236 ], 237 "infra_step": true, 238 "name": "Get skimage VERSION" 239 }, 240 { 241 "cmd": [ 242 "python", 243 "-u", 244 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 245 "--json-output", 246 "/path/to/tmp/json", 247 "copy", 248 "42", 249 "[START_DIR]/tmp/SK_IMAGE_VERSION" 250 ], 251 "infra_step": true, 252 "name": "write SK_IMAGE_VERSION" 253 }, 254 { 255 "cmd": [ 256 "/usr/bin/adb.1.0.35", 257 "shell", 258 "cat", 259 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 260 ], 261 "cwd": "[START_DIR]/skia", 262 "env": { 263 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 264 "CHROME_HEADLESS": "1", 265 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 266 }, 267 "infra_step": true, 268 "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION", 269 "stdout": "/path/to/tmp/" 270 }, 271 { 272 "cmd": [ 273 "/usr/bin/adb.1.0.35", 274 "shell", 275 "rm", 276 "-f", 277 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 278 ], 279 "cwd": "[START_DIR]/skia", 280 "env": { 281 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 282 "CHROME_HEADLESS": "1", 283 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 284 }, 285 "infra_step": true, 286 "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 287 }, 288 { 289 "cmd": [ 290 "/usr/bin/adb.1.0.35", 291 "shell", 292 "rm", 293 "-rf", 294 "/sdcard/revenge_of_the_skiabot/images" 295 ], 296 "cwd": "[START_DIR]/skia", 297 "env": { 298 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 299 "CHROME_HEADLESS": "1", 300 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 301 }, 302 "infra_step": true, 303 "name": "rm /sdcard/revenge_of_the_skiabot/images" 304 }, 305 { 306 "cmd": [ 307 "/usr/bin/adb.1.0.35", 308 "shell", 309 "mkdir", 310 "-p", 311 "/sdcard/revenge_of_the_skiabot/images" 312 ], 313 "cwd": "[START_DIR]/skia", 314 "env": { 315 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 316 "CHROME_HEADLESS": "1", 317 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 318 }, 319 "infra_step": true, 320 "name": "mkdir /sdcard/revenge_of_the_skiabot/images" 321 }, 322 { 323 "cmd": [ 324 "python", 325 "-u", 326 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 327 "[START_DIR]/skimage", 328 "/sdcard/revenge_of_the_skiabot/images" 329 ], 330 "env": { 331 "CHROME_HEADLESS": "1", 332 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 333 }, 334 "infra_step": true, 335 "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images", 336 "~followup_annotations": [ 337 "@@@STEP_LOG_LINE@python.inline@@@@", 338 "@@@STEP_LOG_LINE@python.inline@import os@@@", 339 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 340 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 341 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 342 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 343 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 344 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 345 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 346 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 347 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 348 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 349 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 350 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 351 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 352 "@@@STEP_LOG_END@python.inline@@@" 353 ] 354 }, 355 { 356 "cmd": [ 357 "/usr/bin/adb.1.0.35", 358 "push", 359 "[START_DIR]/tmp/SK_IMAGE_VERSION", 360 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 361 ], 362 "cwd": "[START_DIR]/skia", 363 "env": { 364 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 365 "CHROME_HEADLESS": "1", 366 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 367 }, 368 "infra_step": true, 369 "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 370 }, 371 { 372 "cmd": [ 373 "python", 374 "-u", 375 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 376 "--json-output", 377 "/path/to/tmp/json", 378 "copy", 379 "[START_DIR]/skia/infra/bots/assets/svg/VERSION", 380 "/path/to/tmp/" 381 ], 382 "infra_step": true, 383 "name": "Get svg VERSION" 384 }, 385 { 386 "cmd": [ 387 "python", 388 "-u", 389 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 390 "--json-output", 391 "/path/to/tmp/json", 392 "copy", 393 "42", 394 "[START_DIR]/tmp/SVG_VERSION" 395 ], 396 "infra_step": true, 397 "name": "write SVG_VERSION" 398 }, 399 { 400 "cmd": [ 401 "/usr/bin/adb.1.0.35", 402 "shell", 403 "cat", 404 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 405 ], 406 "cwd": "[START_DIR]/skia", 407 "env": { 408 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 409 "CHROME_HEADLESS": "1", 410 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 411 }, 412 "infra_step": true, 413 "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION", 414 "stdout": "/path/to/tmp/" 415 }, 416 { 417 "cmd": [ 418 "/usr/bin/adb.1.0.35", 419 "shell", 420 "rm", 421 "-f", 422 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 423 ], 424 "cwd": "[START_DIR]/skia", 425 "env": { 426 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 427 "CHROME_HEADLESS": "1", 428 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 429 }, 430 "infra_step": true, 431 "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION" 432 }, 433 { 434 "cmd": [ 435 "/usr/bin/adb.1.0.35", 436 "shell", 437 "rm", 438 "-rf", 439 "/sdcard/revenge_of_the_skiabot/svgs" 440 ], 441 "cwd": "[START_DIR]/skia", 442 "env": { 443 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 444 "CHROME_HEADLESS": "1", 445 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 446 }, 447 "infra_step": true, 448 "name": "rm /sdcard/revenge_of_the_skiabot/svgs" 449 }, 450 { 451 "cmd": [ 452 "/usr/bin/adb.1.0.35", 453 "shell", 454 "mkdir", 455 "-p", 456 "/sdcard/revenge_of_the_skiabot/svgs" 457 ], 458 "cwd": "[START_DIR]/skia", 459 "env": { 460 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 461 "CHROME_HEADLESS": "1", 462 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 463 }, 464 "infra_step": true, 465 "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs" 466 }, 467 { 468 "cmd": [ 469 "python", 470 "-u", 471 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 472 "[START_DIR]/svg", 473 "/sdcard/revenge_of_the_skiabot/svgs" 474 ], 475 "env": { 476 "CHROME_HEADLESS": "1", 477 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 478 }, 479 "infra_step": true, 480 "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs", 481 "~followup_annotations": [ 482 "@@@STEP_LOG_LINE@python.inline@@@@", 483 "@@@STEP_LOG_LINE@python.inline@import os@@@", 484 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 485 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 486 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 487 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 488 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 489 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 490 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 491 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 492 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 493 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 494 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 495 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 496 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 497 "@@@STEP_LOG_END@python.inline@@@" 498 ] 499 }, 500 { 501 "cmd": [ 502 "/usr/bin/adb.1.0.35", 503 "push", 504 "[START_DIR]/tmp/SVG_VERSION", 505 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 506 ], 507 "cwd": "[START_DIR]/skia", 508 "env": { 509 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 510 "CHROME_HEADLESS": "1", 511 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 512 }, 513 "infra_step": true, 514 "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION" 515 }, 516 { 517 "cmd": [ 518 "python", 519 "-u", 520 "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" 521 ], 522 "name": "get swarming task id", 523 "stdout": "/path/to/tmp/", 524 "~followup_annotations": [ 525 "@@@STEP_LOG_LINE@python.inline@import os@@@", 526 "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", 527 "@@@STEP_LOG_END@python.inline@@@" 528 ] 529 }, 530 { 531 "cmd": [ 532 "python", 533 "-u", 534 "\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", 535 "/usr/bin/adb.1.0.35", 536 "0", 537 "userspace" 538 ], 539 "env": { 540 "CHROME_HEADLESS": "1", 541 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 542 }, 543 "infra_step": true, 544 "name": "Set CPU 0's governor to userspace", 545 "timeout": 30, 546 "~followup_annotations": [ 547 "@@@STEP_LOG_LINE@python.inline@@@@", 548 "@@@STEP_LOG_LINE@python.inline@import os@@@", 549 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 550 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 551 "@@@STEP_LOG_LINE@python.inline@import time@@@", 552 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 553 "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", 554 "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", 555 "@@@STEP_LOG_LINE@python.inline@@@@", 556 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 557 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 558 "@@@STEP_LOG_LINE@python.inline@print log@@@", 559 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 560 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 561 "@@@STEP_LOG_LINE@python.inline@@@@", 562 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", 563 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", 564 "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", 565 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", 566 "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", 567 "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", 568 "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", 569 "@@@STEP_LOG_END@python.inline@@@" 570 ] 571 }, 572 { 573 "cmd": [ 574 "python", 575 "-u", 576 "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\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\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n 'cat %s/scaling_available_frequencies' % root])\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n available_freqs = sorted(\n int(i) for i in available_freqs.strip().split())\nelse:\n raise Exception('Could not get list of available frequencies: %s' %\n available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n if f <= target:\n freq = f\n break\n\nprint 'Setting frequency to %d' % freq\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '%s/scaling_min_freq' % root])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '%s/scaling_cur_freq' % root]).strip()\nif actual_freq != str(freq):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_freq, freq))\n", 577 "/usr/bin/adb.1.0.35", 578 "0.6", 579 "0" 580 ], 581 "env": { 582 "CHROME_HEADLESS": "1", 583 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 584 }, 585 "infra_step": true, 586 "name": "Scale CPU 0 to 0.600000", 587 "timeout": 30, 588 "~followup_annotations": [ 589 "@@@STEP_LOG_LINE@python.inline@@@@", 590 "@@@STEP_LOG_LINE@python.inline@import os@@@", 591 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 592 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 593 "@@@STEP_LOG_LINE@python.inline@import time@@@", 594 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 595 "@@@STEP_LOG_LINE@python.inline@target_percent = float(sys.argv[2])@@@", 596 "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[3])@@@", 597 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 598 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 599 "@@@STEP_LOG_LINE@python.inline@print log@@@", 600 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 601 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 602 "@@@STEP_LOG_LINE@python.inline@@@@", 603 "@@@STEP_LOG_LINE@python.inline@root = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu@@@", 604 "@@@STEP_LOG_LINE@python.inline@@@@", 605 "@@@STEP_LOG_LINE@python.inline@# All devices we test on give a list of their available frequencies.@@@", 606 "@@@STEP_LOG_LINE@python.inline@available_freqs = subprocess.check_output([ADB, 'shell',@@@", 607 "@@@STEP_LOG_LINE@python.inline@ 'cat %s/scaling_available_frequencies' % root])@@@", 608 "@@@STEP_LOG_LINE@python.inline@@@@", 609 "@@@STEP_LOG_LINE@python.inline@# Check for message like '/system/bin/sh: file not found'@@@", 610 "@@@STEP_LOG_LINE@python.inline@if available_freqs and '/system/bin/sh' not in available_freqs:@@@", 611 "@@@STEP_LOG_LINE@python.inline@ available_freqs = sorted(@@@", 612 "@@@STEP_LOG_LINE@python.inline@ int(i) for i in available_freqs.strip().split())@@@", 613 "@@@STEP_LOG_LINE@python.inline@else:@@@", 614 "@@@STEP_LOG_LINE@python.inline@ raise Exception('Could not get list of available frequencies: %s' %@@@", 615 "@@@STEP_LOG_LINE@python.inline@ available_freqs)@@@", 616 "@@@STEP_LOG_LINE@python.inline@@@@", 617 "@@@STEP_LOG_LINE@python.inline@maxfreq = available_freqs[-1]@@@", 618 "@@@STEP_LOG_LINE@python.inline@target = int(round(maxfreq * target_percent))@@@", 619 "@@@STEP_LOG_LINE@python.inline@freq = maxfreq@@@", 620 "@@@STEP_LOG_LINE@python.inline@for f in reversed(available_freqs):@@@", 621 "@@@STEP_LOG_LINE@python.inline@ if f <= target:@@@", 622 "@@@STEP_LOG_LINE@python.inline@ freq = f@@@", 623 "@@@STEP_LOG_LINE@python.inline@ break@@@", 624 "@@@STEP_LOG_LINE@python.inline@@@@", 625 "@@@STEP_LOG_LINE@python.inline@print 'Setting frequency to %d' % freq@@@", 626 "@@@STEP_LOG_LINE@python.inline@@@@", 627 "@@@STEP_LOG_LINE@python.inline@# If scaling_max_freq is lower than our attempted setting, it won't take.@@@", 628 "@@@STEP_LOG_LINE@python.inline@# We must set min first, because if we try to set max to be less than min@@@", 629 "@@@STEP_LOG_LINE@python.inline@# (which sometimes happens after certain devices reboot) it returns a@@@", 630 "@@@STEP_LOG_LINE@python.inline@# perplexing permissions error.@@@", 631 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", 632 "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_min_freq' % root])@@@", 633 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", 634 "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_max_freq' % (freq, root)])@@@", 635 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", 636 "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_setspeed' % (freq, root)])@@@", 637 "@@@STEP_LOG_LINE@python.inline@time.sleep(5)@@@", 638 "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@", 639 "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_cur_freq' % root]).strip()@@@", 640 "@@@STEP_LOG_LINE@python.inline@if actual_freq != str(freq):@@@", 641 "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", 642 "@@@STEP_LOG_LINE@python.inline@ % (actual_freq, freq))@@@", 643 "@@@STEP_LOG_END@python.inline@@@" 644 ] 645 }, 646 { 647 "cmd": [ 648 "python", 649 "-u", 650 "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\nfreq = sys.argv[2]\nidle_timer = \"10000\"\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', 'stop', 'thermald'])\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/class/kgsl/kgsl-3d0/gpuclk' % freq])\n\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/class/kgsl/kgsl-3d0/gpuclk']).strip()\nif actual_freq != freq:\n raise Exception('Frequency (actual, expected) (%s, %s)'\n % (actual_freq, freq))\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/class/kgsl/kgsl-3d0/idle_timer' % idle_timer])\n\nactual_timer = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/class/kgsl/kgsl-3d0/idle_timer']).strip()\nif actual_timer != idle_timer:\n raise Exception('idle_timer (actual, expected) (%s, %s)'\n % (actual_timer, idle_timer))\n\nfor s in ['force_bus_on', 'force_rail_on', 'force_clk_on']:\n subprocess.check_output([ADB, 'shell', 'echo \"1\" > '\n '/sys/class/kgsl/kgsl-3d0/%s' % s])\n actual_set = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/class/kgsl/kgsl-3d0/%s' % s]).strip()\n if actual_set != \"1\":\n raise Exception('%s (actual, expected) (%s, 1)'\n % (s, actual_set))\n", 651 "/usr/bin/adb.1.0.35", 652 "450000000" 653 ], 654 "env": { 655 "CHROME_HEADLESS": "1", 656 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 657 }, 658 "infra_step": true, 659 "name": "Lock GPU to 450000000 (and other perf tweaks)", 660 "timeout": 30, 661 "~followup_annotations": [ 662 "@@@STEP_LOG_LINE@python.inline@@@@", 663 "@@@STEP_LOG_LINE@python.inline@import os@@@", 664 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 665 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 666 "@@@STEP_LOG_LINE@python.inline@import time@@@", 667 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 668 "@@@STEP_LOG_LINE@python.inline@freq = sys.argv[2]@@@", 669 "@@@STEP_LOG_LINE@python.inline@idle_timer = \"10000\"@@@", 670 "@@@STEP_LOG_LINE@python.inline@@@@", 671 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 672 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 673 "@@@STEP_LOG_LINE@python.inline@print log@@@", 674 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 675 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 676 "@@@STEP_LOG_LINE@python.inline@@@@", 677 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'stop', 'thermald'])@@@", 678 "@@@STEP_LOG_LINE@python.inline@@@@", 679 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", 680 "@@@STEP_LOG_LINE@python.inline@ '/sys/class/kgsl/kgsl-3d0/gpuclk' % freq])@@@", 681 "@@@STEP_LOG_LINE@python.inline@@@@", 682 "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@", 683 "@@@STEP_LOG_LINE@python.inline@ '/sys/class/kgsl/kgsl-3d0/gpuclk']).strip()@@@", 684 "@@@STEP_LOG_LINE@python.inline@if actual_freq != freq:@@@", 685 "@@@STEP_LOG_LINE@python.inline@ raise Exception('Frequency (actual, expected) (%s, %s)'@@@", 686 "@@@STEP_LOG_LINE@python.inline@ % (actual_freq, freq))@@@", 687 "@@@STEP_LOG_LINE@python.inline@@@@", 688 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", 689 "@@@STEP_LOG_LINE@python.inline@ '/sys/class/kgsl/kgsl-3d0/idle_timer' % idle_timer])@@@", 690 "@@@STEP_LOG_LINE@python.inline@@@@", 691 "@@@STEP_LOG_LINE@python.inline@actual_timer = subprocess.check_output([ADB, 'shell', 'cat '@@@", 692 "@@@STEP_LOG_LINE@python.inline@ '/sys/class/kgsl/kgsl-3d0/idle_timer']).strip()@@@", 693 "@@@STEP_LOG_LINE@python.inline@if actual_timer != idle_timer:@@@", 694 "@@@STEP_LOG_LINE@python.inline@ raise Exception('idle_timer (actual, expected) (%s, %s)'@@@", 695 "@@@STEP_LOG_LINE@python.inline@ % (actual_timer, idle_timer))@@@", 696 "@@@STEP_LOG_LINE@python.inline@@@@", 697 "@@@STEP_LOG_LINE@python.inline@for s in ['force_bus_on', 'force_rail_on', 'force_clk_on']:@@@", 698 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_output([ADB, 'shell', 'echo \"1\" > '@@@", 699 "@@@STEP_LOG_LINE@python.inline@ '/sys/class/kgsl/kgsl-3d0/%s' % s])@@@", 700 "@@@STEP_LOG_LINE@python.inline@ actual_set = subprocess.check_output([ADB, 'shell', 'cat '@@@", 701 "@@@STEP_LOG_LINE@python.inline@ '/sys/class/kgsl/kgsl-3d0/%s' % s]).strip()@@@", 702 "@@@STEP_LOG_LINE@python.inline@ if actual_set != \"1\":@@@", 703 "@@@STEP_LOG_LINE@python.inline@ raise Exception('%s (actual, expected) (%s, 1)'@@@", 704 "@@@STEP_LOG_LINE@python.inline@ % (s, actual_set))@@@", 705 "@@@STEP_LOG_END@python.inline@@@" 706 ] 707 }, 708 { 709 "cmd": [ 710 "/usr/bin/adb.1.0.35", 711 "push", 712 "[START_DIR]/build/nanobench", 713 "/data/local/tmp/" 714 ], 715 "cwd": "[START_DIR]/skia", 716 "env": { 717 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 718 "CHROME_HEADLESS": "1", 719 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 720 }, 721 "infra_step": true, 722 "name": "push nanobench" 723 }, 724 { 725 "cmd": [ 726 "python", 727 "-u", 728 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 729 "--json-output", 730 "/path/to/tmp/json", 731 "copy", 732 "set -x; /data/local/tmp/nanobench -i /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/nanobench --svgs /sdcard/revenge_of_the_skiabot/svgs --pre_log --images --gpuStatsDump true --scales 1.0 1.1 --nocpu --config gles glessrgb glesmsaa4 --match ~blurroundrect ~patch_grid ~desk_carsvg ~keymobi_shop_mobileweb_ebay_com.skp ~inc0.gif ~inc1.gif ~incInterlaced.gif ~inc0.jpg ~incGray.jpg ~inc0.wbmp ~inc1.wbmp ~inc0.webp ~inc1.webp ~inc0.ico ~inc1.ico ~inc0.png ~inc1.png ~inc2.png ~inc12.png ~inc13.png ~inc14.png ~inc0.webp ~inc1.webp; echo $? >/data/local/tmp/rc", 733 "[START_DIR]/tmp/nanobench.sh" 734 ], 735 "env": { 736 "CHROME_HEADLESS": "1", 737 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 738 }, 739 "infra_step": true, 740 "name": "write nanobench.sh" 741 }, 742 { 743 "cmd": [ 744 "/usr/bin/adb.1.0.35", 745 "push", 746 "[START_DIR]/tmp/nanobench.sh", 747 "/data/local/tmp/" 748 ], 749 "cwd": "[START_DIR]/skia", 750 "env": { 751 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 752 "CHROME_HEADLESS": "1", 753 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 754 }, 755 "infra_step": true, 756 "name": "push nanobench.sh" 757 }, 758 { 759 "cmd": [ 760 "/usr/bin/adb.1.0.35", 761 "logcat", 762 "-c" 763 ], 764 "cwd": "[START_DIR]/skia", 765 "env": { 766 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 767 "CHROME_HEADLESS": "1", 768 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 769 }, 770 "infra_step": true, 771 "name": "clear log" 772 }, 773 { 774 "cmd": [ 775 "python", 776 "-u", 777 "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh = sys.argv[2]\nsubprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])\ntry:\n sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', '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", 778 "/data/local/tmp/", 779 "nanobench.sh" 780 ], 781 "env": { 782 "CHROME_HEADLESS": "1", 783 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 784 }, 785 "name": "nanobench", 786 "~followup_annotations": [ 787 "@@@STEP_LOG_LINE@python.inline@@@@", 788 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 789 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 790 "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@", 791 "@@@STEP_LOG_LINE@python.inline@sh = sys.argv[2]@@@", 792 "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])@@@", 793 "@@@STEP_LOG_LINE@python.inline@try:@@@", 794 "@@@STEP_LOG_LINE@python.inline@ sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',@@@", 795 "@@@STEP_LOG_LINE@python.inline@ bin_dir + 'rc'])))@@@", 796 "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@", 797 "@@@STEP_LOG_LINE@python.inline@ print \"Couldn't read the return code. Probably killed for OOM.\"@@@", 798 "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", 799 "@@@STEP_LOG_END@python.inline@@@" 800 ] 801 }, 802 { 803 "cmd": [ 804 "python", 805 "-u", 806 "\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 sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n line = line.replace(addr, addr + ' ' + sym.strip())\n print line\n", 807 "[START_DIR]/build" 808 ], 809 "env": { 810 "CHROME_HEADLESS": "1", 811 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 812 }, 813 "infra_step": true, 814 "name": "dump log", 815 "timeout": 300, 816 "~followup_annotations": [ 817 "@@@STEP_LOG_LINE@python.inline@@@@", 818 "@@@STEP_LOG_LINE@python.inline@import os@@@", 819 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 820 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 821 "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@", 822 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])@@@", 823 "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@", 824 "@@@STEP_LOG_LINE@python.inline@ tokens = line.split()@@@", 825 "@@@STEP_LOG_LINE@python.inline@ if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@", 826 "@@@STEP_LOG_LINE@python.inline@ addr, path = tokens[-2:]@@@", 827 "@@@STEP_LOG_LINE@python.inline@ local = os.path.join(out, os.path.basename(path))@@@", 828 "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(local):@@@", 829 "@@@STEP_LOG_LINE@python.inline@ sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@", 830 "@@@STEP_LOG_LINE@python.inline@ line = line.replace(addr, addr + ' ' + sym.strip())@@@", 831 "@@@STEP_LOG_LINE@python.inline@ print line@@@", 832 "@@@STEP_LOG_END@python.inline@@@" 833 ] 834 }, 835 { 836 "cmd": [ 837 "/usr/bin/adb.1.0.35", 838 "kill-server" 839 ], 840 "cwd": "[START_DIR]/skia", 841 "env": { 842 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 843 "CHROME_HEADLESS": "1", 844 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 845 }, 846 "infra_step": true, 847 "name": "kill adb server" 848 }, 849 { 850 "jsonResult": null, 851 "name": "$result" 852 } 853]