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