| Index: tools/metrics/histograms/extract_histograms.py
|
| diff --git a/tools/metrics/histograms/extract_histograms.py b/tools/metrics/histograms/extract_histograms.py
|
| index b8e49ad310e0a73b51870bf3f8d2693928cf87ed..c8da0ccbf9f7b875af4ccd1f6bfb099bb2c5cdd5 100644
|
| --- a/tools/metrics/histograms/extract_histograms.py
|
| +++ b/tools/metrics/histograms/extract_histograms.py
|
| @@ -63,6 +63,9 @@ OWNER_FIELD_PLACEHOLDER = (
|
|
|
| MAX_HISTOGRAM_SUFFIX_DEPENDENCY_DEPTH = 5
|
|
|
| +DEFAULT_BASE_HISTOGRAM_OBSOLETE_REASON = (
|
| + 'Base histogram. Use suffixes of this histogram instead.')
|
| +
|
|
|
| class Error(Exception):
|
| pass
|
| @@ -230,6 +233,14 @@ def _ExtractOwners(xml_node):
|
| return owners
|
|
|
|
|
| +def _ProcessBaseHistogramAttribute(node, histogram_entry):
|
| + if node.hasAttribute('base'):
|
| + is_base = node.getAttribute('base').lower() == 'true'
|
| + histogram_entry['base'] = is_base
|
| + if is_base and 'obsolete' not in histogram_entry:
|
| + histogram_entry['obsolete'] = DEFAULT_BASE_HISTOGRAM_OBSOLETE_REASON
|
| +
|
| +
|
| def _ExtractHistogramsFromXmlTree(tree, enums):
|
| """Extract all <histogram> nodes in the tree into a dictionary."""
|
|
|
| @@ -288,6 +299,8 @@ def _ExtractHistogramsFromXmlTree(tree, enums):
|
| else:
|
| histogram_entry['enum'] = enums[enum_name]
|
|
|
| + _ProcessBaseHistogramAttribute(histogram, histogram_entry)
|
| +
|
| return histograms, have_errors
|
|
|
|
|
| @@ -398,8 +411,17 @@ def _UpdateHistogramsWithSuffixes(tree, histograms):
|
| new_histogram_name = _ExpandHistogramNameWithSuffixes(
|
| suffix_name, histogram_name, histogram_suffixes)
|
| if new_histogram_name != histogram_name:
|
| - histograms[new_histogram_name] = copy.deepcopy(
|
| - histograms[histogram_name])
|
| + new_histogram = copy.deepcopy(histograms[histogram_name])
|
| + # Do not copy forward base histogram state to suffixed
|
| + # histograms. Any suffixed histograms that wish to remain base
|
| + # histograms must explicitly re-declare themselves as base
|
| + # histograms.
|
| + if new_histogram.get('base', False):
|
| + del new_histogram['base']
|
| + if (new_histogram.get('obsolete', '') ==
|
| + DEFAULT_BASE_HISTOGRAM_OBSOLETE_REASON):
|
| + del new_histogram['obsolete']
|
| + histograms[new_histogram_name] = new_histogram
|
|
|
| suffix_label = suffix_labels.get(suffix_name, '')
|
|
|
| @@ -436,6 +458,8 @@ def _UpdateHistogramsWithSuffixes(tree, histograms):
|
| if obsolete_reason:
|
| histograms[new_histogram_name]['obsolete'] = obsolete_reason
|
|
|
| + _ProcessBaseHistogramAttribute(suffix, histograms[new_histogram_name])
|
| +
|
| except Error:
|
| have_errors = True
|
|
|
|
|