Home | History | Annotate | Download | only in full.expected
      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       "/opt/infra-android/tools/adb",
     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       "/opt/infra-android/tools/adb",
     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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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(['/opt/infra-android/tools/adb', '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(['/opt/infra-android/tools/adb', '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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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(['/opt/infra-android/tools/adb', '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(['/opt/infra-android/tools/adb', '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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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(['/opt/infra-android/tools/adb', '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(['/opt/infra-android/tools/adb', '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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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       "/opt/infra-android/tools/adb",
    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(['/opt/infra-android/tools/adb', '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(['/opt/infra-android/tools/adb', '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       "/opt/infra-android/tools/adb",
    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])\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",
    646       "/opt/infra-android/tools/adb",
    647       "0",
    648       "1"
    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": "Enabling CPU 0",
    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@value = int(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@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
    676       "@@@STEP_LOG_LINE (a] python.inline@# So, check the value before trying to write it.@@@",
    677       "@@@STEP_LOG_LINE (a] python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    678       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    679       "@@@STEP_LOG_LINE (a] python.inline@if prior_status == str(value):@@@",
    680       "@@@STEP_LOG_LINE (a] python.inline@  print 'CPU %d online already %d' % (cpu, value)@@@",
    681       "@@@STEP_LOG_LINE (a] python.inline@  sys.exit()@@@",
    682       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    683       "@@@STEP_LOG_LINE (a] python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
    684       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
    685       "@@@STEP_LOG_LINE (a] python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    686       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    687       "@@@STEP_LOG_LINE (a] python.inline@if actual_status != str(value):@@@",
    688       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
    689       "@@@STEP_LOG_LINE (a] python.inline@                  % (actual_status, value))@@@",
    690       "@@@STEP_LOG_END (a] python.inline@@@"
    691     ]
    692   },
    693   {
    694     "cmd": [
    695       "python",
    696       "-u",
    697       "\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",
    698       "/opt/infra-android/tools/adb",
    699       "1",
    700       "1"
    701     ],
    702     "env": {
    703       "BUILDTYPE": "Debug",
    704       "CHROME_HEADLESS": "1",
    705       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    706       "SKIA_OUT": "[START_DIR]/out"
    707     },
    708     "infra_step": true,
    709     "name": "Enabling CPU 1",
    710     "timeout": 30,
    711     "~followup_annotations": [
    712       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    713       "@@@STEP_LOG_LINE (a] python.inline@import os@@@",
    714       "@@@STEP_LOG_LINE (a] python.inline@import subprocess@@@",
    715       "@@@STEP_LOG_LINE (a] python.inline@import sys@@@",
    716       "@@@STEP_LOG_LINE (a] python.inline@import time@@@",
    717       "@@@STEP_LOG_LINE (a] python.inline@ADB = sys.argv[1]@@@",
    718       "@@@STEP_LOG_LINE (a] python.inline@cpu = int(sys.argv[2])@@@",
    719       "@@@STEP_LOG_LINE (a] python.inline@value = int(sys.argv[3])@@@",
    720       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    721       "@@@STEP_LOG_LINE (a] python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
    722       "@@@STEP_LOG_LINE (a] python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
    723       "@@@STEP_LOG_LINE (a] python.inline@print log@@@",
    724       "@@@STEP_LOG_LINE (a] python.inline@if 'cannot' in log:@@@",
    725       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('adb root failed')@@@",
    726       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    727       "@@@STEP_LOG_LINE (a] python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
    728       "@@@STEP_LOG_LINE (a] python.inline@# So, check the value before trying to write it.@@@",
    729       "@@@STEP_LOG_LINE (a] python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    730       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    731       "@@@STEP_LOG_LINE (a] python.inline@if prior_status == str(value):@@@",
    732       "@@@STEP_LOG_LINE (a] python.inline@  print 'CPU %d online already %d' % (cpu, value)@@@",
    733       "@@@STEP_LOG_LINE (a] python.inline@  sys.exit()@@@",
    734       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    735       "@@@STEP_LOG_LINE (a] python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
    736       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
    737       "@@@STEP_LOG_LINE (a] python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    738       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    739       "@@@STEP_LOG_LINE (a] python.inline@if actual_status != str(value):@@@",
    740       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
    741       "@@@STEP_LOG_LINE (a] python.inline@                  % (actual_status, value))@@@",
    742       "@@@STEP_LOG_END (a] 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       "2",
    752       "1"
    753     ],
    754     "env": {
    755       "BUILDTYPE": "Debug",
    756       "CHROME_HEADLESS": "1",
    757       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    758       "SKIA_OUT": "[START_DIR]/out"
    759     },
    760     "infra_step": true,
    761     "name": "Enabling CPU 2",
    762     "timeout": 30,
    763     "~followup_annotations": [
    764       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    765       "@@@STEP_LOG_LINE (a] python.inline@import os@@@",
    766       "@@@STEP_LOG_LINE (a] python.inline@import subprocess@@@",
    767       "@@@STEP_LOG_LINE (a] python.inline@import sys@@@",
    768       "@@@STEP_LOG_LINE (a] python.inline@import time@@@",
    769       "@@@STEP_LOG_LINE (a] python.inline@ADB = sys.argv[1]@@@",
    770       "@@@STEP_LOG_LINE (a] python.inline@cpu = int(sys.argv[2])@@@",
    771       "@@@STEP_LOG_LINE (a] python.inline@value = int(sys.argv[3])@@@",
    772       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    773       "@@@STEP_LOG_LINE (a] python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
    774       "@@@STEP_LOG_LINE (a] python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
    775       "@@@STEP_LOG_LINE (a] python.inline@print log@@@",
    776       "@@@STEP_LOG_LINE (a] python.inline@if 'cannot' in log:@@@",
    777       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('adb root failed')@@@",
    778       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    779       "@@@STEP_LOG_LINE (a] python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
    780       "@@@STEP_LOG_LINE (a] python.inline@# So, check the value before trying to write it.@@@",
    781       "@@@STEP_LOG_LINE (a] python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    782       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    783       "@@@STEP_LOG_LINE (a] python.inline@if prior_status == str(value):@@@",
    784       "@@@STEP_LOG_LINE (a] python.inline@  print 'CPU %d online already %d' % (cpu, value)@@@",
    785       "@@@STEP_LOG_LINE (a] python.inline@  sys.exit()@@@",
    786       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    787       "@@@STEP_LOG_LINE (a] python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
    788       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
    789       "@@@STEP_LOG_LINE (a] python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    790       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    791       "@@@STEP_LOG_LINE (a] python.inline@if actual_status != str(value):@@@",
    792       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
    793       "@@@STEP_LOG_LINE (a] python.inline@                  % (actual_status, value))@@@",
    794       "@@@STEP_LOG_END (a] python.inline@@@"
    795     ]
    796   },
    797   {
    798     "cmd": [
    799       "python",
    800       "-u",
    801       "\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",
    802       "/opt/infra-android/tools/adb",
    803       "3",
    804       "1"
    805     ],
    806     "env": {
    807       "BUILDTYPE": "Debug",
    808       "CHROME_HEADLESS": "1",
    809       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    810       "SKIA_OUT": "[START_DIR]/out"
    811     },
    812     "infra_step": true,
    813     "name": "Enabling CPU 3",
    814     "timeout": 30,
    815     "~followup_annotations": [
    816       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    817       "@@@STEP_LOG_LINE (a] python.inline@import os@@@",
    818       "@@@STEP_LOG_LINE (a] python.inline@import subprocess@@@",
    819       "@@@STEP_LOG_LINE (a] python.inline@import sys@@@",
    820       "@@@STEP_LOG_LINE (a] python.inline@import time@@@",
    821       "@@@STEP_LOG_LINE (a] python.inline@ADB = sys.argv[1]@@@",
    822       "@@@STEP_LOG_LINE (a] python.inline@cpu = int(sys.argv[2])@@@",
    823       "@@@STEP_LOG_LINE (a] python.inline@value = int(sys.argv[3])@@@",
    824       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    825       "@@@STEP_LOG_LINE (a] python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
    826       "@@@STEP_LOG_LINE (a] python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
    827       "@@@STEP_LOG_LINE (a] python.inline@print log@@@",
    828       "@@@STEP_LOG_LINE (a] python.inline@if 'cannot' in log:@@@",
    829       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('adb root failed')@@@",
    830       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    831       "@@@STEP_LOG_LINE (a] python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
    832       "@@@STEP_LOG_LINE (a] python.inline@# So, check the value before trying to write it.@@@",
    833       "@@@STEP_LOG_LINE (a] python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    834       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    835       "@@@STEP_LOG_LINE (a] python.inline@if prior_status == str(value):@@@",
    836       "@@@STEP_LOG_LINE (a] python.inline@  print 'CPU %d online already %d' % (cpu, value)@@@",
    837       "@@@STEP_LOG_LINE (a] python.inline@  sys.exit()@@@",
    838       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    839       "@@@STEP_LOG_LINE (a] python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
    840       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
    841       "@@@STEP_LOG_LINE (a] python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    842       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
    843       "@@@STEP_LOG_LINE (a] python.inline@if actual_status != str(value):@@@",
    844       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
    845       "@@@STEP_LOG_LINE (a] python.inline@                  % (actual_status, value))@@@",
    846       "@@@STEP_LOG_END (a] python.inline@@@"
    847     ]
    848   },
    849   {
    850     "cmd": [
    851       "python",
    852       "-u",
    853       "\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",
    854       "/opt/infra-android/tools/adb",
    855       "4",
    856       "ondemand"
    857     ],
    858     "env": {
    859       "BUILDTYPE": "Debug",
    860       "CHROME_HEADLESS": "1",
    861       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    862       "SKIA_OUT": "[START_DIR]/out"
    863     },
    864     "infra_step": true,
    865     "name": "Set CPU 4's governor to ondemand",
    866     "timeout": 30,
    867     "~followup_annotations": [
    868       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    869       "@@@STEP_LOG_LINE (a] python.inline@import os@@@",
    870       "@@@STEP_LOG_LINE (a] python.inline@import subprocess@@@",
    871       "@@@STEP_LOG_LINE (a] python.inline@import sys@@@",
    872       "@@@STEP_LOG_LINE (a] python.inline@import time@@@",
    873       "@@@STEP_LOG_LINE (a] python.inline@ADB = sys.argv[1]@@@",
    874       "@@@STEP_LOG_LINE (a] python.inline@cpu = int(sys.argv[2])@@@",
    875       "@@@STEP_LOG_LINE (a] python.inline@gov = sys.argv[3]@@@",
    876       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    877       "@@@STEP_LOG_LINE (a] python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
    878       "@@@STEP_LOG_LINE (a] python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
    879       "@@@STEP_LOG_LINE (a] python.inline@print log@@@",
    880       "@@@STEP_LOG_LINE (a] python.inline@if 'cannot' in log:@@@",
    881       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('adb root failed')@@@",
    882       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    883       "@@@STEP_LOG_LINE (a] python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@",
    884       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@",
    885       "@@@STEP_LOG_LINE (a] python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    886       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@",
    887       "@@@STEP_LOG_LINE (a] python.inline@if actual_gov != gov:@@@",
    888       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('(actual, expected) (%s, %s)'@@@",
    889       "@@@STEP_LOG_LINE (a] python.inline@                  % (actual_gov, gov))@@@",
    890       "@@@STEP_LOG_END (a] python.inline@@@"
    891     ]
    892   },
    893   {
    894     "cmd": [
    895       "python",
    896       "-u",
    897       "\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",
    898       "/opt/infra-android/tools/adb",
    899       "0",
    900       "ondemand"
    901     ],
    902     "env": {
    903       "BUILDTYPE": "Debug",
    904       "CHROME_HEADLESS": "1",
    905       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    906       "SKIA_OUT": "[START_DIR]/out"
    907     },
    908     "infra_step": true,
    909     "name": "Set CPU 0's governor to ondemand",
    910     "timeout": 30,
    911     "~followup_annotations": [
    912       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    913       "@@@STEP_LOG_LINE (a] python.inline@import os@@@",
    914       "@@@STEP_LOG_LINE (a] python.inline@import subprocess@@@",
    915       "@@@STEP_LOG_LINE (a] python.inline@import sys@@@",
    916       "@@@STEP_LOG_LINE (a] python.inline@import time@@@",
    917       "@@@STEP_LOG_LINE (a] python.inline@ADB = sys.argv[1]@@@",
    918       "@@@STEP_LOG_LINE (a] python.inline@cpu = int(sys.argv[2])@@@",
    919       "@@@STEP_LOG_LINE (a] python.inline@gov = sys.argv[3]@@@",
    920       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    921       "@@@STEP_LOG_LINE (a] python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
    922       "@@@STEP_LOG_LINE (a] python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
    923       "@@@STEP_LOG_LINE (a] python.inline@print log@@@",
    924       "@@@STEP_LOG_LINE (a] python.inline@if 'cannot' in log:@@@",
    925       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('adb root failed')@@@",
    926       "@@@STEP_LOG_LINE (a] python.inline@@@@",
    927       "@@@STEP_LOG_LINE (a] python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@",
    928       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@",
    929       "@@@STEP_LOG_LINE (a] python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@",
    930       "@@@STEP_LOG_LINE (a] python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@",
    931       "@@@STEP_LOG_LINE (a] python.inline@if actual_gov != gov:@@@",
    932       "@@@STEP_LOG_LINE (a] python.inline@  raise Exception('(actual, expected) (%s, %s)'@@@",
    933       "@@@STEP_LOG_LINE (a] python.inline@                  % (actual_gov, gov))@@@",
    934       "@@@STEP_LOG_END (a] python.inline@@@"
    935     ]
    936   },
    937   {
    938     "cmd": [
    939       "/opt/infra-android/tools/adb",
    940       "push",
    941       "[START_DIR]/out/Debug/dm",
    942       "/data/local/tmp/"
    943     ],
    944     "cwd": "[START_DIR]/skia",
    945     "env": {
    946       "BUILDTYPE": "Debug",
    947       "CHROME_HEADLESS": "1",
    948       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    949       "SKIA_OUT": "[START_DIR]/out"
    950     },
    951     "infra_step": true,
    952     "name": "push dm"
    953   },
    954   {
    955     "cmd": [
    956       "python",
    957       "-u",
    958       "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
    959       "--json-output",
    960       "/path/to/tmp/json",
    961       "copy",
    962       "set -x; /data/local/tmp/dm --some-flag; echo $? >/data/local/tmp/rc",
    963       "[START_DIR]/tmp/dm.sh"
    964     ],
    965     "infra_step": true,
    966     "name": "write dm.sh"
    967   },
    968   {
    969     "cmd": [
    970       "/opt/infra-android/tools/adb",
    971       "push",
    972       "[START_DIR]/tmp/dm.sh",
    973       "/data/local/tmp/"
    974     ],
    975     "cwd": "[START_DIR]/skia",
    976     "env": {
    977       "BUILDTYPE": "Debug",
    978       "CHROME_HEADLESS": "1",
    979       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    980       "SKIA_OUT": "[START_DIR]/out"
    981     },
    982     "infra_step": true,
    983     "name": "push dm.sh"
    984   },
    985   {
    986     "cmd": [
    987       "/opt/infra-android/tools/adb",
    988       "logcat",
    989       "-c"
    990     ],
    991     "cwd": "[START_DIR]/skia",
    992     "env": {
    993       "BUILDTYPE": "Debug",
    994       "CHROME_HEADLESS": "1",
    995       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
    996       "SKIA_OUT": "[START_DIR]/out"
    997     },
    998     "infra_step": true,
    999     "name": "clear log"
   1000   },
   1001   {
   1002     "cmd": [
   1003       "python",
   1004       "-u",
   1005       "\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",
   1006       "/data/local/tmp/",
   1007       "dm.sh"
   1008     ],
   1009     "name": "dm",
   1010     "~followup_annotations": [
   1011       "@@@STEP_LOG_LINE (a] python.inline@@@@",
   1012       "@@@STEP_LOG_LINE (a] python.inline@import subprocess@@@",
   1013       "@@@STEP_LOG_LINE (a] python.inline@import sys@@@",
   1014       "@@@STEP_LOG_LINE (a] python.inline@bin_dir = sys.argv[1]@@@",
   1015       "@@@STEP_LOG_LINE (a] python.inline@sh      = sys.argv[2]@@@",
   1016       "@@@STEP_LOG_LINE (a] python.inline@subprocess.check_call(['/opt/infra-android/tools/adb', 'shell', 'sh', bin_dir + sh])@@@",
   1017       "@@@STEP_LOG_LINE (a] python.inline@try:@@@",
   1018       "@@@STEP_LOG_LINE (a] python.inline@  sys.exit(int(subprocess.check_output(['/opt/infra-android/tools/adb', 'shell', 'cat',@@@",
   1019       "@@@STEP_LOG_LINE (a] python.inline@                                        bin_dir + 'rc'])))@@@",
   1020       "@@@STEP_LOG_LINE (a] python.inline@except ValueError:@@@",
   1021       "@@@STEP_LOG_LINE (a] python.inline@  print \"Couldn't read the return code.  Probably killed for OOM.\"@@@",
   1022       "@@@STEP_LOG_LINE (a] python.inline@  sys.exit(1)@@@",
   1023       "@@@STEP_LOG_END (a] python.inline@@@"
   1024     ]
   1025   },
   1026   {
   1027     "cmd": [
   1028       "/opt/infra-android/tools/adb",
   1029       "pull",
   1030       "/sdcard/revenge_of_the_skiabot/dm_out",
   1031       "[CUSTOM_[SWARM_OUT_DIR]]/dm"
   1032     ],
   1033     "cwd": "[START_DIR]/skia",
   1034     "env": {
   1035       "BUILDTYPE": "Debug",
   1036       "CHROME_HEADLESS": "1",
   1037       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
   1038       "SKIA_OUT": "[START_DIR]/out"
   1039     },
   1040     "infra_step": true,
   1041     "name": "pull /sdcard/revenge_of_the_skiabot/dm_out [CUSTOM_[SWARM_OUT_DIR]]/dm"
   1042   },
   1043   {
   1044     "cmd": [
   1045       "python",
   1046       "-u",
   1047       "\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",
   1048       "[START_DIR]/out/Debug"
   1049     ],
   1050     "env": {
   1051       "BUILDTYPE": "Debug",
   1052       "CHROME_HEADLESS": "1",
   1053       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
   1054       "SKIA_OUT": "[START_DIR]/out"
   1055     },
   1056     "infra_step": true,
   1057     "name": "dump log",
   1058     "timeout": 300,
   1059     "~followup_annotations": [
   1060       "@@@STEP_LOG_LINE (a] python.inline@@@@",
   1061       "@@@STEP_LOG_LINE (a] python.inline@import os@@@",
   1062       "@@@STEP_LOG_LINE (a] python.inline@import subprocess@@@",
   1063       "@@@STEP_LOG_LINE (a] python.inline@import sys@@@",
   1064       "@@@STEP_LOG_LINE (a] python.inline@out = sys.argv[1]@@@",
   1065       "@@@STEP_LOG_LINE (a] python.inline@log = subprocess.check_output(['/opt/infra-android/tools/adb', 'logcat', '-d'])@@@",
   1066       "@@@STEP_LOG_LINE (a] python.inline@for line in log.split('\\n'):@@@",
   1067       "@@@STEP_LOG_LINE (a] python.inline@  tokens = line.split()@@@",
   1068       "@@@STEP_LOG_LINE (a] python.inline@  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
   1069       "@@@STEP_LOG_LINE (a] python.inline@    addr, path = tokens[-2:]@@@",
   1070       "@@@STEP_LOG_LINE (a] python.inline@    local = os.path.join(out, os.path.basename(path))@@@",
   1071       "@@@STEP_LOG_LINE (a] python.inline@    if os.path.exists(local):@@@",
   1072       "@@@STEP_LOG_LINE (a] python.inline@      sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@",
   1073       "@@@STEP_LOG_LINE (a] python.inline@      line = line.replace(addr, addr + ' ' + sym.strip())@@@",
   1074       "@@@STEP_LOG_LINE (a] python.inline@  print line@@@",
   1075       "@@@STEP_LOG_END (a] python.inline@@@"
   1076     ]
   1077   },
   1078   {
   1079     "cmd": [
   1080       "/opt/infra-android/tools/adb",
   1081       "kill-server"
   1082     ],
   1083     "cwd": "[START_DIR]/skia",
   1084     "env": {
   1085       "BUILDTYPE": "Debug",
   1086       "CHROME_HEADLESS": "1",
   1087       "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
   1088       "SKIA_OUT": "[START_DIR]/out"
   1089     },
   1090     "infra_step": true,
   1091     "name": "kill adb server"
   1092   },
   1093   {
   1094     "name": "$result",
   1095     "recipe_result": null,
   1096     "status_code": 0
   1097   }
   1098 ]