summaryrefslogtreecommitdiff
path: root/chromium/tools/metrics/histograms/merge_xml.py
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/tools/metrics/histograms/merge_xml.py
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-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-xchromium/tools/metrics/histograms/merge_xml.py46
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__':