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

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

Issue 2823503002: Only generate GPU json data entries related to a given platform at build time. (Closed)
Patch Set: update 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
« no previous file with comments | « gpu/config/gpu_driver_bug_list_unittest.cc ('k') | gpu/config/software_rendering_list.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2017 The Chromium Authors. All rights reserved. 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 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import json 6 import json
7 import os 7 import os
8 import platform 8 import platform
9 import sys 9 import sys
10 from optparse import OptionParser 10 from optparse import OptionParser
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 data_helper_file.write('%s, // gl_reset_notification_strategy\n' % 493 data_helper_file.write('%s, // gl_reset_notification_strategy\n' %
494 gl_reset_notification_strategy) 494 gl_reset_notification_strategy)
495 write_boolean_value(direct_rendering, 'direct_rendering', data_helper_file) 495 write_boolean_value(direct_rendering, 'direct_rendering', data_helper_file)
496 write_version(gpu_count, 'gpu_count', data_helper_file) 496 write_version(gpu_count, 'gpu_count', data_helper_file)
497 data_helper_file.write('};\n\n') 497 data_helper_file.write('};\n\n')
498 # reference more data in entry 498 # reference more data in entry
499 data_file.write('&%s, // more data\n' % var_name) 499 data_file.write('&%s, // more data\n' % var_name)
500 500
501 501
502 def write_entry(entry, total_feature_set, feature_name_prefix, 502 def write_entry(entry, total_feature_set, feature_name_prefix,
503 data_file, data_helper_file, data_exception_file): 503 data_file, data_helper_file, data_exception_file):
504 data_file.write('{\n') 504 data_file.write('{\n')
505 # ID 505 # ID
506 entry_id = entry['id'] 506 entry_id = entry['id']
507 data_file.write('%d, // id\n' % entry_id) 507 data_file.write('%d, // id\n' % entry_id)
508 data_file.write('"%s",\n' % entry['description']); 508 data_file.write('"%s",\n' % entry['description']);
509 # Features 509 # Features
510 if 'features' in entry: 510 if 'features' in entry:
511 features = entry['features'] 511 features = entry['features']
512 feature_set = get_feature_set(features, total_feature_set) 512 feature_set = get_feature_set(features, total_feature_set)
513 data_file.write('arraysize(kFeatureListForEntry%d), // features size\n' % 513 data_file.write('arraysize(kFeatureListForEntry%d), // features size\n' %
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 if begin: 575 if begin:
576 file.write('#ifndef %s\n#define %s\n\n' % (token, token)) 576 file.write('#ifndef %s\n#define %s\n\n' % (token, token))
577 else: 577 else:
578 file.write('\n#endif // %s\n' % token) 578 file.write('\n#endif // %s\n' % token)
579 579
580 580
581 def process_json_file(json_filepath, list_tag, 581 def process_json_file(json_filepath, list_tag,
582 feature_header_filename, total_features, feature_tag, 582 feature_header_filename, total_features, feature_tag,
583 output_header_filepath, output_data_filepath, 583 output_header_filepath, output_data_filepath,
584 output_helper_filepath, output_exception_filepath, path, 584 output_helper_filepath, output_exception_filepath, path,
585 export_tag, git_format): 585 export_tag, git_format, os_filter):
586 output_header_filename = os.path.basename(output_header_filepath) 586 output_header_filename = os.path.basename(output_header_filepath)
587 output_helper_filename = os.path.basename(output_helper_filepath) 587 output_helper_filename = os.path.basename(output_helper_filepath)
588 output_exception_filename = os.path.basename(output_exception_filepath) 588 output_exception_filename = os.path.basename(output_exception_filepath)
589 json_file = open(json_filepath, 'rb') 589 json_file = open(json_filepath, 'rb')
590 json_data = json.load(json_file) 590 json_data = json.load(json_file)
591 json_file.close() 591 json_file.close()
592 data_file = open(output_data_filepath, 'wb') 592 data_file = open(output_data_filepath, 'wb')
593 data_file.write(_LICENSE) 593 data_file.write(_LICENSE)
594 data_file.write(_DO_NOT_EDIT_WARNING) 594 data_file.write(_DO_NOT_EDIT_WARNING)
595 data_file.write('#include "%s/%s"\n\n' % (path, output_header_filename)) 595 data_file.write('#include "%s/%s"\n\n' % (path, output_header_filename))
596 data_file.write('#include "%s/%s"\n' % (path, output_helper_filename)) 596 data_file.write('#include "%s/%s"\n' % (path, output_helper_filename))
597 data_file.write('#include "%s/%s"\n\n' % (path, output_exception_filename)) 597 data_file.write('#include "%s/%s"\n\n' % (path, output_exception_filename))
598 data_helper_file = open(output_helper_filepath, 'wb') 598 data_helper_file = open(output_helper_filepath, 'wb')
599 data_helper_file.write(_LICENSE) 599 data_helper_file.write(_LICENSE)
600 data_helper_file.write(_DO_NOT_EDIT_WARNING) 600 data_helper_file.write(_DO_NOT_EDIT_WARNING)
601 write_header_file_guard(data_helper_file, output_helper_filename, path, True) 601 write_header_file_guard(data_helper_file, output_helper_filename, path, True)
602 data_helper_file.write('#include "gpu/config/%s"\n\n' % 602 data_helper_file.write('#include "gpu/config/%s"\n\n' %
603 feature_header_filename) 603 feature_header_filename)
604 data_helper_file.write('namespace gpu {\n') 604 data_helper_file.write('namespace gpu {\n')
605 data_exception_file = open(output_exception_filepath, 'wb') 605 data_exception_file = open(output_exception_filepath, 'wb')
606 data_exception_file.write(_LICENSE) 606 data_exception_file.write(_LICENSE)
607 data_exception_file.write(_DO_NOT_EDIT_WARNING) 607 data_exception_file.write(_DO_NOT_EDIT_WARNING)
608 write_header_file_guard(data_exception_file, output_exception_filename, path, 608 write_header_file_guard(data_exception_file, output_exception_filename, path,
609 True) 609 True)
610 data_exception_file.write('namespace gpu {\n') 610 data_exception_file.write('namespace gpu {\n')
611 data_file.write('namespace gpu {\n\n') 611 data_file.write('namespace gpu {\n\n')
612 data_file.write('const char k%sVersion[] = "%s";\n\n' % 612 data_file.write('const char k%sVersion[] = "%s";\n\n' %
613 (list_tag, json_data['version'])) 613 (list_tag, json_data['version']))
614 entry_count = len(json_data['entries']) 614 data_file.write('const GpuControlList::Entry k%sEntries[] = {\n' % list_tag)
615 data_file.write('const size_t k%sEntryCount = %d;\n' %
616 (list_tag, entry_count))
617 data_file.write('const GpuControlList::Entry k%sEntries[%d] = {\n' %
618 (list_tag, entry_count))
619 ids = [] 615 ids = []
620 for index in range(entry_count): 616 entry_count = 0
617 for index in range(len(json_data['entries'])):
621 entry = json_data['entries'][index] 618 entry = json_data['entries'][index]
622 entry_id = entry['id'] 619 entry_id = entry['id']
623 assert entry_id not in ids 620 assert entry_id not in ids
624 ids.append(entry_id) 621 ids.append(entry_id)
622 if os_filter != None and 'os' in entry and entry['os']['type'] != os_filter:
623 continue
624 entry_count += 1
625 write_entry(entry, total_features, feature_tag, 625 write_entry(entry, total_features, feature_tag,
626 data_file, data_helper_file, data_exception_file) 626 data_file, data_helper_file, data_exception_file)
627 data_file.write('};\n') 627 data_file.write('};\n')
628 data_file.write('const size_t k%sEntryCount = %d;\n' %
629 (list_tag, entry_count))
628 data_file.write('} // namespace gpu\n') 630 data_file.write('} // namespace gpu\n')
629 data_file.close() 631 data_file.close()
630 data_helper_file.write('} // namespace gpu\n') 632 data_helper_file.write('} // namespace gpu\n')
631 write_header_file_guard(data_helper_file, output_helper_filename, path, False) 633 write_header_file_guard(data_helper_file, output_helper_filename, path, False)
632 data_helper_file.close() 634 data_helper_file.close()
633 data_exception_file.write('} // namespace gpu\n') 635 data_exception_file.write('} // namespace gpu\n')
634 write_header_file_guard(data_exception_file, output_exception_filename, path, 636 write_header_file_guard(data_exception_file, output_exception_filename, path,
635 False) 637 False)
636 data_exception_file.close() 638 data_exception_file.close()
637 data_header_file = open(output_header_filepath, 'wb') 639 data_header_file = open(output_header_filepath, 'wb')
(...skipping 13 matching lines...) Expand all
651 '%sextern const GpuControlList::Entry k%sEntries[];\n' % 653 '%sextern const GpuControlList::Entry k%sEntries[];\n' %
652 (export_tag, list_tag)) 654 (export_tag, list_tag))
653 data_header_file.write('} // namespace gpu\n') 655 data_header_file.write('} // namespace gpu\n')
654 write_header_file_guard(data_header_file, output_header_filename, path, False) 656 write_header_file_guard(data_header_file, output_header_filename, path, False)
655 data_header_file.close() 657 data_header_file.close()
656 if git_format: 658 if git_format:
657 format_files([output_header_filepath, output_data_filepath, 659 format_files([output_header_filepath, output_data_filepath,
658 output_helper_filepath, output_exception_filepath]) 660 output_helper_filepath, output_exception_filepath])
659 661
660 662
661 def process_software_rendering_list(script_dir, output_dir): 663 def process_software_rendering_list(script_dir, output_dir, os_filter):
662 total_features = load_software_rendering_list_features( 664 total_features = load_software_rendering_list_features(
663 os.path.join(script_dir, 'gpu_feature_type.h')) 665 os.path.join(script_dir, 'gpu_feature_type.h'))
664 process_json_file( 666 process_json_file(
665 os.path.join(script_dir, 'software_rendering_list.json'), 667 os.path.join(script_dir, 'software_rendering_list.json'),
666 'SoftwareRenderingList', 668 'SoftwareRenderingList',
667 'gpu_feature_type.h', 669 'gpu_feature_type.h',
668 total_features, 670 total_features,
669 'GPU_FEATURE_TYPE_', 671 'GPU_FEATURE_TYPE_',
670 os.path.join(output_dir, 'software_rendering_list_autogen.h'), 672 os.path.join(output_dir, 'software_rendering_list_autogen.h'),
671 os.path.join(output_dir, 'software_rendering_list_autogen.cc'), 673 os.path.join(output_dir, 'software_rendering_list_autogen.cc'),
672 os.path.join(output_dir, 674 os.path.join(output_dir,
673 'software_rendering_list_arrays_and_structs_autogen.h'), 675 'software_rendering_list_arrays_and_structs_autogen.h'),
674 os.path.join(output_dir, 'software_rendering_list_exceptions_autogen.h'), 676 os.path.join(output_dir, 'software_rendering_list_exceptions_autogen.h'),
675 'gpu/config', 677 'gpu/config',
676 'GPU_EXPORT ', 678 'GPU_EXPORT ',
677 False) 679 False,
680 os_filter)
678 681
679 682
680 def process_gpu_driver_bug_list(script_dir, output_dir): 683 def process_gpu_driver_bug_list(script_dir, output_dir, os_filter):
681 total_features = load_gpu_driver_bug_workarounds( 684 total_features = load_gpu_driver_bug_workarounds(
682 os.path.join(script_dir, 'gpu_driver_bug_workaround_type.h')) 685 os.path.join(script_dir, 'gpu_driver_bug_workaround_type.h'))
683 process_json_file( 686 process_json_file(
684 os.path.join(script_dir, 'gpu_driver_bug_list.json'), 687 os.path.join(script_dir, 'gpu_driver_bug_list.json'),
685 'GpuDriverBugList', 688 'GpuDriverBugList',
686 'gpu_driver_bug_workaround_type.h', 689 'gpu_driver_bug_workaround_type.h',
687 total_features, 690 total_features,
688 '', 691 '',
689 os.path.join(output_dir, 'gpu_driver_bug_list_autogen.h'), 692 os.path.join(output_dir, 'gpu_driver_bug_list_autogen.h'),
690 os.path.join(output_dir, 'gpu_driver_bug_list_autogen.cc'), 693 os.path.join(output_dir, 'gpu_driver_bug_list_autogen.cc'),
691 os.path.join(output_dir, 694 os.path.join(output_dir,
692 'gpu_driver_bug_list_arrays_and_structs_autogen.h'), 695 'gpu_driver_bug_list_arrays_and_structs_autogen.h'),
693 os.path.join(output_dir, 'gpu_driver_bug_list_exceptions_autogen.h'), 696 os.path.join(output_dir, 'gpu_driver_bug_list_exceptions_autogen.h'),
694 'gpu/config', 697 'gpu/config',
695 'GPU_EXPORT ', 698 'GPU_EXPORT ',
696 False) 699 False,
700 os_filter)
697 701
698 702
699 def process_gpu_control_list_testing(script_dir, output_dir): 703 def process_gpu_control_list_testing(script_dir, output_dir):
700 total_features = ['test_feature_0', 'test_feature_1', 'test_feature_2'] 704 total_features = ['test_feature_0', 'test_feature_1', 'test_feature_2']
701 process_json_file( 705 process_json_file(
702 os.path.join(script_dir, 'gpu_control_list_testing.json'), 706 os.path.join(script_dir, 'gpu_control_list_testing.json'),
703 'GpuControlListTesting', 707 'GpuControlListTesting',
704 'gpu_control_list_testing_data.h', 708 'gpu_control_list_testing_data.h',
705 total_features, 709 total_features,
706 '', 710 '',
707 os.path.join(output_dir, 'gpu_control_list_testing_autogen.h'), 711 os.path.join(output_dir, 'gpu_control_list_testing_autogen.h'),
708 os.path.join(output_dir, 'gpu_control_list_testing_autogen.cc'), 712 os.path.join(output_dir, 'gpu_control_list_testing_autogen.cc'),
709 os.path.join(output_dir, 713 os.path.join(output_dir,
710 'gpu_control_list_testing_arrays_and_structs_autogen.h'), 714 'gpu_control_list_testing_arrays_and_structs_autogen.h'),
711 os.path.join(output_dir, 'gpu_control_list_testing_exceptions_autogen.h'), 715 os.path.join(output_dir, 'gpu_control_list_testing_exceptions_autogen.h'),
712 'gpu/config', 716 'gpu/config',
713 '', 717 '',
714 True) 718 True,
719 None)
715 720
716 721
717 def process_gpu_data_manager_testing(script_dir, output_dir): 722 def process_gpu_data_manager_testing(script_dir, output_dir):
718 total_features = load_software_rendering_list_features( 723 total_features = load_software_rendering_list_features(
719 os.path.join(script_dir, 'gpu_feature_type.h')) 724 os.path.join(script_dir, 'gpu_feature_type.h'))
720 process_json_file( 725 process_json_file(
721 os.path.join(output_dir, 'gpu_data_manager_testing.json'), 726 os.path.join(output_dir, 'gpu_data_manager_testing.json'),
722 'GpuDataManagerTesting', 727 'GpuDataManagerTesting',
723 'gpu_feature_type.h', 728 'gpu_feature_type.h',
724 total_features, 729 total_features,
725 'GPU_FEATURE_TYPE_', 730 'GPU_FEATURE_TYPE_',
726 os.path.join(output_dir, 'gpu_data_manager_testing_autogen.h'), 731 os.path.join(output_dir, 'gpu_data_manager_testing_autogen.h'),
727 os.path.join(output_dir, 'gpu_data_manager_testing_autogen.cc'), 732 os.path.join(output_dir, 'gpu_data_manager_testing_autogen.cc'),
728 os.path.join(output_dir, 733 os.path.join(output_dir,
729 'gpu_data_manager_testing_arrays_and_structs_autogen.h'), 734 'gpu_data_manager_testing_arrays_and_structs_autogen.h'),
730 os.path.join(output_dir, 'gpu_data_manager_testing_exceptions_autogen.h'), 735 os.path.join(output_dir, 'gpu_data_manager_testing_exceptions_autogen.h'),
731 'content/browser/gpu', 736 'content/browser/gpu',
732 '', 737 '',
733 True) 738 True,
739 None)
734 740
735 741
736 def write_test_entry_enums(input_json_filepath, output_entry_enums_filepath, 742 def write_test_entry_enums(input_json_filepath, output_entry_enums_filepath,
737 path, list_tag): 743 path, list_tag):
738 json_file = open(input_json_filepath, 'rb') 744 json_file = open(input_json_filepath, 'rb')
739 json_data = json.load(json_file) 745 json_data = json.load(json_file)
740 json_file.close() 746 json_file.close()
741 747
742 output_entry_enums_filename = os.path.basename(output_entry_enums_filepath) 748 output_entry_enums_filename = os.path.basename(output_entry_enums_filepath)
743 enum_file = open(output_entry_enums_filepath, 'wb') 749 enum_file = open(output_entry_enums_filepath, 'wb')
(...skipping 20 matching lines...) Expand all
764 770
765 def main(argv): 771 def main(argv):
766 parser = OptionParser() 772 parser = OptionParser()
767 parser.add_option("--output-dir", 773 parser.add_option("--output-dir",
768 help="output directory for SoftwareRenderingList and " 774 help="output directory for SoftwareRenderingList and "
769 "GpuDriverBugList data files. " 775 "GpuDriverBugList data files. "
770 "If unspecified, these files are not generated.") 776 "If unspecified, these files are not generated.")
771 parser.add_option("--skip-testing-data", action="store_false", 777 parser.add_option("--skip-testing-data", action="store_false",
772 dest="generate_testing_data", default=True, 778 dest="generate_testing_data", default=True,
773 help="skip testing data generation.") 779 help="skip testing data generation.")
780 parser.add_option("--os-filter",
781 help="only output entries applied to the specified os.")
774 (options, args) = parser.parse_args(args=argv) 782 (options, args) = parser.parse_args(args=argv)
775 783
776 script_dir = os.path.dirname(os.path.realpath(__file__)) 784 script_dir = os.path.dirname(os.path.realpath(__file__))
777 785
778 if options.output_dir != None: 786 if options.output_dir != None:
779 process_software_rendering_list(script_dir, options.output_dir) 787 process_software_rendering_list(
780 process_gpu_driver_bug_list(script_dir, options.output_dir) 788 script_dir, options.output_dir, options.os_filter)
789 process_gpu_driver_bug_list(
790 script_dir, options.output_dir, options.os_filter)
781 791
782 if options.generate_testing_data: 792 if options.generate_testing_data:
783 # Testing data files are generated by calling the script manually. 793 # Testing data files are generated by calling the script manually.
784 process_gpu_control_list_testing(script_dir, script_dir) 794 process_gpu_control_list_testing(script_dir, script_dir)
785 write_test_entry_enums( 795 write_test_entry_enums(
786 os.path.join(script_dir, 'gpu_control_list_testing.json'), 796 os.path.join(script_dir, 'gpu_control_list_testing.json'),
787 os.path.join(script_dir, 797 os.path.join(script_dir,
788 'gpu_control_list_testing_entry_enums_autogen.h'), 798 'gpu_control_list_testing_entry_enums_autogen.h'),
789 'gpu/config', 799 'gpu/config',
790 'GpuControlListTesting') 800 'GpuControlListTesting')
791 chrome_root_dir = os.path.abspath(os.path.join(script_dir, '../../')) 801 chrome_root_dir = os.path.abspath(os.path.join(script_dir, '../../'))
792 gpu_data_manager_dir = os.path.join(chrome_root_dir, 'content/browser/gpu') 802 gpu_data_manager_dir = os.path.join(chrome_root_dir, 'content/browser/gpu')
793 process_gpu_data_manager_testing(script_dir, gpu_data_manager_dir) 803 process_gpu_data_manager_testing(script_dir, gpu_data_manager_dir)
794 write_test_entry_enums( 804 write_test_entry_enums(
795 os.path.join(gpu_data_manager_dir, 'gpu_data_manager_testing.json'), 805 os.path.join(gpu_data_manager_dir, 'gpu_data_manager_testing.json'),
796 os.path.join(gpu_data_manager_dir, 806 os.path.join(gpu_data_manager_dir,
797 'gpu_data_manager_testing_entry_enums_autogen.h'), 807 'gpu_data_manager_testing_entry_enums_autogen.h'),
798 'content/browser/gpu', 808 'content/browser/gpu',
799 'GpuDataManagerTesting') 809 'GpuDataManagerTesting')
800 810
801 811
802 if __name__ == '__main__': 812 if __name__ == '__main__':
803 sys.exit(main(sys.argv[1:])) 813 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « gpu/config/gpu_driver_bug_list_unittest.cc ('k') | gpu/config/software_rendering_list.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698