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