Use device-independent text for nvprmsaa4/16 in nanobench and dm
[platform/upstream/libSkiaSharp.git] / tools / dm_flags.py
1 #
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
8 #!/usr/bin/env python
9
10 usage = '''
11 Write extra flags to outfile for DM based on the bot name:
12   $ python dm_flags.py outfile Test-Ubuntu-GCC-GCE-CPU-AVX2-x86-Debug
13 Or run self-tests:
14   $ python dm_flags.py test
15 '''
16
17 import inspect
18 import json
19 import os
20 import sys
21
22
23 def lineno():
24   caller = inspect.stack()[1]  # Up one level to our caller.
25   return inspect.getframeinfo(caller[0]).lineno
26
27
28 cov_start = lineno()+1   # We care about coverage starting just past this def.
29 def get_args(bot):
30   args = []
31
32   configs = ['565', '8888', 'gpu']
33
34   if 'Android' not in bot:
35     configs.extend(('upright-matrix-8888', 'upright-matrix-gpu'))
36     args.extend('--matrix 0 1 1 0'.split(' '))
37
38   if '-GCE-' in bot:
39     configs.append('sp-8888')
40     configs.extend(['remote-8888', 'remote_cache-8888'])
41
42   if '-TSAN' not in bot:
43     if ('TegraK1'  in bot or
44         'GTX550Ti' in bot or
45         'GTX660'   in bot or
46         'GT610'    in bot):
47       if 'Android' in bot:
48         configs.append('nvprmsaa4')
49       else:
50         configs.append('nvprmsaa16')
51
52   # The S4 crashes and the NP produces a long error stream when we run with
53   # MSAA.  The Tegra2 and Tegra3 just don't support it.
54   if ('GalaxyS4'    not in bot and
55       'NexusPlayer' not in bot and
56       'Tegra3'      not in bot and
57       'iOS'         not in bot):
58     if 'Android' in bot:
59       configs.append('msaa4')
60     else:
61       configs.append('msaa16')
62   # Runs out of memory on Android bots and Daisy.  Everyone else seems fine.
63   if 'Android' not in bot and 'Daisy' not in bot:
64     configs.append('pdf')
65     configs.append('pdf_poppler')
66
67   # NP is running out of RAM when we run all these modes.  skia:3255
68   if 'NexusPlayer' not in bot:
69     configs.extend(mode + '-8888' for mode in
70                    ['serialize', 'tiles_rt', 'pipe'])
71
72   if 'ANGLE' in bot:
73     configs.append('angle')
74
75   # We want to run gpudft on atleast the mali 400
76   if 'GalaxyS3' in bot:
77       configs.append('gpudft')
78
79   args.append('--config')
80   args.extend(configs)
81
82   # Run tests and gms everywhere,
83   # and image decoding tests everywhere except GPU bots.
84   # TODO: remove skp from default --src list?
85   if 'GPU' in bot:
86     args.extend('--src tests gm'.split(' '))
87   else:
88     args.extend('--src tests gm image'.split(' '))
89
90   if 'GalaxyS' in bot:
91     args.extend(('--threads', '0'))
92
93   blacklist = []
94
95   # Several of the newest version bmps fail on SkImageDecoder
96   blacklist.extend('_ image decode pal8os2v2.bmp'.split(' '))
97   blacklist.extend('_ image decode pal8v4.bmp'.split(' '))
98   blacklist.extend('_ image decode pal8v5.bmp'.split(' '))
99   blacklist.extend('_ image decode rgb16-565.bmp'.split(' '))
100   blacklist.extend('_ image decode rgb16-565pal.bmp'.split(' '))
101   blacklist.extend('_ image decode rgb32-111110.bmp'.split(' '))
102   blacklist.extend('_ image decode rgb32bf.bmp'.split(' '))
103   blacklist.extend('_ image decode rgba32.bmp'.split(' '))
104   blacklist.extend('_ image decode rgba32abf.bmp'.split(' '))
105   blacklist.extend('_ image decode rgb24largepal.bmp'.split(' '))
106   blacklist.extend('_ image decode pal8os2v2-16.bmp'.split(' '))
107   blacklist.extend('_ image decode pal8oversizepal.bmp'.split(' '))
108   blacklist.extend('_ image decode pal4rletrns.bmp'.split(' '))
109   blacklist.extend('_ image decode pal8rletrns.bmp'.split(' '))
110   blacklist.extend('_ image decode 4bpp-pixeldata-cropped.bmp'.split(' '))
111   blacklist.extend('_ image decode 8bpp-pixeldata-cropped.bmp'.split(' '))
112   blacklist.extend('_ image decode 24bpp-pixeldata-cropped.bmp'.split(' '))
113   blacklist.extend('_ image decode 32bpp-pixeldata-cropped.bmp'.split(' '))
114   blacklist.extend('_ image decode testcase7.bmp'.split(' '))
115
116   # New ico files that fail on SkImageDecoder
117   blacklist.extend('_ image decode Hopstarter-Mac-Folders-Apple.ico'.split(' '))
118
119   # Gif test image uses uninitialized memory on Mac bots
120   if 'Mac' in bot:
121     blacklist.extend('_ image decode frame_larger_than_image.gif'.split(' '))
122
123   # Incomplete image tests that fail on SkImageDecoder
124   blacklist.extend('_ image decode inc0.gif'.split(' '))
125   blacklist.extend('_ image decode inc1.gif'.split(' '))
126   blacklist.extend('_ image decode incInterlaced.gif'.split(' '))
127   blacklist.extend('_ image decode inc0.jpg'.split(' '))
128   blacklist.extend('_ image decode incGray.jpg'.split(' '))
129   blacklist.extend('_ image decode inc0.wbmp'.split(' '))
130   blacklist.extend('_ image decode inc1.wbmp'.split(' '))
131   blacklist.extend('_ image decode inc0.webp'.split(' '))
132   blacklist.extend('_ image decode inc1.webp'.split(' '))
133   blacklist.extend('_ image decode inc0.ico'.split(' '))
134   blacklist.extend('_ image decode inc1.ico'.split(' '))
135   blacklist.extend('_ image decode inc0.png'.split(' '))
136   blacklist.extend('_ image decode inc1.png'.split(' '))
137   blacklist.extend('_ image decode inc2.png'.split(' '))
138   blacklist.extend('_ image decode inc12.png'.split(' '))
139   blacklist.extend('_ image decode inc13.png'.split(' '))
140   blacklist.extend('_ image decode inc14.png'.split(' '))
141
142   # Leon doesn't care about this, so why run it?
143   if 'Win' in bot:
144     blacklist.extend('_ image decode _'.split(' '))
145
146   # Certain gm's on win7 gpu and pdf are never finishing and keeping the test
147   # running forever
148   if 'Win7' in bot:
149     blacklist.extend('msaa16 gm _ colorwheelnative'.split(' '))
150     blacklist.extend('pdf gm _ fontmgr_iter_factory'.split(' '))
151
152   if 'Valgrind' in bot:
153     # PDF + .webp -> jumps depending on uninitialized memory.  skia:3505
154     blacklist.extend('pdf _ _ .webp'.split(' '))
155     # These take 18+ hours to run.
156     blacklist.extend('pdf gm _ fontmgr_iter'.split(' '))
157     blacklist.extend('pdf _ _ PANO_20121023_214540.jpg'.split(' '))
158     blacklist.extend('pdf skp _ worldjournal'.split(' '))
159     blacklist.extend('pdf skp _ desk_baidu.skp'.split(' '))
160     blacklist.extend('pdf skp _ desk_wikipedia.skp'.split(' '))
161
162   if 'iOS' in bot:
163     blacklist.extend('gpu skp _ _ msaa skp _ _'.split(' '))
164     blacklist.extend('gpu image decode _ msaa image decode _'.split(' '))
165     blacklist.extend('msaa16 gm _ tilemodesProcess'.split(' '))
166
167   # the 32-bit GCE bots run out of memory in DM when running these large images
168   if 'x86' in bot and not 'x86-64' in bot:
169     blacklist.extend('_ image _ interlaced1.png'.split(' '))
170     blacklist.extend('_ image _ interlaced2.png'.split(' '))
171     blacklist.extend('_ image _ interlaced3.png'.split(' '))
172
173   if blacklist:
174     args.append('--blacklist')
175     args.extend(blacklist)
176
177   match = []
178   if 'Valgrind' in bot: # skia:3021
179     match.append('~Threaded')
180
181   if 'GalaxyS3' in bot:  # skia:1699
182     match.append('~WritePixels')
183   
184   if 'AndroidOne' in bot:  # skia:4711
185     match.append('~WritePixels')
186
187   if 'NexusPlayer' in bot:
188     match.append('~ResourceCache')
189
190   if 'GalaxyS4' in bot:  # skia:4079
191     match.append('~imagefiltersclipped')
192     match.append('~imagefilterscropexpand')
193     match.append('~scaled_tilemodes_npot')
194     match.append('~bleed_image')  # skia:4367
195     match.append('~ReadPixels')  # skia:4368
196
197   if 'ANGLE' in bot and 'Debug' in bot:
198     match.append('~GLPrograms') # skia:4717
199
200   if match:
201     args.append('--match')
202     args.extend(match)
203
204   return args
205 cov_end = lineno()   # Don't care about code coverage past here.
206
207
208 def self_test():
209   import coverage  # This way the bots don't need coverage.py to be installed.
210   args = {}
211   cases = [
212     'Pretend-iOS-Bot',
213     'Test-Android-GCC-AndroidOne-GPU-Mali400MP2-Arm7-Release',
214     'Test-Android-GCC-Nexus9-GPU-TegraK1-Arm64-Debug',
215     'Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug',
216     'Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Release',
217     'Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release',
218     'Test-Android-GCC-NexusPlayer-CPU-SSSE3-x86-Release',
219     'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind',
220     'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-TSAN',
221     'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Valgrind',
222     'Test-Win7-MSVC-ShuttleA-GPU-HD2000-x86-Debug-ANGLE',
223     'Test-Mac10.8-Clang-MacMini4.1-CPU-SSE4-x86_64-Release',
224   ]
225
226   cov = coverage.coverage()
227   cov.start()
228   for case in cases:
229     args[case] = get_args(case)
230   cov.stop()
231
232   this_file = os.path.basename(__file__)
233   _, _, not_run, _ = cov.analysis(this_file)
234   filtered = [line for line in not_run if line > cov_start and line < cov_end]
235   if filtered:
236     print 'Lines not covered by test cases: ', filtered
237     sys.exit(1)
238
239   golden = this_file.replace('.py', '.json')
240   with open(os.path.join(os.path.dirname(__file__), golden), 'w') as f:
241     json.dump(args, f, indent=2, sort_keys=True)
242
243
244 if __name__ == '__main__':
245   if len(sys.argv) == 2 and sys.argv[1] == 'test':
246     self_test()
247     sys.exit(0)
248
249   if len(sys.argv) != 3:
250     print usage
251     sys.exit(1)
252
253   with open(sys.argv[1], 'w') as out:
254     json.dump(get_args(sys.argv[2]), out)