41def skpbench_steps(api):
42 """benchmark Skia using skpbench."""
43 is_vulkan = 'Vulkan' in api.vars.builder_name
44 is_metal = 'Metal' in api.vars.builder_name
45 is_android = 'Android' in api.vars.builder_name
46 is_apple_m1 = 'AppleM1' in api.vars.builder_name
47 is_all_paths_volatile = 'AllPathsVolatile' in api.vars.builder_name
48 is_mskp = 'Mskp' in api.vars.builder_name
49 is_ddl = 'DDL' in api.vars.builder_name
50 is_9x9 = '9x9' in api.vars.builder_name
51
52 api.file.ensure_directory(
53 'makedirs perf_dir', api.flavor.host_dirs.perf_data_dir)
54
55 if is_android:
56 app = api.vars.build_dir.join('skpbench')
57 _adb(api, 'push skpbench', 'push', app, api.flavor.device_dirs.bin_dir)
58
59 skpbench_dir = api.vars.workdir.join('skia', 'tools', 'skpbench')
60 table = api.path.join(api.vars.swarming_out_dir, 'table')
61
62 if is_vulkan:
63 config = 'vk'
64 elif is_metal:
65 config = 'mtl'
66 elif is_android:
67 config = 'gles'
68 if "MaliG77" in api.vars.builder_name:
69 config = 'glesdmsaa,' + config
70 else:
71 config = 'gl'
72 if "QuadroP400" in api.vars.builder_name or is_apple_m1:
73 config = 'gldmsaa,' + config
74
75 internal_samples = 4 if is_android or is_apple_m1 else 8
76
77 if is_all_paths_volatile:
78 config = "%smsaa%i" % (config, internal_samples)
79
80 skpbench_invocation = api.path.join(api.flavor.device_dirs.bin_dir, 'skpbench')
81
82
83 if is_vulkan and 'GalaxyS20' in api.vars.builder_name:
84 skpbench_invocation = "LD_LIBRARY_PATH=/data/local/tmp %s" % skpbench_invocation
85
86 skpbench_args = [
87 skpbench_invocation,
88 '--resultsfile', table,
89 '--config', config,
90 '--internalSamples', str(internal_samples),
91
92 '-v5']
93 if is_ddl:
94 skpbench_args += ['--ddl']
95
96 skpbench_args += ['--gpuThreads', '0']
97 if is_9x9:
98 skpbench_args += [
99 '--ddlNumRecordingThreads', 9,
100 '--ddlTilingWidthHeight', 3]
101 if is_android:
102 skpbench_args += [
103 '--adb',
104 '--adb_binary', ADB_BINARY]
105 if is_mskp:
106 skpbench_args += [api.flavor.device_dirs.mskp_dir]
107 elif is_all_paths_volatile:
108 skpbench_args += [
109 '--allPathsVolatile',
110 '--suffix', "_volatile",
111 api.path.join(api.flavor.device_dirs.skp_dir, 'desk_*svg.skp'),
112 api.path.join(api.flavor.device_dirs.skp_dir, 'desk_motionmark*.skp'),
113 api.path.join(api.flavor.device_dirs.skp_dir, 'desk_chalkboard.skp')]
114 else:
115 skpbench_args += [api.flavor.device_dirs.skp_dir]
116
117 if api.properties.get('dont_reduce_ops_task_splitting') == 'true':
118 skpbench_args += ['--dontReduceOpsTaskSplitting']
119
120 api.run(api.step, 'skpbench',
121 cmd=['python3', skpbench_dir.join('skpbench.py')] + skpbench_args)
122
123 skiaperf_args = [
124 table,
125 '--properties',
126 'gitHash', api.properties['revision'],
127 ]
128 if api.vars.is_trybot:
129 skiaperf_args.extend([
130 'issue', api.vars.issue,
131 'patchset', api.vars.patchset,
132 'patch_storage', api.vars.patch_storage,
133 ])
134
135 skiaperf_args.extend(['swarming_bot_id', api.vars.swarming_bot_id])
136 skiaperf_args.extend(['swarming_task_id', api.vars.swarming_task_id])
137
138 now = api.time.utcnow()
139 ts =
int(calendar.timegm(now.utctimetuple()))
140 json_path = api.path.join(
141 api.flavor.host_dirs.perf_data_dir,
142 'skpbench_%s_%d.json' % (api.properties['revision'], ts))
143
144 skiaperf_args.extend([
145 '--outfile', json_path
146 ])
147
148 skiaperf_args.append('--key')
149 for k in sorted(api.vars.builder_cfg.keys()):
150 if not k in ['configuration', 'role', 'is_trybot']:
151 skiaperf_args.extend([k, api.vars.builder_cfg[k]])
152
153 api.run(api.step, 'Parse skpbench output into Perf json',
154 cmd=['python3', skpbench_dir.join('skiaperf.py')] + skiaperf_args)
155
156
Type::kYUV Type::kRGBA() int(0.7 *637)