diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/tools/metrics/histograms/merge_xml.py | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/tools/metrics/histograms/merge_xml.py')
-rwxr-xr-x | chromium/tools/metrics/histograms/merge_xml.py | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/chromium/tools/metrics/histograms/merge_xml.py b/chromium/tools/metrics/histograms/merge_xml.py index 71fc1327469..de5441c8935 100755 --- a/chromium/tools/metrics/histograms/merge_xml.py +++ b/chromium/tools/metrics/histograms/merge_xml.py @@ -6,10 +6,14 @@ """A script to merge multiple source xml files into a single histograms.xml.""" import argparse +import os +import sys import xml.dom.minidom import expand_owners import extract_histograms +import histograms_print_style +import populate_enums def GetElementsByTagName(trees, tag): @@ -25,6 +29,32 @@ def GetElementsByTagName(trees, tag): return list(e for t in trees for e in iterator(t, tag, 2)) +def GetEnumsNodes(doc, trees): + """Gets all enums from a set of DOM trees. + + If trees contain ukm events, populates a list of ints to the + "UkmEventNameHash" enum where each value is a ukm event name hash truncated + to 31 bits and each label is the corresponding event name. + + Args: + doc: The document to create the node in. + trees: A list of DOM trees. + Returns: + A list of enums DOM nodes. + """ + enums_list = GetElementsByTagName(trees, 'enums') + ukm_events = GetElementsByTagName( + GetElementsByTagName(trees, 'ukm-configuration'), 'event') + # Early return if there are not ukm events provided. MergeFiles have callers + # that do not pass ukm events so, in that case, we don't need to iterate + # the enum list. + if not ukm_events: + return enums_list + for enums in enums_list: + populate_enums.PopulateEnumsWithUkmEvents(doc, enums, ukm_events) + return enums_list + + def MakeNodeWithChildren(doc, tag, children): """Creates a DOM node with specified tag and child nodes. @@ -55,30 +85,38 @@ def MergeTrees(trees): doc.appendChild(MakeNodeWithChildren(doc, 'histogram-configuration', # This can result in the merged document having multiple <enums> and # similar sections, but scripts ignore these anyway. - GetElementsByTagName(trees, 'enums') + + GetEnumsNodes(doc, trees) + GetElementsByTagName(trees, 'histograms') + GetElementsByTagName(trees, 'histogram_suffixes_list'))) return doc -def MergeFiles(filenames): +def MergeFiles(filenames=[], files=[]): """Merges a list of histograms.xml files. Args: filenames: A list of histograms.xml filenames. + files: A list of histograms.xml file-like objects. Returns: A merged DOM tree. """ - trees = [xml.dom.minidom.parse(open(f)) for f in filenames] + all_files = files + [open(f) for f in filenames] + trees = [xml.dom.minidom.parse(f) for f in all_files] return MergeTrees(trees) +def PrettyPrintMergedFiles(filenames=[], files=[]): + return histograms_print_style.GetPrintStyle().PrettyPrintXml( + MergeFiles(filenames=filenames, files=files)) + + def main(): parser = argparse.ArgumentParser() parser.add_argument('inputs', nargs="+") parser.add_argument('--output', required=True) args = parser.parse_args() - MergeFiles(args.inputs).writexml(open(args.output, 'w')) + with open(args.output, 'w') as f: + f.write(PrettyPrintMergedFiles(args.inputs)) if __name__ == '__main__': |