builders_template.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. """Templates for generating builder classes for UKM entries."""
  5. import codegen
  6. HEADER = codegen.Template(basename="ukm_builders.h",
  7. file_template="""
  8. // Generated from gen_builders.py. DO NOT EDIT!
  9. // source: ukm.xml
  10. #ifndef {file.guard_path}
  11. #define {file.guard_path}
  12. #include <cstdint>
  13. #include "services/metrics/public/cpp/ukm_entry_builder_base.h"
  14. namespace ukm {{
  15. namespace builders {{
  16. {event_code}
  17. }} // namespace builders
  18. }} // namespace ukm
  19. #endif // {file.guard_path}
  20. """,
  21. event_template="""
  22. class {event.name} final : public ::ukm::internal::UkmEntryBuilderBase {{
  23. public:
  24. explicit {event.name}(ukm::SourceId source_id);
  25. explicit {event.name}(ukm::SourceIdObj source_id);
  26. ~{event.name}() override;
  27. static const char kEntryName[];
  28. static constexpr uint64_t kEntryNameHash = UINT64_C({event.hash});
  29. {metric_code}
  30. }};
  31. """,
  32. metric_template="""
  33. static const char k{metric.name}Name[];
  34. static constexpr uint64_t k{metric.name}NameHash = UINT64_C({metric.hash});
  35. {event.name}& Set{metric.name}(int64_t value);
  36. """)
  37. IMPL = codegen.Template(basename="ukm_builders.cc",
  38. file_template="""
  39. // Generated from gen_builders.py. DO NOT EDIT!
  40. // source: ukm.xml
  41. #include "{file.dir_path}ukm_builders.h"
  42. namespace ukm {{
  43. namespace builders {{
  44. {event_code}
  45. }} // namespace builders
  46. }} // namespace ukm
  47. """,
  48. event_template="""
  49. const char {event.name}::kEntryName[] = "{event.raw_name}";
  50. const uint64_t {event.name}::kEntryNameHash;
  51. {event.name}::{event.name}(ukm::SourceId source_id) :
  52. ::ukm::internal::UkmEntryBuilderBase(source_id, kEntryNameHash) {{
  53. }}
  54. {event.name}::{event.name}(ukm::SourceIdObj source_id) :
  55. ::ukm::internal::UkmEntryBuilderBase(source_id, kEntryNameHash) {{
  56. }}
  57. {event.name}::~{event.name}() = default;
  58. {metric_code}
  59. """,
  60. metric_template="""
  61. const char {event.name}::k{metric.name}Name[] = "{metric.raw_name}";
  62. const uint64_t {event.name}::k{metric.name}NameHash;
  63. {event.name}& {event.name}::Set{metric.name}(int64_t value) {{
  64. SetMetricInternal(k{metric.name}NameHash, value);
  65. return *this;
  66. }}
  67. """)
  68. def WriteFiles(outdir, relpath, data):
  69. HEADER.WriteFile(outdir, relpath, data)
  70. IMPL.WriteFile(outdir, relpath, data)