1[ 2 { 3 "cmd": [ 4 "python", 5 "-u", 6 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 7 "--json-output", 8 "/path/to/tmp/json", 9 "ensure-directory", 10 "--mode", 11 "0777", 12 "[START_DIR]/tmp" 13 ], 14 "infra_step": true, 15 "name": "makedirs tmp_dir" 16 }, 17 { 18 "cmd": [ 19 "python", 20 "-u", 21 "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" 22 ], 23 "name": "get swarming bot id", 24 "~followup_annotations": [ 25 "@@@STEP_LOG_LINE@python.inline@import os@@@", 26 "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", 27 "@@@STEP_LOG_END@python.inline@@@" 28 ] 29 }, 30 { 31 "cmd": [ 32 "/usr/bin/adb.1.0.35", 33 "shell", 34 "mkdir", 35 "-p", 36 "/sdcard/revenge_of_the_skiabot/resources" 37 ], 38 "cwd": "[START_DIR]/skia", 39 "env": { 40 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 41 "CHROME_HEADLESS": "1", 42 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 43 }, 44 "infra_step": true, 45 "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" 46 }, 47 { 48 "cmd": [ 49 "python", 50 "-u", 51 "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\nASAN_SETUP = sys.argv[2]\n\ndef wait_for_device():\n while True:\n time.sleep(5)\n print 'Waiting for device'\n subprocess.check_output([ADB, 'wait-for-device'])\n bit1 = subprocess.check_output([ADB, 'shell', 'getprop',\n 'dev.bootcomplete'])\n bit2 = subprocess.check_output([ADB, 'shell', 'getprop',\n 'sys.boot_completed'])\n if '1' in bit1 and '1' in bit2:\n print 'Device detected'\n break\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\noutput = subprocess.check_output([ADB, 'disable-verity'])\nprint output\n\nif 'already disabled' not in output:\n print 'Rebooting device'\n subprocess.check_output([ADB, 'reboot'])\n wait_for_device()\n\ndef installASAN(revert=False):\n # ASAN setup script is idempotent, either it installs it or\n # says it's installed. Returns True on success, false otherwise.\n out = subprocess.check_output([ADB, 'wait-for-device'])\n print out\n cmd = [ASAN_SETUP]\n if revert:\n cmd = [ASAN_SETUP, '--revert']\n process = subprocess.Popen(cmd, env={'ADB': ADB},\n stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n\n # this also blocks until command finishes\n (stdout, stderr) = process.communicate()\n print stdout\n print 'Stderr: %s' % stderr\n return process.returncode == 0\n\nif not installASAN():\n print 'Trying to revert the ASAN install and then re-install'\n # ASAN script sometimes has issues if it was interrupted or partially applied\n # Try reverting it, then re-enabling it\n if not installASAN(revert=True):\n raise Exception('reverting ASAN install failed')\n\n # Sleep because device does not reboot instantly\n time.sleep(10)\n\n if not installASAN():\n raise Exception('Tried twice to setup ASAN and failed.')\n\n# Sleep because device does not reboot instantly\ntime.sleep(10)\nwait_for_device()\n# Sleep again to hopefully avoid error \"secure_mkdirs failed: No such file or\n# directory\" when pushing resources to the device.\ntime.sleep(60)\n", 52 "/usr/bin/adb.1.0.35", 53 "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/8.0.7/bin/asan_device_setup" 54 ], 55 "env": { 56 "CHROME_HEADLESS": "1", 57 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 58 }, 59 "infra_step": true, 60 "name": "Setting up device to run ASAN", 61 "timeout": 300, 62 "~followup_annotations": [ 63 "@@@STEP_LOG_LINE@python.inline@@@@", 64 "@@@STEP_LOG_LINE@python.inline@import os@@@", 65 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 66 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 67 "@@@STEP_LOG_LINE@python.inline@import time@@@", 68 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 69 "@@@STEP_LOG_LINE@python.inline@ASAN_SETUP = sys.argv[2]@@@", 70 "@@@STEP_LOG_LINE@python.inline@@@@", 71 "@@@STEP_LOG_LINE@python.inline@def wait_for_device():@@@", 72 "@@@STEP_LOG_LINE@python.inline@ while True:@@@", 73 "@@@STEP_LOG_LINE@python.inline@ time.sleep(5)@@@", 74 "@@@STEP_LOG_LINE@python.inline@ print 'Waiting for device'@@@", 75 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_output([ADB, 'wait-for-device'])@@@", 76 "@@@STEP_LOG_LINE@python.inline@ bit1 = subprocess.check_output([ADB, 'shell', 'getprop',@@@", 77 "@@@STEP_LOG_LINE@python.inline@ 'dev.bootcomplete'])@@@", 78 "@@@STEP_LOG_LINE@python.inline@ bit2 = subprocess.check_output([ADB, 'shell', 'getprop',@@@", 79 "@@@STEP_LOG_LINE@python.inline@ 'sys.boot_completed'])@@@", 80 "@@@STEP_LOG_LINE@python.inline@ if '1' in bit1 and '1' in bit2:@@@", 81 "@@@STEP_LOG_LINE@python.inline@ print 'Device detected'@@@", 82 "@@@STEP_LOG_LINE@python.inline@ break@@@", 83 "@@@STEP_LOG_LINE@python.inline@@@@", 84 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 85 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 86 "@@@STEP_LOG_LINE@python.inline@print log@@@", 87 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 88 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 89 "@@@STEP_LOG_LINE@python.inline@@@@", 90 "@@@STEP_LOG_LINE@python.inline@output = subprocess.check_output([ADB, 'disable-verity'])@@@", 91 "@@@STEP_LOG_LINE@python.inline@print output@@@", 92 "@@@STEP_LOG_LINE@python.inline@@@@", 93 "@@@STEP_LOG_LINE@python.inline@if 'already disabled' not in output:@@@", 94 "@@@STEP_LOG_LINE@python.inline@ print 'Rebooting device'@@@", 95 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_output([ADB, 'reboot'])@@@", 96 "@@@STEP_LOG_LINE@python.inline@ wait_for_device()@@@", 97 "@@@STEP_LOG_LINE@python.inline@@@@", 98 "@@@STEP_LOG_LINE@python.inline@def installASAN(revert=False):@@@", 99 "@@@STEP_LOG_LINE@python.inline@ # ASAN setup script is idempotent, either it installs it or@@@", 100 "@@@STEP_LOG_LINE@python.inline@ # says it's installed. Returns True on success, false otherwise.@@@", 101 "@@@STEP_LOG_LINE@python.inline@ out = subprocess.check_output([ADB, 'wait-for-device'])@@@", 102 "@@@STEP_LOG_LINE@python.inline@ print out@@@", 103 "@@@STEP_LOG_LINE@python.inline@ cmd = [ASAN_SETUP]@@@", 104 "@@@STEP_LOG_LINE@python.inline@ if revert:@@@", 105 "@@@STEP_LOG_LINE@python.inline@ cmd = [ASAN_SETUP, '--revert']@@@", 106 "@@@STEP_LOG_LINE@python.inline@ process = subprocess.Popen(cmd, env={'ADB': ADB},@@@", 107 "@@@STEP_LOG_LINE@python.inline@ stdout=subprocess.PIPE, stderr=subprocess.PIPE)@@@", 108 "@@@STEP_LOG_LINE@python.inline@@@@", 109 "@@@STEP_LOG_LINE@python.inline@ # this also blocks until command finishes@@@", 110 "@@@STEP_LOG_LINE@python.inline@ (stdout, stderr) = process.communicate()@@@", 111 "@@@STEP_LOG_LINE@python.inline@ print stdout@@@", 112 "@@@STEP_LOG_LINE@python.inline@ print 'Stderr: %s' % stderr@@@", 113 "@@@STEP_LOG_LINE@python.inline@ return process.returncode == 0@@@", 114 "@@@STEP_LOG_LINE@python.inline@@@@", 115 "@@@STEP_LOG_LINE@python.inline@if not installASAN():@@@", 116 "@@@STEP_LOG_LINE@python.inline@ print 'Trying to revert the ASAN install and then re-install'@@@", 117 "@@@STEP_LOG_LINE@python.inline@ # ASAN script sometimes has issues if it was interrupted or partially applied@@@", 118 "@@@STEP_LOG_LINE@python.inline@ # Try reverting it, then re-enabling it@@@", 119 "@@@STEP_LOG_LINE@python.inline@ if not installASAN(revert=True):@@@", 120 "@@@STEP_LOG_LINE@python.inline@ raise Exception('reverting ASAN install failed')@@@", 121 "@@@STEP_LOG_LINE@python.inline@@@@", 122 "@@@STEP_LOG_LINE@python.inline@ # Sleep because device does not reboot instantly@@@", 123 "@@@STEP_LOG_LINE@python.inline@ time.sleep(10)@@@", 124 "@@@STEP_LOG_LINE@python.inline@@@@", 125 "@@@STEP_LOG_LINE@python.inline@ if not installASAN():@@@", 126 "@@@STEP_LOG_LINE@python.inline@ raise Exception('Tried twice to setup ASAN and failed.')@@@", 127 "@@@STEP_LOG_LINE@python.inline@@@@", 128 "@@@STEP_LOG_LINE@python.inline@# Sleep because device does not reboot instantly@@@", 129 "@@@STEP_LOG_LINE@python.inline@time.sleep(10)@@@", 130 "@@@STEP_LOG_LINE@python.inline@wait_for_device()@@@", 131 "@@@STEP_LOG_LINE@python.inline@# Sleep again to hopefully avoid error \"secure_mkdirs failed: No such file or@@@", 132 "@@@STEP_LOG_LINE@python.inline@# directory\" when pushing resources to the device.@@@", 133 "@@@STEP_LOG_LINE@python.inline@time.sleep(60)@@@", 134 "@@@STEP_LOG_END@python.inline@@@" 135 ] 136 }, 137 { 138 "cmd": [ 139 "python", 140 "-u", 141 "\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", 142 "[START_DIR]/skia/resources", 143 "/sdcard/revenge_of_the_skiabot/resources" 144 ], 145 "env": { 146 "CHROME_HEADLESS": "1", 147 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 148 }, 149 "infra_step": true, 150 "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources", 151 "~followup_annotations": [ 152 "@@@STEP_LOG_LINE@python.inline@@@@", 153 "@@@STEP_LOG_LINE@python.inline@import os@@@", 154 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 155 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 156 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 157 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 158 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 159 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 160 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 161 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 162 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 163 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 164 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 165 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 166 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 167 "@@@STEP_LOG_END@python.inline@@@" 168 ] 169 }, 170 { 171 "cmd": [ 172 "python", 173 "-u", 174 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 175 "--json-output", 176 "/path/to/tmp/json", 177 "copy", 178 "[START_DIR]/skia/infra/bots/assets/skp/VERSION", 179 "/path/to/tmp/" 180 ], 181 "infra_step": true, 182 "name": "Get skp VERSION" 183 }, 184 { 185 "cmd": [ 186 "python", 187 "-u", 188 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 189 "--json-output", 190 "/path/to/tmp/json", 191 "copy", 192 "42", 193 "[START_DIR]/tmp/SKP_VERSION" 194 ], 195 "infra_step": true, 196 "name": "write SKP_VERSION", 197 "~followup_annotations": [ 198 "@@@STEP_LOG_LINE@SKP_VERSION@42@@@", 199 "@@@STEP_LOG_END@SKP_VERSION@@@" 200 ] 201 }, 202 { 203 "cmd": [ 204 "/usr/bin/adb.1.0.35", 205 "shell", 206 "cat", 207 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 208 ], 209 "cwd": "[START_DIR]/skia", 210 "env": { 211 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 212 "CHROME_HEADLESS": "1", 213 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 214 }, 215 "infra_step": true, 216 "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION" 217 }, 218 { 219 "cmd": [ 220 "/usr/bin/adb.1.0.35", 221 "shell", 222 "rm", 223 "-f", 224 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 225 ], 226 "cwd": "[START_DIR]/skia", 227 "env": { 228 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 229 "CHROME_HEADLESS": "1", 230 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 231 }, 232 "infra_step": true, 233 "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION" 234 }, 235 { 236 "cmd": [ 237 "/usr/bin/adb.1.0.35", 238 "shell", 239 "rm", 240 "-rf", 241 "/sdcard/revenge_of_the_skiabot/skps" 242 ], 243 "cwd": "[START_DIR]/skia", 244 "env": { 245 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 246 "CHROME_HEADLESS": "1", 247 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 248 }, 249 "infra_step": true, 250 "name": "rm /sdcard/revenge_of_the_skiabot/skps" 251 }, 252 { 253 "cmd": [ 254 "/usr/bin/adb.1.0.35", 255 "shell", 256 "mkdir", 257 "-p", 258 "/sdcard/revenge_of_the_skiabot/skps" 259 ], 260 "cwd": "[START_DIR]/skia", 261 "env": { 262 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 263 "CHROME_HEADLESS": "1", 264 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 265 }, 266 "infra_step": true, 267 "name": "mkdir /sdcard/revenge_of_the_skiabot/skps" 268 }, 269 { 270 "cmd": [ 271 "python", 272 "-u", 273 "\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", 274 "[START_DIR]/skp", 275 "/sdcard/revenge_of_the_skiabot/skps" 276 ], 277 "env": { 278 "CHROME_HEADLESS": "1", 279 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 280 }, 281 "infra_step": true, 282 "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps", 283 "~followup_annotations": [ 284 "@@@STEP_LOG_LINE@python.inline@@@@", 285 "@@@STEP_LOG_LINE@python.inline@import os@@@", 286 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 287 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 288 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 289 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 290 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 291 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 292 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 293 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 294 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 295 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 296 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 297 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 298 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 299 "@@@STEP_LOG_END@python.inline@@@" 300 ] 301 }, 302 { 303 "cmd": [ 304 "/usr/bin/adb.1.0.35", 305 "push", 306 "[START_DIR]/tmp/SKP_VERSION", 307 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 308 ], 309 "cwd": "[START_DIR]/skia", 310 "env": { 311 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 312 "CHROME_HEADLESS": "1", 313 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 314 }, 315 "infra_step": true, 316 "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION" 317 }, 318 { 319 "cmd": [ 320 "python", 321 "-u", 322 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 323 "--json-output", 324 "/path/to/tmp/json", 325 "copy", 326 "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", 327 "/path/to/tmp/" 328 ], 329 "infra_step": true, 330 "name": "Get skimage VERSION" 331 }, 332 { 333 "cmd": [ 334 "python", 335 "-u", 336 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 337 "--json-output", 338 "/path/to/tmp/json", 339 "copy", 340 "42", 341 "[START_DIR]/tmp/SK_IMAGE_VERSION" 342 ], 343 "infra_step": true, 344 "name": "write SK_IMAGE_VERSION", 345 "~followup_annotations": [ 346 "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@", 347 "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@" 348 ] 349 }, 350 { 351 "cmd": [ 352 "/usr/bin/adb.1.0.35", 353 "shell", 354 "cat", 355 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 356 ], 357 "cwd": "[START_DIR]/skia", 358 "env": { 359 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 360 "CHROME_HEADLESS": "1", 361 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 362 }, 363 "infra_step": true, 364 "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 365 }, 366 { 367 "cmd": [ 368 "/usr/bin/adb.1.0.35", 369 "shell", 370 "rm", 371 "-f", 372 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 373 ], 374 "cwd": "[START_DIR]/skia", 375 "env": { 376 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 377 "CHROME_HEADLESS": "1", 378 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 379 }, 380 "infra_step": true, 381 "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 382 }, 383 { 384 "cmd": [ 385 "/usr/bin/adb.1.0.35", 386 "shell", 387 "rm", 388 "-rf", 389 "/sdcard/revenge_of_the_skiabot/images" 390 ], 391 "cwd": "[START_DIR]/skia", 392 "env": { 393 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 394 "CHROME_HEADLESS": "1", 395 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 396 }, 397 "infra_step": true, 398 "name": "rm /sdcard/revenge_of_the_skiabot/images" 399 }, 400 { 401 "cmd": [ 402 "/usr/bin/adb.1.0.35", 403 "shell", 404 "mkdir", 405 "-p", 406 "/sdcard/revenge_of_the_skiabot/images" 407 ], 408 "cwd": "[START_DIR]/skia", 409 "env": { 410 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 411 "CHROME_HEADLESS": "1", 412 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 413 }, 414 "infra_step": true, 415 "name": "mkdir /sdcard/revenge_of_the_skiabot/images" 416 }, 417 { 418 "cmd": [ 419 "python", 420 "-u", 421 "\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", 422 "[START_DIR]/skimage", 423 "/sdcard/revenge_of_the_skiabot/images" 424 ], 425 "env": { 426 "CHROME_HEADLESS": "1", 427 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 428 }, 429 "infra_step": true, 430 "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images", 431 "~followup_annotations": [ 432 "@@@STEP_LOG_LINE@python.inline@@@@", 433 "@@@STEP_LOG_LINE@python.inline@import os@@@", 434 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 435 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 436 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 437 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 438 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 439 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 440 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 441 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 442 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 443 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 444 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 445 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 446 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 447 "@@@STEP_LOG_END@python.inline@@@" 448 ] 449 }, 450 { 451 "cmd": [ 452 "/usr/bin/adb.1.0.35", 453 "push", 454 "[START_DIR]/tmp/SK_IMAGE_VERSION", 455 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 456 ], 457 "cwd": "[START_DIR]/skia", 458 "env": { 459 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 460 "CHROME_HEADLESS": "1", 461 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 462 }, 463 "infra_step": true, 464 "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 465 }, 466 { 467 "cmd": [ 468 "python", 469 "-u", 470 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 471 "--json-output", 472 "/path/to/tmp/json", 473 "copy", 474 "[START_DIR]/skia/infra/bots/assets/svg/VERSION", 475 "/path/to/tmp/" 476 ], 477 "infra_step": true, 478 "name": "Get svg VERSION" 479 }, 480 { 481 "cmd": [ 482 "python", 483 "-u", 484 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 485 "--json-output", 486 "/path/to/tmp/json", 487 "copy", 488 "42", 489 "[START_DIR]/tmp/SVG_VERSION" 490 ], 491 "infra_step": true, 492 "name": "write SVG_VERSION", 493 "~followup_annotations": [ 494 "@@@STEP_LOG_LINE@SVG_VERSION@42@@@", 495 "@@@STEP_LOG_END@SVG_VERSION@@@" 496 ] 497 }, 498 { 499 "cmd": [ 500 "/usr/bin/adb.1.0.35", 501 "shell", 502 "cat", 503 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 504 ], 505 "cwd": "[START_DIR]/skia", 506 "env": { 507 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 508 "CHROME_HEADLESS": "1", 509 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 510 }, 511 "infra_step": true, 512 "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION" 513 }, 514 { 515 "cmd": [ 516 "/usr/bin/adb.1.0.35", 517 "shell", 518 "rm", 519 "-f", 520 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 521 ], 522 "cwd": "[START_DIR]/skia", 523 "env": { 524 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 525 "CHROME_HEADLESS": "1", 526 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 527 }, 528 "infra_step": true, 529 "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION" 530 }, 531 { 532 "cmd": [ 533 "/usr/bin/adb.1.0.35", 534 "shell", 535 "rm", 536 "-rf", 537 "/sdcard/revenge_of_the_skiabot/svgs" 538 ], 539 "cwd": "[START_DIR]/skia", 540 "env": { 541 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 542 "CHROME_HEADLESS": "1", 543 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 544 }, 545 "infra_step": true, 546 "name": "rm /sdcard/revenge_of_the_skiabot/svgs" 547 }, 548 { 549 "cmd": [ 550 "/usr/bin/adb.1.0.35", 551 "shell", 552 "mkdir", 553 "-p", 554 "/sdcard/revenge_of_the_skiabot/svgs" 555 ], 556 "cwd": "[START_DIR]/skia", 557 "env": { 558 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 559 "CHROME_HEADLESS": "1", 560 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 561 }, 562 "infra_step": true, 563 "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs" 564 }, 565 { 566 "cmd": [ 567 "python", 568 "-u", 569 "\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", 570 "[START_DIR]/svg", 571 "/sdcard/revenge_of_the_skiabot/svgs" 572 ], 573 "env": { 574 "CHROME_HEADLESS": "1", 575 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 576 }, 577 "infra_step": true, 578 "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs", 579 "~followup_annotations": [ 580 "@@@STEP_LOG_LINE@python.inline@@@@", 581 "@@@STEP_LOG_LINE@python.inline@import os@@@", 582 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 583 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 584 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 585 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 586 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 587 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 588 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 589 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 590 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 591 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 592 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 593 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 594 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 595 "@@@STEP_LOG_END@python.inline@@@" 596 ] 597 }, 598 { 599 "cmd": [ 600 "/usr/bin/adb.1.0.35", 601 "push", 602 "[START_DIR]/tmp/SVG_VERSION", 603 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 604 ], 605 "cwd": "[START_DIR]/skia", 606 "env": { 607 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 608 "CHROME_HEADLESS": "1", 609 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 610 }, 611 "infra_step": true, 612 "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION" 613 }, 614 { 615 "cmd": [ 616 "python", 617 "-u", 618 "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" 619 ], 620 "name": "get swarming task id", 621 "~followup_annotations": [ 622 "@@@STEP_LOG_LINE@python.inline@import os@@@", 623 "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", 624 "@@@STEP_LOG_END@python.inline@@@" 625 ] 626 }, 627 { 628 "cmd": [ 629 "python", 630 "-u", 631 "\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", 632 "/usr/bin/adb.1.0.35", 633 "0", 634 "1" 635 ], 636 "env": { 637 "CHROME_HEADLESS": "1", 638 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 639 }, 640 "infra_step": true, 641 "name": "Enabling CPU 0", 642 "timeout": 30, 643 "~followup_annotations": [ 644 "@@@STEP_LOG_LINE@python.inline@@@@", 645 "@@@STEP_LOG_LINE@python.inline@import os@@@", 646 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 647 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 648 "@@@STEP_LOG_LINE@python.inline@import time@@@", 649 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 650 "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", 651 "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", 652 "@@@STEP_LOG_LINE@python.inline@@@@", 653 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 654 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 655 "@@@STEP_LOG_LINE@python.inline@print log@@@", 656 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 657 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 658 "@@@STEP_LOG_LINE@python.inline@@@@", 659 "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", 660 "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", 661 "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", 662 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", 663 "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", 664 "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", 665 "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", 666 "@@@STEP_LOG_LINE@python.inline@@@@", 667 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", 668 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", 669 "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", 670 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", 671 "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", 672 "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", 673 "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", 674 "@@@STEP_LOG_END@python.inline@@@" 675 ] 676 }, 677 { 678 "cmd": [ 679 "python", 680 "-u", 681 "\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", 682 "/usr/bin/adb.1.0.35", 683 "1", 684 "1" 685 ], 686 "env": { 687 "CHROME_HEADLESS": "1", 688 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 689 }, 690 "infra_step": true, 691 "name": "Enabling CPU 1", 692 "timeout": 30, 693 "~followup_annotations": [ 694 "@@@STEP_LOG_LINE@python.inline@@@@", 695 "@@@STEP_LOG_LINE@python.inline@import os@@@", 696 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 697 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 698 "@@@STEP_LOG_LINE@python.inline@import time@@@", 699 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 700 "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", 701 "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", 702 "@@@STEP_LOG_LINE@python.inline@@@@", 703 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 704 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 705 "@@@STEP_LOG_LINE@python.inline@print log@@@", 706 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 707 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 708 "@@@STEP_LOG_LINE@python.inline@@@@", 709 "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", 710 "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", 711 "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", 712 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", 713 "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", 714 "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", 715 "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", 716 "@@@STEP_LOG_LINE@python.inline@@@@", 717 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", 718 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", 719 "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", 720 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", 721 "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", 722 "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", 723 "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", 724 "@@@STEP_LOG_END@python.inline@@@" 725 ] 726 }, 727 { 728 "cmd": [ 729 "python", 730 "-u", 731 "\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", 732 "/usr/bin/adb.1.0.35", 733 "2", 734 "ondemand" 735 ], 736 "env": { 737 "CHROME_HEADLESS": "1", 738 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 739 }, 740 "infra_step": true, 741 "name": "Set CPU 2's governor to ondemand", 742 "timeout": 30, 743 "~followup_annotations": [ 744 "@@@STEP_LOG_LINE@python.inline@@@@", 745 "@@@STEP_LOG_LINE@python.inline@import os@@@", 746 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 747 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 748 "@@@STEP_LOG_LINE@python.inline@import time@@@", 749 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 750 "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", 751 "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", 752 "@@@STEP_LOG_LINE@python.inline@@@@", 753 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 754 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 755 "@@@STEP_LOG_LINE@python.inline@print log@@@", 756 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 757 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 758 "@@@STEP_LOG_LINE@python.inline@@@@", 759 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", 760 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", 761 "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", 762 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", 763 "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", 764 "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", 765 "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", 766 "@@@STEP_LOG_END@python.inline@@@" 767 ] 768 }, 769 { 770 "cmd": [ 771 "python", 772 "-u", 773 "\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", 774 "/usr/bin/adb.1.0.35", 775 "0", 776 "ondemand" 777 ], 778 "env": { 779 "CHROME_HEADLESS": "1", 780 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 781 }, 782 "infra_step": true, 783 "name": "Set CPU 0's governor to ondemand", 784 "timeout": 30, 785 "~followup_annotations": [ 786 "@@@STEP_LOG_LINE@python.inline@@@@", 787 "@@@STEP_LOG_LINE@python.inline@import os@@@", 788 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 789 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 790 "@@@STEP_LOG_LINE@python.inline@import time@@@", 791 "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", 792 "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", 793 "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", 794 "@@@STEP_LOG_LINE@python.inline@@@@", 795 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", 796 "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", 797 "@@@STEP_LOG_LINE@python.inline@print log@@@", 798 "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", 799 "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", 800 "@@@STEP_LOG_LINE@python.inline@@@@", 801 "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", 802 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", 803 "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", 804 "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", 805 "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", 806 "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", 807 "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", 808 "@@@STEP_LOG_END@python.inline@@@" 809 ] 810 }, 811 { 812 "cmd": [ 813 "/usr/bin/adb.1.0.35", 814 "push", 815 "[START_DIR]/build/dm", 816 "/data/local/tmp/" 817 ], 818 "cwd": "[START_DIR]/skia", 819 "env": { 820 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 821 "CHROME_HEADLESS": "1", 822 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 823 }, 824 "infra_step": true, 825 "name": "push dm" 826 }, 827 { 828 "cmd": [ 829 "python", 830 "-u", 831 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 832 "--json-output", 833 "/path/to/tmp/json", 834 "copy", 835 "set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value Adreno530 extra_config Android_ASAN model Pixel os Android style default --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ image _ .pef _ image _ .srw _ image _ .ARW _ image _ .CR2 _ image _ .DNG _ image _ .NEF _ image _ .NRW _ image _ .ORF _ image _ .RAF _ image _ .RW2 _ image _ .PEF _ image _ .SRW --match ~BadImage --nonativeFonts --verbose; echo $? >/data/local/tmp/rc", 836 "[START_DIR]/tmp/dm.sh" 837 ], 838 "env": { 839 "CHROME_HEADLESS": "1", 840 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 841 }, 842 "infra_step": true, 843 "name": "write dm.sh", 844 "~followup_annotations": [ 845 "@@@STEP_LOG_LINE@dm.sh@set -x; /data/local/tmp/dm --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 builder Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN buildbucket_build_id 123454321 task_id task_12345 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value Adreno530 extra_config Android_ASAN model Pixel os Android style default --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ image _ .pef _ image _ .srw _ image _ .ARW _ image _ .CR2 _ image _ .DNG _ image _ .NEF _ image _ .NRW _ image _ .ORF _ image _ .RAF _ image _ .RW2 _ image _ .PEF _ image _ .SRW --match ~BadImage --nonativeFonts --verbose; echo $? >/data/local/tmp/rc@@@", 846 "@@@STEP_LOG_END@dm.sh@@@" 847 ] 848 }, 849 { 850 "cmd": [ 851 "/usr/bin/adb.1.0.35", 852 "push", 853 "[START_DIR]/tmp/dm.sh", 854 "/data/local/tmp/" 855 ], 856 "cwd": "[START_DIR]/skia", 857 "env": { 858 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 859 "CHROME_HEADLESS": "1", 860 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 861 }, 862 "infra_step": true, 863 "name": "push dm.sh" 864 }, 865 { 866 "cmd": [ 867 "/usr/bin/adb.1.0.35", 868 "logcat", 869 "-c" 870 ], 871 "cwd": "[START_DIR]/skia", 872 "env": { 873 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 874 "CHROME_HEADLESS": "1", 875 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 876 }, 877 "infra_step": true, 878 "name": "clear log" 879 }, 880 { 881 "cmd": [ 882 "python", 883 "-u", 884 "\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", 885 "/data/local/tmp/", 886 "dm.sh" 887 ], 888 "env": { 889 "CHROME_HEADLESS": "1", 890 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 891 }, 892 "name": "dm", 893 "~followup_annotations": [ 894 "@@@STEP_LOG_LINE@python.inline@@@@", 895 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 896 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 897 "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@", 898 "@@@STEP_LOG_LINE@python.inline@sh = sys.argv[2]@@@", 899 "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])@@@", 900 "@@@STEP_LOG_LINE@python.inline@try:@@@", 901 "@@@STEP_LOG_LINE@python.inline@ sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',@@@", 902 "@@@STEP_LOG_LINE@python.inline@ bin_dir + 'rc'])))@@@", 903 "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@", 904 "@@@STEP_LOG_LINE@python.inline@ print \"Couldn't read the return code. Probably killed for OOM.\"@@@", 905 "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", 906 "@@@STEP_LOG_END@python.inline@@@" 907 ] 908 }, 909 { 910 "cmd": [ 911 "/usr/bin/adb.1.0.35", 912 "wait-for-device" 913 ], 914 "env": { 915 "CHROME_HEADLESS": "1", 916 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 917 }, 918 "infra_step": true, 919 "name": "wait for device before uninstalling ASAN", 920 "timeout": 180 921 }, 922 { 923 "cmd": [ 924 "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/8.0.2/bin/asan_device_setup", 925 "--revert" 926 ], 927 "env": { 928 "CHROME_HEADLESS": "1", 929 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 930 }, 931 "infra_step": true, 932 "name": "uninstall ASAN", 933 "timeout": 300 934 }, 935 { 936 "cmd": [ 937 "python", 938 "-u", 939 "\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", 940 "[START_DIR]/build" 941 ], 942 "env": { 943 "CHROME_HEADLESS": "1", 944 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 945 }, 946 "infra_step": true, 947 "name": "dump log", 948 "timeout": 300, 949 "~followup_annotations": [ 950 "@@@STEP_LOG_LINE@python.inline@@@@", 951 "@@@STEP_LOG_LINE@python.inline@import os@@@", 952 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 953 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 954 "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@", 955 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])@@@", 956 "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@", 957 "@@@STEP_LOG_LINE@python.inline@ tokens = line.split()@@@", 958 "@@@STEP_LOG_LINE@python.inline@ if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@", 959 "@@@STEP_LOG_LINE@python.inline@ addr, path = tokens[-2:]@@@", 960 "@@@STEP_LOG_LINE@python.inline@ local = os.path.join(out, os.path.basename(path))@@@", 961 "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(local):@@@", 962 "@@@STEP_LOG_LINE@python.inline@ sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@", 963 "@@@STEP_LOG_LINE@python.inline@ line = line.replace(addr, addr + ' ' + sym.strip())@@@", 964 "@@@STEP_LOG_LINE@python.inline@ print line@@@", 965 "@@@STEP_LOG_END@python.inline@@@" 966 ] 967 }, 968 { 969 "cmd": [ 970 "/usr/bin/adb.1.0.35", 971 "kill-server" 972 ], 973 "cwd": "[START_DIR]/skia", 974 "env": { 975 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 976 "CHROME_HEADLESS": "1", 977 "PATH": "<PATH>:RECIPE_REPO[depot_tools]" 978 }, 979 "infra_step": true, 980 "name": "kill adb server" 981 }, 982 { 983 "name": "$result" 984 } 985]