def main(output, *filenames): # Load the event data. if len(filenames) > 1: raise Exception('We don\'t support loading from more than one file.') try: events = parse_events.load_events(filenames[0]) except ParserError as ex: print("\nError processing events:\n" + str(ex) + "\n") sys.exit(1) # Write the scalar data file. print(banner, file=output) print(file_header, file=output) # Write the extra keys table. string_table = StringTable() extra_table = write_extra_table(events, output, string_table) print("", file=output) # Write a table with the common event data. write_common_event_table(events, output, string_table, extra_table) print("", file=output) # Write the data for individual events. write_event_table(events, output, string_table) print("", file=output) # Write the string table. string_table_name = "gEventsStringTable" string_table.writeDefinition(output, string_table_name) static_assert(output, "sizeof(%s) <= UINT32_MAX" % string_table_name, "index overflow") print("", file=output) print(file_footer, file=output)
def main(output, *filenames): # Load the event data. if len(filenames) > 1: raise Exception('We don\'t support loading from more than one file.') events = parse_events.load_events(filenames[0]) # Write the scalar data file. print(banner, file=output) print(file_header, file=output) # Write the extra keys table. string_table = StringTable() extra_table = write_extra_table(events, output, string_table) print("", file=output) # Write a table with the common event data. write_common_event_table(events, output, string_table, extra_table) print("", file=output) # Write the data for individual events. write_event_table(events, output, string_table) print("", file=output) # Write the string table. string_table_name = "gEventsStringTable" string_table.writeDefinition(output, string_table_name) static_assert(output, "sizeof(%s) <= UINT32_MAX" % string_table_name, "index overflow") print("", file=output) print(file_footer, file=output)
def generate_JSON_definitions(output, *filenames): """ Write the event definitions to a JSON file. :param output: the file to write the content to. :param filenames: a list of filenames provided by the build system. We only support a single file. """ # Load the event data. if len(filenames) > 1: raise Exception('We don\'t support loading from more than one file.') try: events = parse_events.load_events(filenames[0], True) except ParserError as ex: print("\nError processing events:\n" + str(ex) + "\n") sys.exit(1) event_definitions = OrderedDict() for event in events: category = event.category if category not in event_definitions: event_definitions[category] = OrderedDict() event_definitions[category][event.name] = OrderedDict({ 'methods': event.methods, 'objects': event.objects, 'extra_keys': event.extra_keys, 'record_on_release': True if event.dataset_short == 'opt-out' else False, # We don't expire dynamic-builtin scalars: they're only meant for # use in local developer builds anyway. They will expire when rebuilding. 'expired': False, }) json.dump(event_definitions, output)
def main(output, *filenames): # Load the events first. if len(filenames) > 1: raise Exception('We don\'t support loading from more than one file.') try: events = parse_events.load_events(filenames[0], True) except ParserError as ex: print("\nError processing events:\n" + str(ex) + "\n") sys.exit(1) grouped = dict() index = 0 for e in events: category = e.category if category not in grouped: grouped[category] = [] grouped[category].append((index, e)) index += len(e.enum_labels) # Write the enum file. print(banner, file=output) print(file_header, file=output) for category, indexed in grouped.iteritems(): category_cpp = indexed[0][1].category_cpp print("// category: %s" % category, file=output) print("enum class %s : uint32_t {" % category_cpp, file=output) for event_index, e in indexed: cpp_guard = e.cpp_guard if cpp_guard: print("#if defined(%s)" % cpp_guard, file=output) for offset, label in enumerate(e.enum_labels): print(" %s = %d," % (label, event_index + offset), file=output) if cpp_guard: print("#endif", file=output) print("};\n", file=output) print("#if defined(_MSC_VER) && !defined(__clang__)", file=output) print("const uint32_t EventCount = %d;" % index, file=output) print("#else", file=output) print("constexpr uint32_t EventCount = %d;" % index, file=output) print("#endif\n", file=output) print(file_footer, file=output)
def main(output, *filenames): # Load the events first. if len(filenames) > 1: raise Exception('We don\'t support loading from more than one file.') try: events = parse_events.load_events(filenames[0]) except ParserError as ex: print("\nError processing events:\n" + str(ex) + "\n") sys.exit(1) grouped = dict() index = 0 for e in events: category = e.category if category not in grouped: grouped[category] = [] grouped[category].append((index, e)) index += len(e.enum_labels) # Write the enum file. print(banner, file=output) print(file_header, file=output) for category, indexed in grouped.iteritems(): category_cpp = indexed[0][1].category_cpp print("// category: %s" % category, file=output) print("enum class %s : uint32_t {" % category_cpp, file=output) for event_index, e in indexed: cpp_guard = e.cpp_guard if cpp_guard: print("#if defined(%s)" % cpp_guard, file=output) for offset, label in enumerate(e.enum_labels): print(" %s = %d," % (label, event_index + offset), file=output) if cpp_guard: print("#endif", file=output) print("};\n", file=output) print("const uint32_t EventCount = %d;\n" % index, file=output) print(file_footer, file=output)
def main(output, *filenames): # Load the events first. if len(filenames) > 1: raise Exception('We don\'t support loading from more than one file.') events = parse_events.load_events(filenames[0]) grouped = dict() index = 0 for e in events: category = e.category if not category in grouped: grouped[category] = [] grouped[category].append((index, e)) index += len(e.enum_labels) # Write the enum file. print(banner, file=output) print(file_header, file=output) for category, indexed in grouped.iteritems(): category_cpp = indexed[0][1].category_cpp print("// category: %s" % category, file=output) print("enum class %s : uint32_t {" % category_cpp, file=output) for event_index, e in indexed: cpp_guard = e.cpp_guard if cpp_guard: print("#if defined(%s)" % cpp_guard, file=output) for offset, label in enumerate(e.enum_labels): print(" %s = %d," % (label, event_index + offset), file=output) if cpp_guard: print("#endif", file=output) print("};\n", file=output) print("const uint32_t EventCount = %d;\n" % index, file=output) print(file_footer, file=output)