• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
9import calendar
10
11
12DEPS = [
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
27ADB_BINARY = 'adb.1.0.35'
28
29
30def _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
35def _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
41def 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
113def 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
123TEST_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
132def 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