diff options
Diffstat (limited to 'toolkit/components/telemetry/build_scripts/gen_process_data.py')
-rw-r--r-- | toolkit/components/telemetry/build_scripts/gen_process_data.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/build_scripts/gen_process_data.py b/toolkit/components/telemetry/build_scripts/gen_process_data.py new file mode 100644 index 0000000000..2a494689ad --- /dev/null +++ b/toolkit/components/telemetry/build_scripts/gen_process_data.py @@ -0,0 +1,80 @@ +# 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 processes data for C++. The processes are defined +# in a file provided as a command-line argument. + +import collections +import sys + +from mozparsers.shared_telemetry_utils import ParserError, load_yaml_file + +# The banner/text at the top of the generated file. +banner = """/* This file is auto-generated from Telemetry build scripts, + see gen_process_data.py. */ +""" + +file_header = """\ +#ifndef mozilla_TelemetryProcessData_h +#define mozilla_TelemetryProcessData_h + +#include "mozilla/TelemetryProcessEnums.h" + +namespace mozilla { +namespace Telemetry { +""" + +file_footer = """ +} // namespace Telemetry +} // namespace mozilla +#endif // mozilla_TelemetryProcessData_h""" + + +def to_enum_label(name): + return name.title().replace("_", "") + + +def write_processes_data(processes, output): + def p(line): + print(line, file=output) + + processes = collections.OrderedDict(processes) + + p("static GeckoProcessType ProcessIDToGeckoProcessType[%d] = {" % len(processes)) + for i, (name, value) in enumerate(sorted(processes.items())): + p( + " /* %d: ProcessID::%s = */ %s," + % (i, to_enum_label(name), value["gecko_enum"]) + ) + p("};") + p("") + p("#if defined(_MSC_VER) && !defined(__clang__)") + p("static const char* const ProcessIDToString[%d] = {" % len(processes)) + p("#else") + p("static constexpr const char* ProcessIDToString[%d] = {" % len(processes)) + p("#endif") + for i, (name, value) in enumerate(sorted(processes.items())): + p(' /* %d: ProcessID::%s = */ "%s",' % (i, to_enum_label(name), name)) + p("};") + + +def main(output, *filenames): + if len(filenames) > 1: + raise Exception("We don't support loading from more than one file.") + + try: + processes = load_yaml_file(filenames[0]) + + # Write the process data file. + print(banner, file=output) + print(file_header, file=output) + write_processes_data(processes, output) + print(file_footer, file=output) + except ParserError as ex: + print("\nError generating processes data:\n" + str(ex) + "\n") + sys.exit(1) + + +if __name__ == "__main__": + main(sys.stdout, *sys.argv[1:]) |