• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
10usage = '''
11Write 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
13Or run self-tests:
14  $ python dm_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):
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(['twice-8888', '2ndpic-8888'])
41    configs.extend(['remote-8888', 'remote_cache-8888'])
42
43  if '-TSAN' not in bot:
44    if ('TegraK1'  in bot or
45        'GTX550Ti' in bot or
46        'GTX660'   in bot or
47        'GT610'    in bot):
48      if 'Android' in bot:
49        configs.append('nvprmsaa4')
50      else:
51        configs.append('nvprmsaa16')
52
53  # The S4 crashes and the NP produces a long error stream when we run with
54  # MSAA.  The Tegra2 and Tegra3 just don't support it.
55  if ('GalaxyS4'    not in bot and
56      'NexusPlayer' not in bot and
57      'Tegra3'      not in bot and
58      'iOS'         not in bot):
59    if 'Android' in bot:
60      configs.append('msaa4')
61    else:
62      configs.append('msaa16')
63  # Runs out of memory on Android bots and Daisy.  Everyone else seems fine.
64  if 'Android' not in bot and 'Daisy' not in bot:
65    configs.append('pdf')
66    configs.append('pdf_poppler')
67
68  # NP is running out of RAM when we run all these modes.  skia:3255
69  if 'NexusPlayer' not in bot:
70    configs.extend(mode + '-8888' for mode in
71                   ['serialize', 'tiles_rt', 'pic'])
72
73  if 'ANGLE' in bot:
74    configs.append('angle')
75
76  # We want to run gpudft on atleast the mali 400
77  if 'GalaxyS3' in bot:
78      configs.append('gpudft')
79
80  args.append('--config')
81  args.extend(configs)
82
83  # Run tests, gms, and image decoding tests everywhere.
84  # TODO: remove skp from default --src list?
85  args.extend('--src tests gm image'.split(' '))
86
87  if 'GalaxyS' in bot:
88    args.extend(('--threads', '0'))
89
90  blacklist = []
91
92  # Certain gm's on win7 gpu and pdf are never finishing and keeping the test
93  # running forever
94  if 'Win7' in bot:
95    blacklist.extend('msaa16 gm _ colorwheelnative'.split(' '))
96    blacklist.extend('pdf gm _ fontmgr_iter_factory'.split(' '))
97
98  if 'Valgrind' in bot:
99    # These take 18+ hours to run.
100    blacklist.extend('pdf gm _ fontmgr_iter'.split(' '))
101    blacklist.extend('pdf _ _ PANO_20121023_214540.jpg'.split(' '))
102    blacklist.extend('pdf skp _ worldjournal'.split(' '))
103    blacklist.extend('pdf skp _ desk_baidu.skp'.split(' '))
104    blacklist.extend('pdf skp _ desk_wikipedia.skp'.split(' '))
105
106  if 'iOS' in bot:
107    blacklist.extend('gpu skp _ _ msaa skp _ _'.split(' '))
108    blacklist.extend('msaa16 gm _ tilemodesProcess'.split(' '))
109
110  # the 32-bit GCE bots run out of memory in DM when running these large images
111  if 'x86' in bot and not 'x86-64' in bot:
112    blacklist.extend('_ image _ interlaced1.png'.split(' '))
113    blacklist.extend('_ image _ interlaced2.png'.split(' '))
114    blacklist.extend('_ image _ interlaced3.png'.split(' '))
115
116  # skia:4095
117  for test in ['not_native32_bitmap_config',
118               'bleed_image',
119               'bleed_alpha_image',
120               'bleed_alpha_image_shader',
121               'blend',
122               'c_gms',
123               'colortype',
124               'colortype_xfermodes',
125               'colorwheelnative',
126               'drawfilter',
127               'fontmgr_bounds_0.75_0',
128               'fontmgr_bounds_1_-0.25',
129               'fontmgr_bounds',
130               'fontmgr_match',
131               'fontmgr_iter',
132               'lightingshader',
133               'localmatriximagefilter',
134               'path_stroke_with_zero_length',
135               'textblobgeometrychange',
136               'verylargebitmap',              # Windows only.
137               'verylarge_picture_image']:     # Windows only.
138    blacklist.extend(['serialize-8888', 'gm', '_', test])
139  # skia:4769
140  for test in ['blend',
141               'drawfilter',
142               'path_stroke_with_zero_length',
143               'textblobgeometrychange']:
144    blacklist.extend([    'sp-8888', 'gm', '_', test])
145    blacklist.extend([   'pic-8888', 'gm', '_', test])
146    blacklist.extend(['2ndpic-8888', 'gm', '_', test])
147  for test in ['patch_primitive']:
148    blacklist.extend(['sp-8888', 'gm', '_', test])
149  # skia:4703
150  for test in ['image-cacherator-from-picture',
151               'image-cacherator-from-raster',
152               'image-cacherator-from-ctable']:
153    blacklist.extend([       'sp-8888', 'gm', '_', test])
154    blacklist.extend([      'pic-8888', 'gm', '_', test])
155    blacklist.extend([   '2ndpic-8888', 'gm', '_', test])
156    blacklist.extend(['serialize-8888', 'gm', '_', test])
157
158  # Extensions for RAW images
159  r = ["arw", "cr2", "dng", "nef", "nrw", "orf", "raf", "rw2", "pef", "srw",
160       "ARW", "CR2", "DNG", "NEF", "NRW", "ORF", "RAF", "RW2", "PEF", "SRW"]
161
162  # skbug.com/4888
163  # Blacklist RAW images on GPU tests until we can resolve failures
164  if 'GPU' in bot:
165    for raw_ext in r:
166      blacklist.extend(('_ image _ .%s' % raw_ext).split(' '))
167
168  # Blacklist RAW images on Win32 tests due to out-of-memory issue
169  if 'Win' in bot and not '64' in bot:
170    for raw_ext in r:
171      blacklist.extend(('_ image _ .%s' % raw_ext).split(' '))
172
173  match = []
174  if 'Valgrind' in bot: # skia:3021
175    match.append('~Threaded')
176
177  if 'GalaxyS3' in bot:  # skia:1699
178    match.append('~WritePixels')
179
180  if 'AndroidOne' in bot:  # skia:4711
181    match.append('~WritePixels')
182
183  if 'NexusPlayer' in bot:
184    match.append('~ResourceCache')
185
186  if 'GalaxyS4' in bot:  # skia:4079
187    match.append('~imagefiltersclipped')
188    match.append('~imagefilterscropexpand')
189    match.append('~scaled_tilemodes_npot')
190    match.append('~bleed_image')  # skia:4367
191    match.append('~ReadPixels')  # skia:4368
192
193  if 'ANGLE' in bot and 'Debug' in bot:
194    match.append('~GLPrograms') # skia:4717
195
196  if 'MSAN' in bot:
197    match.extend(['~Once', '~Shared'])  # Not sure what's up with these tests.
198
199  if blacklist:
200    args.append('--blacklist')
201    args.extend(blacklist)
202
203  if match:
204    args.append('--match')
205    args.extend(match)
206
207  # These bots run out of memory running RAW codec tests. Do not run them in
208  # parallel
209  if 'NexusPlayer' in bot or 'Nexus5' in bot or 'Nexus9' in bot:
210    args.append('--noRAW_threading')
211
212  return args
213cov_end = lineno()   # Don't care about code coverage past here.
214
215
216def self_test():
217  import coverage  # This way the bots don't need coverage.py to be installed.
218  args = {}
219  cases = [
220    'Pretend-iOS-Bot',
221    'Test-Android-GCC-AndroidOne-GPU-Mali400MP2-Arm7-Release',
222    'Test-Android-GCC-Nexus9-GPU-TegraK1-Arm64-Debug',
223    'Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug',
224    'Test-Android-GCC-GalaxyS4-GPU-SGX544-Arm7-Release',
225    'Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release',
226    'Test-Android-GCC-NexusPlayer-CPU-SSSE3-x86-Release',
227    'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind',
228    'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN',
229    'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-TSAN',
230    'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Valgrind',
231    'Test-Win7-MSVC-ShuttleA-GPU-HD2000-x86-Debug-ANGLE',
232    'Test-Mac10.8-Clang-MacMini4.1-CPU-SSE4-x86_64-Release',
233  ]
234
235  cov = coverage.coverage()
236  cov.start()
237  for case in cases:
238    args[case] = get_args(case)
239  cov.stop()
240
241  this_file = os.path.basename(__file__)
242  _, _, not_run, _ = cov.analysis(this_file)
243  filtered = [line for line in not_run if line > cov_start and line < cov_end]
244  if filtered:
245    print 'Lines not covered by test cases: ', filtered
246    sys.exit(1)
247
248  golden = this_file.replace('.py', '.json')
249  with open(os.path.join(os.path.dirname(__file__), golden), 'w') as f:
250    json.dump(args, f, indent=2, sort_keys=True)
251
252
253if __name__ == '__main__':
254  if len(sys.argv) == 2 and sys.argv[1] == 'test':
255    self_test()
256    sys.exit(0)
257
258  if len(sys.argv) != 3:
259    print usage
260    sys.exit(1)
261
262  with open(sys.argv[1], 'w') as out:
263    json.dump(get_args(sys.argv[2]), out)
264