Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: gpu/config/process_json.py

Issue 2756793003: Move GPU blacklist and driver bug workaround list from json to data struct. (Closed)
Patch Set: Switch to use arraysize Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2017 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 import json
7 import os
8 import platform
9 import sys
10 from subprocess import call
11
12 """Generate data struct from GPU blacklist and driver bug workarounds json."""
13
14 _LICENSE = """// Copyright 2017 The Chromium Authors. All rights reserved.
15 // Use of this source code is governed by a BSD-style license that can be
16 // found in the LICENSE file.
17
18 """
19
20 _DO_NOT_EDIT_WARNING = """// This file is auto-generated from
21 // gpu/config/process_json.py
22 // It's formatted by clang-format using chromium coding style:
23 // clang-format -i -style=chromium filename
24 // DO NOT EDIT!
25
26 """
27
28
29 def load_software_rendering_list_features(feature_type_filename):
30 header_file = open(feature_type_filename, 'rb')
31 start = False
32 features = []
33 for line in header_file:
34 if line.startswith('enum GpuFeatureType {'):
35 assert not start
36 start = True
37 continue
38 if not start:
39 continue
40 line = line.strip()
41 line = line.split(' ', 1)[0]
42 line = line.split(',', 1)[0]
43 if line.startswith('NUMBER_OF_GPU_FEATURE_TYPES'):
44 assert start
45 start = False
46 break
47 elif line.startswith('GPU_FEATURE_TYPE_'):
48 name = line[len('GPU_FEATURE_TYPE_'):]
49 features.append(name.lower())
50 else:
51 assert False
52 assert not start
53 assert len(features) > 0
54 header_file.close()
55 return features
56
57
58 def load_gpu_driver_bug_workarounds(workaround_type_filename):
59 header_file = open(workaround_type_filename, 'rb')
60 start = False
61 workaround = None
62 workarounds = []
63 for line in header_file:
64 if line.startswith('#define GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)'):
65 assert not start
66 start = True
67 continue
68 if not start:
69 continue
70 line = line.strip()
71 if line.startswith('GPU_OP('):
72 assert not workaround
73 workaround = line[len('GPU_OP('):]
74 workaround = workaround.split(',', 1)[0].lower()
75 continue
76 if workaround:
77 line = line.split(')', 1)[0]
78 assert line == workaround
79 workarounds.append(line)
80 workaround = None
81 continue
82 start = False
83 break
84 assert not start
85 assert len(workarounds) > 0
86 header_file.close()
87 return workarounds
88
89
90 def get_feature_set(features, total_feature_set):
91 assert len(features) > 0
92 feature_set = set([])
93 for feature in features:
94 if feature == 'all':
95 feature_set = set(total_feature_set)
96 elif isinstance(feature, dict):
97 for key in feature:
98 if key == 'exceptions':
99 for exception in feature['exceptions']:
100 assert exception in feature_set
101 feature_set.remove(exception)
102 else:
103 raise KeyException('only exceptions are allowed')
104 else:
105 assert feature in total_feature_set
106 feature_set.add(feature)
107 return feature_set
108
109
110 def write_features(entry_id, feature_set, feature_name_prefix,
111 data_helper_file):
112 data_helper_file.write('const int kFeatureListForEntry%d[%d] = {\n' %
113 (entry_id, len(feature_set)))
114 for feature in feature_set:
115 data_helper_file.write(feature_name_prefix + feature.upper())
116 data_helper_file.write(',\n')
117 data_helper_file.write('};\n\n')
118
119
120 def write_string_list(entry_id, is_exception, exception_id, name_tag, data,
Ken Russell (switch to Gerrit) 2017/03/31 02:37:06 nit: this doesn't seem to be called with anything
Zhenyao Mo 2017/03/31 19:14:14 Done.
121 data_file, data_helper_file):
122 if data:
123 var_name = 'k' + name_tag + 'ForEntry' + str(entry_id)
124 if is_exception:
125 var_name += 'Exception' + str(exception_id)
126 # define the list
127 data_helper_file.write('const char* %s[%d] = {\n' % (var_name, len(data)))
128 for item in data:
129 write_string(item, data_helper_file)
130 data_helper_file.write(',\n')
131 data_helper_file.write('};\n\n')
132 # use the list
133 data_file.write('arraysize(%s), // %s size\n' % (var_name, name_tag))
134 data_file.write('%s, // %s\n' % (var_name, name_tag))
135 else:
136 data_file.write('0, // %s size\n' % name_tag)
137 data_file.write('nullptr, // %s\n' % name_tag)
138
139
140 def write_gl_strings(entry_id, is_exception, exception_id, data,
141 data_file, data_helper_file):
142 if data:
143 var_name = 'kGLStringsForEntry' + str(entry_id)
144 if is_exception:
145 var_name += 'Exception' + str(exception_id)
146 # define the GL strings
147 data_helper_file.write('const GpuControlList::GLStrings %s = {\n' %
148 var_name)
149 for item in data:
150 write_string(item, data_helper_file)
151 data_helper_file.write(',\n')
152 data_helper_file.write('};\n\n')
153 # reference the GL strings
154 data_file.write('&%s, // GL strings\n' % var_name)
155 else:
156 data_file.write('nullptr, // GL strings\n')
157
158
159 def write_version(version_info, name_tag, data_file):
160 op = ''
161 style = ''
162 version1 = ''
163 version2 = ''
164 if version_info:
165 op = version_info['op']
166 if 'style' in version_info:
167 style = version_info['style']
168 version1 = version_info['value']
169 if 'value2' in version_info:
170 version2 = version_info['value2']
171 data_file.write('{')
172 op_map = {
173 '=': 'kEQ',
174 '<': 'kLT',
175 '<=': 'kLE',
176 '>': 'kGT',
177 '>=': 'kGE',
178 'any': 'kAny',
179 'between': 'kBetween',
180 '': 'kUnknown',
181 }
182 assert op_map.has_key(op)
183 data_file.write('GpuControlList::%s, ' % op_map[op])
184 style_map = {
185 'lexical': 'Lexical',
186 'numerical': 'Numerical',
187 '': 'Numerical',
188 }
189 assert style_map.has_key(style)
190 data_file.write('GpuControlList::kVersionStyle%s, ' % style_map[style])
191 write_string(version1, data_file)
192 data_file.write(', ')
193 write_string(version2, data_file)
194 data_file.write('}, // %s\n' % name_tag)
195
196
197 def write_driver_info(entry_id, is_exception, exception_id, driver_vendor,
198 driver_version, driver_date, data_file, data_helper_file):
199 var_name = 'kDriverInfoForEntry' + str(entry_id)
200 if is_exception:
201 var_name += 'Exception' + str(exception_id)
202 # define the GL strings
203 data_helper_file.write('const GpuControlList::DriverInfo %s = {\n' %
204 var_name)
205 write_string_value(driver_vendor, 'driver_vendor', data_helper_file)
206 write_version(driver_version, 'driver_version', data_helper_file)
207 write_version(driver_date, 'driver_date', data_helper_file)
208 data_helper_file.write('};\n\n')
209 # reference the GL strings
210 data_file.write('&%s, // driver info\n' % var_name)
211
212
213 def write_number_list(entry_id, data_type, name_tag, data, is_exception,
214 exception_id, data_file, data_helper_file):
215 if data:
216 var_name = 'k' + name_tag + 'ForEntry' + str(entry_id)
217 if is_exception:
218 var_name += 'Exception' + str(exception_id)
219 # define the list
220 data_helper_file.write('const %s %s[%d] = {\n' %
221 (data_type, var_name, len(data)))
222 for item in data:
223 data_helper_file.write(str(item))
224 data_helper_file.write(',\n')
225 data_helper_file.write('};\n\n')
226 # reference the list
227 data_file.write('arraysize(%s), // %s size\n' % (var_name, name_tag))
228 data_file.write('%s, // %s\n' % (var_name, name_tag))
229 else:
230 data_file.write('0, // %s size\n' % name_tag)
231 data_file.write('nullptr, // %s\n' % name_tag)
232
233
234 def write_string(string, data_file):
235 if string == '':
236 data_file.write('nullptr')
237 else:
238 data_file.write('"%s"' % string.replace('\\', '\\\\'))
239
240
241 def write_string_value(string, name_tag, data_file):
242 write_string(string, data_file)
243 data_file.write(', // %s\n' % name_tag)
244
245
246 def write_boolean_value(value, name_tag, data_file):
247 data_file.write('%s, // %s\n' % (str(value).lower(), name_tag))
248
249
250 def write_machine_model_info(entry_id, is_exception, exception_id,
251 machine_model_name, machine_model_version,
252 data_file, data_helper_file):
253 model_name_var_name = None
254 if machine_model_name:
255 model_name_var_name = 'kMachineModelNameForEntry' + str(entry_id)
256 if is_exception:
257 model_name_var_name += 'Exception' + str(exception_id)
258 data_helper_file.write('const char* %s[%d] = {\n' %
259 (model_name_var_name, len(machine_model_name)))
260 for item in machine_model_name:
261 write_string(item, data_helper_file)
262 data_helper_file.write(',\n')
263 data_helper_file.write('};\n\n')
264 var_name = None
265 if machine_model_name or machine_model_version:
266 var_name = 'kMachineModelInfoForEntry' + str(entry_id)
267 if is_exception:
268 var_name += 'Exception' + str(exception_id)
269 # define machine model info
270 data_helper_file.write(
271 'const GpuControlList::MachineModelInfo %s = {\n' % var_name)
272 if machine_model_name:
273 data_helper_file.write('arraysize(%s), // machine model name size\n' %
274 model_name_var_name)
275 data_helper_file.write('%s, // machine model names\n' %
276 model_name_var_name)
277 else:
278 data_helper_file.write('0, // machine model name size\n')
279 data_helper_file.write('nullptr, // machine model names\n')
280 write_version(machine_model_version, 'machine model version',
281 data_helper_file)
282 data_helper_file.write('};\n\n')
283 # reference the machine model info
284 data_file.write('&%s, // machine model info\n' % var_name)
285 else:
286 data_file.write('nullptr, // machine model info\n')
287
288
289 def write_os_type(os_type, data_file):
290 map = {
291 'win': 'kOsWin',
292 'macosx': 'kOsMacosx',
293 'android': 'kOsAndroid',
294 'linux': 'kOsLinux',
295 'chromeos': 'kOsChromeOS',
296 '': 'kOsAny',
297 }
298 assert map.has_key(os_type)
299 data_file.write('GpuControlList::%s, // os_type\n' % map[os_type])
300
301
302 def write_multi_gpu_category(multi_gpu_category, data_file):
303 map = {
304 'primary': 'Primary',
305 'secondary': 'Secondary',
306 'active': 'Active',
307 'any': 'Any',
308 '': 'None',
309 }
310 assert map.has_key(multi_gpu_category)
311 data_file.write(
312 'GpuControlList::kMultiGpuCategory%s, // multi_gpu_category\n' %
313 map[multi_gpu_category])
314
315
316 def write_multi_gpu_style(multi_gpu_style, data_file):
317 map = {
318 'optimus': 'Optimus',
319 'amd_switchable': 'AMDSwitchable',
320 'amd_switchable_discrete': 'AMDSwitchableDiscrete',
321 'amd_switchable_integrated': 'AMDSwitchableIntegrated',
322 '': 'None',
323 }
324 assert map.has_key(multi_gpu_style)
325 data_file.write(
326 'GpuControlList::kMultiGpuStyle%s, // multi_gpu_style\n' %
327 map[multi_gpu_style])
328
329
330 def write_gl_type(gl_type, data_file):
331 map = {
332 'gl': 'GL',
333 'gles': 'GLES',
334 'angle': 'ANGLE',
335 '': 'None',
336 }
337 assert map.has_key(gl_type)
338 data_file.write('GpuControlList::kGLType%s, // gl_type\n' % map[gl_type])
339
340
341 def write_conditions(entry_id, is_exception, exception_id, entry,
342 data_file, data_helper_file, data_exception_file):
343 os_type = ''
344 os_version = None
345 vendor_id = 0
346 device_id = None
347 multi_gpu_category = ''
348 multi_gpu_style = ''
349 driver_vendor = ''
350 driver_version = None
351 driver_date = None
352 gl_renderer = ''
353 gl_vendor = ''
354 gl_extensions = ''
355 gl_version_string = ''
356 gl_type = ''
357 gl_version = None
358 pixel_shader_version = None
359 in_process_gpu = False
360 gl_reset_notification_strategy = None
361 direct_rendering = True
362 gpu_count = None
363 machine_model_name = None
364 machine_model_version = None
365 exception_count = 0
366 exception_var = 'nullptr'
367 # process the entry
368 for key in entry:
369 if key == 'id':
370 assert not is_exception
371 assert entry['id'] == entry_id
372 continue
373 elif key == 'description':
374 assert not is_exception
375 continue
376 elif key == 'features':
377 assert not is_exception
378 continue
379 elif key == 'disabled_extensions':
380 assert not is_exception
381 continue
382 elif key == 'comment':
383 continue
384 elif key == 'webkit_bugs':
385 assert not is_exception
386 continue
387 elif key == 'cr_bugs':
388 assert not is_exception
389 continue
390 elif key == 'os':
391 os_info = entry[key]
392 os_type = os_info['type']
393 if 'version' in os_info:
394 os_version = os_info['version']
395 elif key == 'vendor_id':
396 vendor_id = int(entry[key], 0)
397 elif key == 'device_id':
398 device_id = entry[key]
399 elif key == 'multi_gpu_category':
400 multi_gpu_category = entry[key]
401 elif key == 'multi_gpu_style':
402 multi_gpu_style = entry[key]
403 elif key == 'driver_vendor':
404 driver_vendor = entry[key]
405 elif key == 'driver_version':
406 driver_version = entry[key]
407 elif key == 'driver_date':
408 driver_date = entry[key]
409 elif key == 'gl_vendor':
410 gl_vendor = entry[key]
411 elif key == 'gl_renderer':
412 gl_renderer = entry[key]
413 elif key == 'gl_version_string':
414 gl_version_string = entry[key]
415 elif key == 'gl_type':
416 gl_type = entry[key]
417 elif key == 'gl_version':
418 gl_version = entry[key]
419 elif key == 'gl_extensions':
420 gl_extensions = entry[key]
421 elif key == 'pixel_shader_version':
422 pixel_shader_version = entry[key]
423 elif key == 'in_process_gpu':
424 assert entry[key]
425 in_process_gpu = True
426 elif key == 'gl_reset_notification_strategy':
427 gl_reset_notification_strategy = entry[key]
428 elif key == 'direct_rendering':
429 assert not entry[key]
430 direct_rendering = False
431 elif key == 'gpu_count':
432 gpu_count = entry[key]
433 elif key == 'machine_model_name':
434 machine_model_name = entry[key]
435 elif key == 'machine_model_version':
436 machine_model_version = entry[key]
437 elif key == 'exceptions':
438 assert not is_exception
439 assert exception_count == 0
440 else:
441 raise ValueError('unknown key: ' + key + ' in entry ' + str(entry))
442 # write out the entry
443 write_os_type(os_type, data_file)
444 write_version(os_version, 'os_version', data_file)
445 data_file.write(format(vendor_id, '#04x'))
446 data_file.write(', // vendor_id\n')
447 write_number_list(entry_id, 'uint32_t', 'DeviceIDs', device_id, is_exception,
448 exception_id, data_file, data_helper_file)
449 write_multi_gpu_category(multi_gpu_category, data_file)
450 write_multi_gpu_style(multi_gpu_style, data_file)
451 # group driver info
452 if driver_vendor != '' or driver_version != None or driver_date != None:
453 write_driver_info(entry_id, is_exception, exception_id, driver_vendor,
454 driver_version, driver_date, data_file, data_helper_file)
455 else:
456 data_file.write('nullptr, // driver info\n')
457 # group GL strings
458 gl_strings = None
459 if (gl_vendor != '' or gl_renderer != '' or gl_extensions != '' or
460 gl_version_string != ''):
461 gl_strings = [gl_vendor, gl_renderer, gl_extensions, gl_version_string]
462 write_gl_strings(entry_id, is_exception, exception_id, gl_strings,
463 data_file, data_helper_file)
464 # group machine model info
465 write_machine_model_info(entry_id, is_exception, exception_id,
466 machine_model_name, machine_model_version,
467 data_file, data_helper_file)
468 # group a bunch of less used conditions
469 if (gl_version != None or pixel_shader_version != None or in_process_gpu or
470 gl_reset_notification_strategy != None or (not direct_rendering) or
471 gpu_count != None):
472 write_entry_more_data(entry_id, is_exception, exception_id, gl_type,
473 gl_version, pixel_shader_version, in_process_gpu,
474 gl_reset_notification_strategy, direct_rendering,
475 gpu_count, data_file, data_helper_file)
476 else:
477 data_file.write('nullptr, // more conditions\n')
478
479
480 def write_entry_more_data(entry_id, is_exception, exception_id, gl_type,
481 gl_version, pixel_shader_version, in_process_gpu,
482 gl_reset_notification_strategy, direct_rendering,
483 gpu_count, data_file, data_helper_file):
484 # write more data
485 var_name = 'kMoreForEntry' + str(entry_id)
486 if is_exception:
487 var_name += 'Exception' + str(exception_id)
488 data_helper_file.write('const GpuControlList::More %s = {\n' % var_name)
489 write_gl_type(gl_type, data_helper_file)
490 write_version(gl_version, 'gl_version', data_helper_file)
491 write_version(pixel_shader_version, 'pixel_shader_version', data_helper_file)
492 write_boolean_value(in_process_gpu, 'in_process_gpu', data_helper_file)
493 if not gl_reset_notification_strategy:
494 gl_reset_notification_strategy = '0'
495 data_helper_file.write('%s, // gl_reset_notification_strategy\n' %
496 gl_reset_notification_strategy)
497 write_boolean_value(direct_rendering, 'direct_rendering', data_helper_file)
498 write_version(gpu_count, 'gpu_count', data_helper_file)
499 data_helper_file.write('};\n\n')
500 # reference more data in entry
501 data_file.write('&%s, // more data\n' % var_name)
502
503
504 def write_entry(entry, total_feature_set, feature_name_prefix,
505 data_file, data_helper_file, data_exception_file):
506 data_file.write('{\n')
507 # ID
508 entry_id = entry['id']
509 data_file.write('%d, // id\n' % entry_id)
510 data_file.write('"%s",\n' % entry['description']);
511 # Features
512 if 'features' in entry:
513 features = entry['features']
514 feature_set = get_feature_set(features, total_feature_set)
515 data_file.write('arraysize(kFeatureListForEntry%d), // features size\n' %
516 entry_id)
517 data_file.write('kFeatureListForEntry%d, // features\n' % entry_id)
518 write_features(entry_id, feature_set, feature_name_prefix, data_helper_file)
519 else:
520 data_file.write('0, // feature size\n')
521 data_file.write('nullptr, // features\n')
522 # Disabled extensions
523 disabled_extensions = None
524 if 'disabled_extensions' in entry:
525 disabled_extensions = entry['disabled_extensions']
526 write_string_list(entry_id, False, -1, 'DisabledExtensions',
527 disabled_extensions, data_file, data_helper_file)
528 # webkit_bugs are skipped because there is only one entry that has it.
529 # cr_bugs
530 cr_bugs = None
531 if 'cr_bugs' in entry:
532 cr_bugs = entry['cr_bugs']
533 write_number_list(entry_id, 'uint32_t', 'CrBugs', cr_bugs, False, -1,
534 data_file, data_helper_file)
535 # Conditions
536 data_file.write('{\n')
537 write_conditions(entry_id, False, -1, entry, data_file, data_helper_file,
538 data_exception_file)
539 data_file.write('},\n')
540 # Exceptions
541 if 'exceptions' in entry:
542 exceptions = entry['exceptions']
543 exception_count = len(exceptions)
544 exception_var = 'kExceptionsForEntry' + str(entry_id)
545 data_exception_file.write('const GpuControlList::Conditions %s[%d] = {\n' %
546 (exception_var, exception_count))
547 for index in range(exception_count):
548 exception = exceptions[index]
549 if 'device_id' in exception and 'vendor_id' not in exception:
550 assert 'vendor_id' in entry
551 exception['vendor_id'] = entry['vendor_id']
552 data_exception_file.write('{\n')
553 write_conditions(entry_id, True, index, exception,
554 data_exception_file, data_helper_file, None)
555 data_exception_file.write('},\n')
556 data_exception_file.write('};\n\n')
557 data_file.write('arraysize(%s), // exceptions count\n' % exception_var)
558 data_file.write('%s, // exceptions\n' % exception_var)
559 else:
560 data_file.write('0, // exceptions count\n')
561 data_file.write('nullptr, // exceptions\n')
562 # END
563 data_file.write('},\n')
564
565
566 def format_files(generated_files):
567 formatter = "clang-format"
568 if platform.system() == "Windows":
569 formatter += ".bat"
570 for filename in generated_files:
571 call([formatter, "-i", "-style=chromium", filename])
572
573
574 def write_header_file_guard(file, filename, path, begin):
575 token = (path.upper().replace('/', '_') + '_' +
576 filename.upper().replace('.', '_') + '_')
577 if begin:
578 file.write('#ifndef %s\n#define %s\n\n' % (token, token))
579 else:
580 file.write('\n#endif // %s\n' % token)
581
582
583 def process_json_file(json_filename, list_tag,
584 feature_header_filename, total_features, feature_tag,
585 output_header_filename, output_data_filename,
586 output_helper_filename, output_exception_filename, path,
587 export_tag):
588 current_dir = os.getcwd()
589 os.chdir('../../' + path) # assume python script is under gou/config
Ken Russell (switch to Gerrit) 2017/03/31 02:37:06 typo here and throughout: gou -> gpu Also, I was
Zhenyao Mo 2017/03/31 19:14:14 Done
590
591 json_file = open(json_filename, 'rb')
592 json_data = json.load(json_file)
593 json_file.close()
594 data_file = open(output_data_filename, 'wb')
595 data_file.write(_LICENSE)
596 data_file.write(_DO_NOT_EDIT_WARNING)
597 data_file.write('#include "%s/%s"\n\n' % (path, output_header_filename))
598 data_file.write('#include "%s/%s"\n' % (path, output_helper_filename))
599 data_file.write('#include "%s/%s"\n\n' % (path, output_exception_filename))
600 data_helper_file = open(output_helper_filename, 'wb')
601 data_helper_file.write(_LICENSE)
602 data_helper_file.write(_DO_NOT_EDIT_WARNING)
603 write_header_file_guard(data_helper_file, output_helper_filename, path, True)
604 data_helper_file.write('#include "gpu/config/%s"\n\n' %
605 feature_header_filename)
606 data_helper_file.write('namespace gpu {\n')
607 data_exception_file = open(output_exception_filename, 'wb')
608 data_exception_file.write(_LICENSE)
609 data_exception_file.write(_DO_NOT_EDIT_WARNING)
610 write_header_file_guard(data_exception_file, output_exception_filename, path,
611 True)
612 data_exception_file.write('namespace gpu {\n')
613 data_file.write('namespace gpu {\n\n')
614 data_file.write('const char k%sVersion[] = "%s";\n\n' %
615 (list_tag, json_data['version']))
616 entry_count = len(json_data['entries'])
617 data_file.write('const size_t k%sEntryCount = %d;\n' %
618 (list_tag, entry_count))
619 data_file.write('const GpuControlList::Entry k%sEntries[%d] = {\n' %
620 (list_tag, entry_count))
621 ids = []
622 for index in range(entry_count):
623 entry = json_data['entries'][index]
624 entry_id = entry['id']
625 assert entry_id not in ids
626 ids.append(entry_id)
627 write_entry(entry, total_features, feature_tag,
628 data_file, data_helper_file, data_exception_file)
629 data_file.write('};\n')
630 data_file.write('} // namespace gpu\n')
631 data_file.close()
632 data_helper_file.write('} // namespace gpu\n')
633 write_header_file_guard(data_helper_file, output_helper_filename, path, False)
634 data_helper_file.close()
635 data_exception_file.write('} // namespace gpu\n')
636 write_header_file_guard(data_exception_file, output_exception_filename, path,
637 False)
638 data_exception_file.close()
639 data_header_file = open(output_header_filename, 'wb')
640 data_header_file.write(_LICENSE)
641 data_header_file.write(_DO_NOT_EDIT_WARNING)
642 write_header_file_guard(data_header_file, output_header_filename, path, True)
643 if export_tag == 'CONTENT_EXPORT ':
644 data_header_file.write('#include "content/common/content_export.h"\n')
645 data_header_file.write('#include "gpu/config/gpu_control_list.h"\n\n')
646 data_header_file.write('\n')
647 data_header_file.write('namespace gpu {\n')
648 data_header_file.write('%sextern const char k%sVersion[];\n' %
649 (export_tag, list_tag))
650 data_header_file.write('%sextern const size_t k%sEntryCount;\n' %
651 (export_tag, list_tag))
652 data_header_file.write(
653 '%sextern const GpuControlList::Entry k%sEntries[];\n' %
654 (export_tag, list_tag))
655 data_header_file.write('} // namespace gpu\n')
656 write_header_file_guard(data_header_file, output_header_filename, path, False)
657 data_header_file.close()
658 format_files([output_header_filename, output_data_filename,
659 output_helper_filename, output_exception_filename])
660
661 os.chdir(current_dir)
662
663
664 def process_software_rendering_list():
665 total_features = load_software_rendering_list_features('gpu_feature_type.h')
666 process_json_file('software_rendering_list.json', 'SoftwareRenderingList',
667 'gpu_feature_type.h', total_features, 'GPU_FEATURE_TYPE_',
668 'software_rendering_list_autogen.h',
669 'software_rendering_list_autogen.cc',
670 'software_rendering_list_arrays_and_structs_autogen.h',
671 'software_rendering_list_exceptions_autogen.h',
672 'gpu/config', 'GPU_EXPORT ')
673
674
675 def process_gpu_driver_bug_list():
676 total_features = load_gpu_driver_bug_workarounds(
677 'gpu_driver_bug_workaround_type.h')
678 process_json_file('gpu_driver_bug_list.json', 'GpuDriverBugList',
679 'gpu_driver_bug_workaround_type.h', total_features, '',
680 'gpu_driver_bug_list_autogen.h',
681 'gpu_driver_bug_list_autogen.cc',
682 'gpu_driver_bug_list_arrays_and_structs_autogen.h',
683 'gpu_driver_bug_list_exceptions_autogen.h',
684 'gpu/config', 'GPU_EXPORT ')
685
686
687 def process_gpu_control_list_testing():
688 total_features = ['test_feature_0', 'test_feature_1', 'test_feature_2']
689 process_json_file('gpu_control_list_testing.json', 'GpuControlListTesting',
690 'gpu_control_list_testing_data.h', total_features, '',
691 'gpu_control_list_testing_autogen.h',
692 'gpu_control_list_testing_autogen.cc',
693 'gpu_control_list_testing_arrays_and_structs_autogen.h',
694 'gpu_control_list_testing_exceptions_autogen.h',
695 'gpu/config', '')
696
697
698 def process_gpu_data_manager_testing():
699 total_features = load_software_rendering_list_features('gpu_feature_type.h')
700 process_json_file('gpu_data_manager_testing.json', 'GpuDataManagerTesting',
701 'gpu_feature_type.h', total_features, 'GPU_FEATURE_TYPE_',
702 'gpu_data_manager_testing_autogen.h',
703 'gpu_data_manager_testing_autogen.cc',
704 'gpu_data_manager_testing_arrays_and_structs_autogen.h',
705 'gpu_data_manager_testing_exceptions_autogen.h',
706 'content/browser/gpu', '')
707
708
709 def write_test_entry_enums(input_json_filename, output_entry_enums_filename,
710 path, list_tag):
711 current_dir = os.getcwd()
712 os.chdir('../../' + path) # assume python script is under gou/config
713
714 json_file = open(input_json_filename, 'rb')
715 json_data = json.load(json_file)
716 json_file.close()
717
718 enum_file = open(output_entry_enums_filename, 'wb')
719 enum_file.write(_LICENSE)
720 enum_file.write(_DO_NOT_EDIT_WARNING)
721 write_header_file_guard(enum_file, output_entry_enums_filename, path, True)
722 enum_file.write('namespace gpu {\n')
723 enum_file.write('enum %sEntryEnum {\n' % list_tag)
724 entry_count = len(json_data['entries'])
725 for index in range(entry_count):
726 entry = json_data['entries'][index]
727 entry_id = entry['id']
728 description = entry['description']
729 assert(index + 1 == int(entry_id))
730 description = 'k' + description
731 description = description.replace('.', '_')
732 enum_file.write(' %s = %d,\n' % (description, index))
733 enum_file.write('};\n')
734 enum_file.write('} // namespace gpu\n')
735 write_header_file_guard(enum_file, output_entry_enums_filename, path, False)
736 enum_file.close()
737 format_files([output_entry_enums_filename])
738
739 os.chdir(current_dir)
740
741
742 def main():
743 dir_path = os.path.dirname(os.path.realpath(__file__))
744 os.chdir(dir_path)
745 process_software_rendering_list()
746 process_gpu_driver_bug_list()
747 process_gpu_control_list_testing()
748 write_test_entry_enums('gpu_control_list_testing.json',
749 'gpu_control_list_testing_entry_enums_autogen.h',
750 'gpu/config',
751 'GpuControlListTesting')
752 process_gpu_data_manager_testing()
753 write_test_entry_enums('gpu_data_manager_testing.json',
754 'gpu_data_manager_testing_entry_enums_autogen.h',
755 'content/browser/gpu',
756 'GpuDataManagerTesting')
757
758
759 if __name__ == '__main__':
760 sys.exit(main())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698