Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)