blob: 451cd5583bd87b4e745ded6675c2834f49eea427 [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:
52 config.extend(['msaa4', 'nvprmsaa4'])
53 else:
54 config.extend(['msaa16', 'nvprmsaa16'])
55 args.append('--config')
56 args.extend(config)
bsalomonbdff1fc2015-02-28 16:56:31 -080057
mtkleinf73e5892015-02-24 11:45:11 -080058 if 'Valgrind' in bot:
59 # Don't care about Valgrind performance.
60 args.extend(['--loops', '1'])
61 args.extend(['--samples', '1'])
msarettc149f0e2016-01-04 11:35:43 -080062 # Ensure that the bot framework does not think we have timed out.
63 args.extend(['--keepAlive', 'true'])
mtkleinf73e5892015-02-24 11:45:11 -080064
egdaniel9a0f6292015-03-20 07:03:52 -070065 if 'HD2000' in bot:
mtkleinbf9e6002015-06-16 10:41:27 -070066 args.extend(['--GPUbenchTileW', '256'])
67 args.extend(['--GPUbenchTileH', '256'])
egdaniel9a0f6292015-03-20 07:03:52 -070068
mtkleinf73e5892015-02-24 11:45:11 -080069 match = []
70 if 'Android' in bot:
71 # Segfaults when run as GPU bench. Very large texture?
72 match.append('~blurroundrect')
73 match.append('~patch_grid') # skia:2847
74 match.append('~desk_carsvg')
75 if 'HD2000' in bot:
76 match.extend(['~gradient', '~etc1bitmap']) # skia:2895
borenete1d7e0f2015-04-23 12:44:31 -070077 if 'NexusPlayer' in bot:
78 match.append('~desk_unicodetable')
benjaminwagnera1a8a602015-09-23 11:41:04 -070079 if 'GalaxyS4' in bot:
80 match.append('~GLInstancedArraysBench') # skia:4371
borenete1d7e0f2015-04-23 12:44:31 -070081
stephana18b72db2015-05-21 13:59:36 -070082 if 'iOS' in bot:
83 match.append('~blurroundrect')
84 match.append('~patch_grid') # skia:2847
85 match.append('~desk_carsvg')
86 match.append('~keymobi')
stephana340cd842015-05-26 06:19:11 -070087 match.append('~path_hairline')
joshualitt431dded2015-12-16 10:38:35 -080088 match.append('~GLInstancedArraysBench') # skia:4714
stephana18b72db2015-05-21 13:59:36 -070089
scroggo860e8a62015-10-15 07:51:28 -070090 # the 32-bit GCE bots run out of memory in DM when running these large images
91 # so defensively disable them in nanobench, too.
92 # FIXME (scroggo): This may have just been due to SkImageDecoder's
halcanary6950de62015-11-07 05:29:00 -080093 # buildTileIndex leaking memory (https://bug.skia.org/4360). That is
94 # disabled by default for nanobench, so we may not need this.
scroggo860e8a62015-10-15 07:51:28 -070095 # FIXME (scroggo): Share image blacklists between dm and nanobench?
96 if 'x86' in bot and not 'x86-64' in bot:
97 match.append('~interlaced1.png')
98 match.append('~interlaced2.png')
99 match.append('~interlaced3.png')
100
msaretta7a21cf2015-11-16 08:43:23 -0800101 # We do not need or want to benchmark the decodes of incomplete images.
102 # In fact, in nanobench we assert that the full image decode succeeds.
103 match.append('~inc0.gif')
104 match.append('~inc1.gif')
105 match.append('~incInterlaced.gif')
106 match.append('~inc0.jpg')
107 match.append('~incGray.jpg')
108 match.append('~inc0.wbmp')
109 match.append('~inc1.wbmp')
110 match.append('~inc0.webp')
111 match.append('~inc1.webp')
112 match.append('~inc0.ico')
113 match.append('~inc1.ico')
114 match.append('~inc0.png')
115 match.append('~inc1.png')
116 match.append('~inc2.png')
117 match.append('~inc12.png')
118 match.append('~inc13.png')
119 match.append('~inc14.png')
120 match.append('~inc0.webp')
121 match.append('~inc1.webp')
122
mtkleinafe9fac2016-02-22 14:59:59 -0800123 # As an experiment, skip nanobench on Debug trybots.
124 if 'Debug' in bot and 'CPU' in bot and 'Trybot' in bot:
125 match = ['nothing_will_match_this']
126
mtkleinf73e5892015-02-24 11:45:11 -0800127 if match:
128 args.append('--match')
129 args.extend(match)
mtklein7e78f3d2015-03-10 08:03:26 -0700130
mtkleinf73e5892015-02-24 11:45:11 -0800131 return args
132cov_end = lineno() # Don't care about code coverage past here.
133
134
135def self_test():
136 import coverage # This way the bots don't need coverage.py to be installed.
137 args = {}
138 cases = [
joshualitte1745a12016-02-11 11:42:19 -0800139 'Perf-Android-GCC-Nexus6-GPU-Adreno420-Arm7-Release',
mtkleinf73e5892015-02-24 11:45:11 -0800140 'Perf-Android-Nexus7-Tegra3-Arm7-Release',
borenete1d7e0f2015-04-23 12:44:31 -0700141 'Perf-Android-GCC-NexusPlayer-GPU-PowerVR-x86-Release',
borenet1e37d172015-03-27 05:42:18 -0700142 'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind',
143 'Test-Win7-MSVC-ShuttleA-GPU-HD2000-x86-Debug-ANGLE',
stephana18b72db2015-05-21 13:59:36 -0700144 'Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug',
benjaminwagnera1a8a602015-09-23 11:41:04 -0700145 'Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Release',
mtkleinafe9fac2016-02-22 14:59:59 -0800146 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-Trybot',
mtkleinf73e5892015-02-24 11:45:11 -0800147 ]
148
149 cov = coverage.coverage()
150 cov.start()
151 for case in cases:
152 args[case] = get_args(case)
153 cov.stop()
154
155 this_file = os.path.basename(__file__)
156 _, _, not_run, _ = cov.analysis(this_file)
157 filtered = [line for line in not_run if line > cov_start and line < cov_end]
158 if filtered:
159 print 'Lines not covered by test cases: ', filtered
160 sys.exit(1)
161
162 golden = this_file.replace('.py', '.json')
163 with open(os.path.join(os.path.dirname(__file__), golden), 'w') as f:
164 json.dump(args, f, indent=2, sort_keys=True)
165
166
167if __name__ == '__main__':
168 if len(sys.argv) == 2 and sys.argv[1] == 'test':
169 self_test()
170 sys.exit(0)
171
172 if len(sys.argv) != 3:
173 print usage
174 sys.exit(1)
175
176 with open(sys.argv[1], 'w') as out:
177 json.dump(get_args(sys.argv[2]), out)