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/populate_enums.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/populate_enums.py')
-rw-r--r-- | chromium/tools/metrics/histograms/populate_enums.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/chromium/tools/metrics/histograms/populate_enums.py b/chromium/tools/metrics/histograms/populate_enums.py new file mode 100644 index 00000000000..8be71a2e3f9 --- /dev/null +++ b/chromium/tools/metrics/histograms/populate_enums.py @@ -0,0 +1,72 @@ +# Copyright 2017 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Functions for populating enums with ukm events.""" + +from collections import namedtuple +import os +import sys +import xml.dom.minidom + +import extract_histograms + +sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'ukm')) +import codegen + + +EventDetails = namedtuple("EventDetails", "name hash is_obsolete") + + +def _GetEventDetails(event): + """Returns a simple struct containing the event details. + + Args: + event: An event. + + Returns: + A struct containing the event name, name hash, and whether the event is + obsolete. + """ + name = event.getAttribute('name') + # The value is UKM event name hash truncated to 31 bits. This is recorded in + # https://cs.chromium.org/chromium/src/components/ukm/ukm_recorder_impl.cc?rcl=728ad079d8e52ada4e321fb4f53713e4f0588072&l=114 + hash = codegen.HashName(name) & 0x7fffffff + is_obsolete = event.getElementsByTagName('obsolete') + return EventDetails(name=name, hash=hash, is_obsolete=is_obsolete) + + +def PopulateEnumWithUkmEvents(doc, enum, ukm_events): + """Populates the enum node with a list of ukm events. + + Args: + doc: The document to create the node in. + enum: The enum node needed to be populated. + ukm_events: A list of ukm event nodes. + """ + event_details = [_GetEventDetails(event) for event in ukm_events] + event_details.sort(key=lambda event: event.hash) + + for event in event_details: + node = doc.createElement('int') + node.attributes['value'] = str(event.hash) + label = event.name + # If the event is obsolete, mark it in the int's label. + if event.is_obsolete: + label += ' (Obsolete)' + node.attributes['label'] = label + enum.appendChild(node) + + +def PopulateEnumsWithUkmEvents(doc, enums, ukm_events): + """Populates enum nodes in the enums with a list of ukm events + + Args: + doc: The document to create the node in. + enums: The enums node to be iterated. + ukm_events: A list of ukm event nodes. + """ + for enum in extract_histograms.IterElementsWithTag(enums, 'enum', 1): + # We only special case 'UkmEventNameHash' currently. + if enum.getAttribute('name') == 'UkmEventNameHash': + PopulateEnumWithUkmEvents(doc, enum, ukm_events) |