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 5"""A template for generating hash decoding code.""" 6 7import codegen 8 9HEADER = codegen.Template( 10basename="ukm_decode.h", 11file_template=""" 12// Generated from gen_builders.py. DO NOT EDIT! 13// source: ukm.xml 14 15#ifndef {file.guard_path} 16#define {file.guard_path} 17 18#include <cstdint> 19#include <map> 20 21namespace ukm {{ 22namespace builders {{ 23 24typedef std::map<uint64_t, const char*> MetricDecodeMap; 25struct EntryDecoder {{ 26 const char* name; 27 const MetricDecodeMap metric_map; 28}}; 29typedef std::map<uint64_t, EntryDecoder> DecodeMap; 30DecodeMap CreateDecodeMap(); 31 32}} // namespace builders 33}} // namespace ukm 34 35#endif // {file.guard_path} 36""", 37event_template="", 38metric_template="") 39 40IMPL = codegen.Template( 41basename="ukm_decode.cc", 42file_template=""" 43// Generated from gen_builders.py. DO NOT EDIT! 44// source: ukm.xml 45 46#include "{file.dir_path}/ukm_decode.h" 47#include "{file.dir_path}/ukm_builders.h" 48 49namespace ukm {{ 50namespace builders {{ 51 52std::map<uint64_t, EntryDecoder> CreateDecodeMap() {{ 53 return {{ 54 {event_code} 55 }}; 56}} 57 58}} // namespace builders 59}} // namespace ukm 60""", 61event_template=""" 62 {{ 63 UINT64_C({event.hash}), 64 {{ 65 {event.name}::kEntryName, 66 {{ 67 {metric_code} 68 }} 69 }} 70 }}, 71""", 72metric_template=""" 73 {{{event.name}::k{metric.name}NameHash, {event.name}::k{metric.name}Name}}, 74""") 75 76 77def WriteFiles(outdir, relpath, data): 78 HEADER.WriteFile(outdir, relpath, data) 79 IMPL.WriteFile(outdir, relpath, data) 80