diff options
Diffstat (limited to 'toolkit/components/telemetry/gen-event-enum.py')
-rw-r--r-- | toolkit/components/telemetry/gen-event-enum.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/gen-event-enum.py b/toolkit/components/telemetry/gen-event-enum.py new file mode 100644 index 000000000..775ff8475 --- /dev/null +++ b/toolkit/components/telemetry/gen-event-enum.py @@ -0,0 +1,73 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Write out C++ enum definitions that represent the different event types. +# +# The events are defined in files provided as command-line arguments. + +from __future__ import print_function + +import sys +import parse_events + +banner = """/* This file is auto-generated, see gen-event-enum.py. */ +""" + +file_header = """\ +#ifndef mozilla_TelemetryEventEnums_h +#define mozilla_TelemetryEventEnums_h +namespace mozilla { +namespace Telemetry { +namespace EventID { +""" + +file_footer = """\ +} // namespace EventID +} // namespace mozilla +} // namespace Telemetry +#endif // mozilla_TelemetryEventEnums_h +""" + +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) + +if __name__ == '__main__': + main(sys.stdout, *sys.argv[1:]) |