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