blob: f93268be0257f815d9f9926241b62d96171f6ac4 [file] [log] [blame]
borenet1e37d172015-03-27 05:42:18 -07001#
2# Copyright 2015 Google Inc.
3#
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6#
7
mtkleinf73e5892015-02-24 11:45:11 -08008#!/usr/bin/env python
9
10usage = '''
11Write extra flags to outfile for nanobench based on the bot name:
borenet1e37d172015-03-27 05:42:18 -070012 $ python nanobench_flags.py outfile Perf-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Release
mtkleinf73e5892015-02-24 11:45:11 -080013Or run self-tests:
14 $ python nanobench_flags.py test
15'''
16
17import inspect
18import json
19import os
20import sys
21
22
23def lineno():
24 caller = inspect.stack()[1] # Up one level to our caller.
25 return inspect.getframeinfo(caller[0]).lineno
26
27
28cov_start = lineno()+1 # We care about coverage starting just past this def.
29def get_args(bot):
benjaminwagner8d61f0d2016-01-25 13:02:40 -080030 args = ['--pre_log']
mtkleinf73e5892015-02-24 11:45:11 -080031
scroggo860e8a62015-10-15 07:51:28 -070032 if 'GPU' in bot:
33 args.append('--images')
joshualitt3b8c0a92015-12-02 11:04:51 -080034 args.extend(['--gpuStatsDump', 'true'])
scroggo0a3cac82015-10-08 14:44:51 -070035
joshualitte1745a12016-02-11 11:42:19 -080036 if 'Android' in bot and 'GPU' in bot:
37 args.extend(['--useThermalManager', '1,1,10,1000'])
38
borenetd34d9472015-09-03 12:31:26 -070039 if 'Appurify' not in bot:
40 args.extend(['--scales', '1.0', '1.1'])
mtkleinf73e5892015-02-24 11:45:11 -080041
stephana18b72db2015-05-21 13:59:36 -070042 if 'iOS' in bot:
43 args.extend(['--skps', 'ignore_skps'])
44
borenetd34d9472015-09-03 12:31:26 -070045 if 'Appurify' not in bot:
46 config = ['565', '8888', 'gpu', 'nonrendering', 'angle', 'hwui']
47 # The S4 crashes and the NP produces a long error stream when we run with
48 # MSAA.
49 if ('GalaxyS4' not in bot and
50 'NexusPlayer' not in bot):
51 if 'Android' in bot:
bsalomonb8797bb2016-04-05 08:49:38 -070052 # The TegraX1 has a regular OpenGL implementation. We bench that instead
53 # of ES.
54 if 'TegraX1' in bot:
55 config.remove('gpu')
56 config.extend(['gl', 'glmsaa4', 'glnvpr4', 'glnvprdit4'])
57 else:
58 config.extend(['msaa4', 'nvpr4', 'nvprdit4'])
borenetd34d9472015-09-03 12:31:26 -070059 else:
cdaltonc28afdb2016-03-29 20:05:07 -070060 config.extend(['msaa16', 'nvpr16', 'nvprdit16'])
borenetd34d9472015-09-03 12:31:26 -070061 args.append('--config')
62 args.extend(config)
bsalomonbdff1fc2015-02-28 16:56:31 -080063
mtkleinf73e5892015-02-24 11:45:11 -080064 if 'Valgrind' in bot:
65 # Don't care about Valgrind performance.
66 args.extend(['--loops', '1'])
67 args.extend(['--samples', '1'])
msarettc149f0e2016-01-04 11:35:43 -080068 # Ensure that the bot framework does not think we have timed out.
69 args.extend(['--keepAlive', 'true'])
mtkleinf73e5892015-02-24 11:45:11 -080070
egdaniel9a0f6292015-03-20 07:03:52 -070071 if 'HD2000' in bot:
mtkleinbf9e6002015-06-16 10:41:27 -070072 args.extend(['--GPUbenchTileW', '256'])
73 args.extend(['--GPUbenchTileH', '256'])
egdaniel9a0f6292015-03-20 07:03:52 -070074
mtkleinf73e5892015-02-24 11:45:11 -080075 match = []
76 if 'Android' in bot:
77 # Segfaults when run as GPU bench. Very large texture?
78 match.append('~blurroundrect')
79 match.append('~patch_grid') # skia:2847
80 match.append('~desk_carsvg')
81 if 'HD2000' in bot:
82 match.extend(['~gradient', '~etc1bitmap']) # skia:2895
borenete1d7e0f2015-04-23 12:44:31 -070083 if 'NexusPlayer' in bot:
84 match.append('~desk_unicodetable')
benjaminwagnera1a8a602015-09-23 11:41:04 -070085 if 'GalaxyS4' in bot:
86 match.append('~GLInstancedArraysBench') # skia:4371
bsalomon885b6772016-04-06 08:35:15 -070087 if 'Nexus5' in bot:
88 match.append('~keymobi_shop_mobileweb_ebay_com.skp') # skia:5178
stephana18b72db2015-05-21 13:59:36 -070089 if 'iOS' in bot:
90 match.append('~blurroundrect')
91 match.append('~patch_grid') # skia:2847
92 match.append('~desk_carsvg')
93 match.append('~keymobi')
stephana340cd842015-05-26 06:19:11 -070094 match.append('~path_hairline')
joshualitt431dded2015-12-16 10:38:35 -080095 match.append('~GLInstancedArraysBench') # skia:4714
stephana18b72db2015-05-21 13:59:36 -070096
scroggo860e8a62015-10-15 07:51:28 -070097 # the 32-bit GCE bots run out of memory in DM when running these large images
98 # so defensively disable them in nanobench, too.
99 # FIXME (scroggo): This may have just been due to SkImageDecoder's
halcanary6950de62015-11-07 05:29:00 -0800100 # buildTileIndex leaking memory (https://bug.skia.org/4360). That is
101 # disabled by default for nanobench, so we may not need this.
scroggo860e8a62015-10-15 07:51:28 -0700102 # FIXME (scroggo): Share image blacklists between dm and nanobench?
103 if 'x86' in bot and not 'x86-64' in bot:
104 match.append('~interlaced1.png')
105 match.append('~interlaced2.png')
106 match.append('~interlaced3.png')
107
brianosman2e77ddb2016-03-30 06:30:46 -0700108 # This low-end Android bot crashes about 25% of the time while running the
109 # (somewhat intense) shapes benchmarks.
110 if 'Perf-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Release' in bot:
111 match.append('~shapes_')
112
msaretta7a21cf2015-11-16 08:43:23 -0800113 # We do not need or want to benchmark the decodes of incomplete images.
114 # In fact, in nanobench we assert that the full image decode succeeds.
115 match.append('~inc0.gif')
116 match.append('~inc1.gif')
117 match.append('~incInterlaced.gif')
118 match.append('~inc0.jpg')
119 match.append('~incGray.jpg')
120 match.append('~inc0.wbmp')
121 match.append('~inc1.wbmp')
122 match.append('~inc0.webp')
123 match.append('~inc1.webp')
124 match.append('~inc0.ico')
125 match.append('~inc1.ico')
126 match.append('~inc0.png')
127 match.append('~inc1.png')
128 match.append('~inc2.png')
129 match.append('~inc12.png')
130 match.append('~inc13.png')
131 match.append('~inc14.png')
132 match.append('~inc0.webp')
133 match.append('~inc1.webp')
134
mtkleinafe9fac2016-02-22 14:59:59 -0800135 # As an experiment, skip nanobench on Debug trybots.
136 if 'Debug' in bot and 'CPU' in bot and 'Trybot' in bot:
137 match = ['nothing_will_match_this']
138
mtkleinf73e5892015-02-24 11:45:11 -0800139 if match:
140 args.append('--match')
141 args.extend(match)
mtklein7e78f3d2015-03-10 08:03:26 -0700142
mtkleinf73e5892015-02-24 11:45:11 -0800143 return args
144cov_end = lineno() # Don't care about code coverage past here.
145
146
147def self_test():
148 import coverage # This way the bots don't need coverage.py to be installed.
149 args = {}
150 cases = [
joshualitte1745a12016-02-11 11:42:19 -0800151 'Perf-Android-GCC-Nexus6-GPU-Adreno420-Arm7-Release',
mtkleinf73e5892015-02-24 11:45:11 -0800152 'Perf-Android-Nexus7-Tegra3-Arm7-Release',
borenete1d7e0f2015-04-23 12:44:31 -0700153 'Perf-Android-GCC-NexusPlayer-GPU-PowerVR-x86-Release',
brianosman2e77ddb2016-03-30 06:30:46 -0700154 'Perf-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Release',
borenet1e37d172015-03-27 05:42:18 -0700155 'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind',
156 'Test-Win7-MSVC-ShuttleA-GPU-HD2000-x86-Debug-ANGLE',
stephana18b72db2015-05-21 13:59:36 -0700157 'Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug',
benjaminwagnera1a8a602015-09-23 11:41:04 -0700158 'Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Release',
mtkleinafe9fac2016-02-22 14:59:59 -0800159 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-Trybot',
bsalomonb8797bb2016-04-05 08:49:38 -0700160 'Perf-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Release',
bsalomon885b6772016-04-06 08:35:15 -0700161 'Perf-Android-GCC-Nexus5-GPU-Adreno330-Arm7-Release',
mtkleinf73e5892015-02-24 11:45:11 -0800162 ]
163
164 cov = coverage.coverage()
165 cov.start()
166 for case in cases:
167 args[case] = get_args(case)
168 cov.stop()
169
170 this_file = os.path.basename(__file__)
171 _, _, not_run, _ = cov.analysis(this_file)
172 filtered = [line for line in not_run if line > cov_start and line < cov_end]
173 if filtered:
174 print 'Lines not covered by test cases: ', filtered
175 sys.exit(1)
176
177 golden = this_file.replace('.py', '.json')
178 with open(os.path.join(os.path.dirname(__file__), golden), 'w') as f:
179 json.dump(args, f, indent=2, sort_keys=True)
180
181
182if __name__ == '__main__':
183 if len(sys.argv) == 2 and sys.argv[1] == 'test':
184 self_test()
185 sys.exit(0)
186
187 if len(sys.argv) != 3:
188 print usage
189 sys.exit(1)
190
191 with open(sys.argv[1], 'w') as out:
192 json.dump(get_args(sys.argv[2]), out)