Home | History | Annotate | Download | only in recipes
      1 # Copyright 2016 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 
      6 # Recipe for Skia skpbench.
      7 
      8 
      9 import calendar
     10 
     11 
     12 DEPS = [
     13   'core',
     14   'flavor',
     15   'recipe_engine/context',
     16   'recipe_engine/file',
     17   'recipe_engine/path',
     18   'recipe_engine/properties',
     19   'recipe_engine/python',
     20   'recipe_engine/raw_io',
     21   'recipe_engine/step',
     22   'recipe_engine/time',
     23   'run',
     24   'vars',
     25 ]
     26 
     27 ADB_BINARY = 'adb.1.0.35'
     28 
     29 
     30 def _run(api, title, *cmd, **kwargs):
     31   with api.context(cwd=api.vars.skia_dir):
     32     return api.run(api.step, title, cmd=list(cmd), **kwargs)
     33 
     34 
     35 def _adb(api, title, *cmd, **kwargs):
     36   if 'infra_step' not in kwargs:
     37     kwargs['infra_step'] = True
     38   return _run(api, title, ADB_BINARY, *cmd, **kwargs)
     39 
     40 
     41 def skpbench_steps(api):
     42   """benchmark Skia using skpbench."""
     43   app = api.vars.skia_out.join(api.vars.configuration, 'skpbench')
     44   _adb(api, 'push skpbench', 'push', app, api.vars.android_bin_dir)
     45 
     46   skpbench_dir = api.vars.slave_dir.join('skia', 'tools', 'skpbench')
     47   table = api.path.join(api.vars.swarming_out_dir, 'table')
     48 
     49   if 'Vulkan' in api.vars.builder_name:
     50     config = 'vk'
     51   else:
     52     config = 'gles'
     53 
     54   skpbench_args = [
     55         api.path.join(api.vars.android_bin_dir, 'skpbench'),
     56         '--adb',
     57         '--adb_binary', ADB_BINARY,
     58         '--resultsfile', table,
     59         '--config', config,
     60         # TODO(dogben): Track down what's causing bots to die.
     61         '-v5']
     62   if 'CCPR' in api.vars.builder_name:
     63     skpbench_args += [
     64         '--pr', 'ccpr',
     65         '--nocache',
     66         api.path.join(api.vars.android_data_dir, 'skps/desk_*svg.skp'),
     67         api.path.join(api.vars.android_data_dir, 'skps/desk_chalkboard.skp')]
     68   else:
     69     skpbench_args += [
     70         api.path.join(api.vars.android_data_dir, 'skps')]
     71 
     72   api.run(api.python, 'skpbench',
     73       script=skpbench_dir.join('skpbench.py'),
     74       args=skpbench_args)
     75 
     76   skiaperf_args = [
     77     table,
     78     '--properties',
     79     'gitHash',      api.vars.got_revision,
     80   ]
     81   if api.vars.is_trybot:
     82     skiaperf_args.extend([
     83       'issue',    api.vars.issue,
     84       'patchset', api.vars.patchset,
     85       'patch_storage', api.vars.patch_storage,
     86     ])
     87 
     88   skiaperf_args.extend(['swarming_bot_id', api.vars.swarming_bot_id])
     89   skiaperf_args.extend(['swarming_task_id', api.vars.swarming_task_id])
     90 
     91   now = api.time.utcnow()
     92   ts = int(calendar.timegm(now.utctimetuple()))
     93   api.file.ensure_directory('makedirs perf_dir', api.vars.perf_data_dir)
     94   json_path = api.path.join(
     95       api.vars.perf_data_dir,
     96       'skpbench_%s_%d.json' % (api.vars.got_revision, ts))
     97 
     98   skiaperf_args.extend([
     99     '--outfile', json_path
    100   ])
    101 
    102   keys_blacklist = ['configuration', 'role', 'is_trybot']
    103   skiaperf_args.append('--key')
    104   for k in sorted(api.vars.builder_cfg.keys()):
    105     if not k in keys_blacklist:
    106       skiaperf_args.extend([k, api.vars.builder_cfg[k]])
    107 
    108   api.run(api.python, 'Parse skpbench output into Perf json',
    109       script=skpbench_dir.join('skiaperf.py'),
    110       args=skiaperf_args)
    111 
    112 
    113 def RunSteps(api):
    114   api.core.setup()
    115   try:
    116     api.flavor.install(skps=True)
    117     skpbench_steps(api)
    118   finally:
    119     api.flavor.cleanup_steps()
    120   api.run.check_failure()
    121 
    122 
    123 TEST_BUILDERS = [
    124   'Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-All-Android_Skpbench',
    125   ('Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-All-'
    126    'Android_Vulkan_Skpbench'),
    127   ('Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-'
    128    'Android_CCPR_Skpbench'),
    129 ]
    130 
    131 
    132 def GenTests(api):
    133   for builder in TEST_BUILDERS:
    134     test = (
    135       api.test(builder) +
    136       api.properties(buildername=builder,
    137                      revision='abc123',
    138                      path_config='kitchen',
    139                      swarm_out_dir='[SWARM_OUT_DIR]') +
    140       api.path.exists(
    141           api.path['start_dir'].join('skia'),
    142           api.path['start_dir'].join('skia', 'infra', 'bots', 'assets',
    143                                      'skp', 'VERSION'),
    144       ) +
    145       api.step_data('get swarming bot id',
    146           stdout=api.raw_io.output('skia-bot-123')) +
    147       api.step_data('get swarming task id',
    148           stdout=api.raw_io.output('123456'))
    149     )
    150 
    151     yield test
    152 
    153   b = ('Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-All-'
    154        'Android_Skpbench')
    155   yield (
    156     api.test('trybot') +
    157     api.properties(buildername=b,
    158                    revision='abc123',
    159                    path_config='kitchen',
    160                    swarm_out_dir='[SWARM_OUT_DIR]') +
    161     api.path.exists(
    162         api.path['start_dir'].join('skia'),
    163         api.path['start_dir'].join('skia', 'infra', 'bots', 'assets',
    164                                    'skp', 'VERSION'),
    165     ) +
    166     api.step_data('get swarming bot id',
    167         stdout=api.raw_io.output('skia-bot-123')) +
    168     api.step_data('get swarming task id',
    169         stdout=api.raw_io.output('123456')) +
    170     api.properties(patch_storage='gerrit') +
    171     api.properties.tryserver(
    172         buildername=b,
    173         gerrit_project='skia',
    174         gerrit_url='https://skia-review.googlesource.com/',
    175     )
    176   )
    177