decode_template.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # Copyright 2017 The Chromium Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. """A template for generating hash decoding code."""
  5. import codegen
  6. HEADER = codegen.Template(
  7. basename="ukm_decode.h",
  8. file_template="""
  9. // Generated from gen_builders.py. DO NOT EDIT!
  10. // source: ukm.xml
  11. #ifndef {file.guard_path}
  12. #define {file.guard_path}
  13. #include <cstdint>
  14. #include <map>
  15. namespace ukm {{
  16. namespace builders {{
  17. typedef std::map<uint64_t, const char*> MetricDecodeMap;
  18. struct EntryDecoder {{
  19. const char* name;
  20. const MetricDecodeMap metric_map;
  21. }};
  22. typedef std::map<uint64_t, EntryDecoder> DecodeMap;
  23. DecodeMap CreateDecodeMap();
  24. }} // namespace builders
  25. }} // namespace ukm
  26. #endif // {file.guard_path}
  27. """,
  28. event_template="",
  29. metric_template="")
  30. IMPL = codegen.Template(
  31. basename="ukm_decode.cc",
  32. file_template="""
  33. // Generated from gen_builders.py. DO NOT EDIT!
  34. // source: ukm.xml
  35. #include "{file.dir_path}/ukm_decode.h"
  36. #include "{file.dir_path}/ukm_builders.h"
  37. namespace ukm {{
  38. namespace builders {{
  39. std::map<uint64_t, EntryDecoder> CreateDecodeMap() {{
  40. return {{
  41. {event_code}
  42. }};
  43. }}
  44. }} // namespace builders
  45. }} // namespace ukm
  46. """,
  47. event_template="""
  48. {{
  49. UINT64_C({event.hash}),
  50. {{
  51. {event.name}::kEntryName,
  52. {{
  53. {metric_code}
  54. }}
  55. }}
  56. }},
  57. """,
  58. metric_template="""
  59. {{{event.name}::k{metric.name}NameHash, {event.name}::k{metric.name}Name}},
  60. """)
  61. def WriteFiles(outdir, relpath, data):
  62. HEADER.WriteFile(outdir, relpath, data)
  63. IMPL.WriteFile(outdir, relpath, data)