| #!/usr/bin/env python |
| # Copyright 2014 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. |
| |
| """Scans the Chromium source of UseCounter, formats the Feature enum for |
| histograms.xml and merges it. This script can also generate a python code |
| snippet to put in uma.py of Chromium Dashboard. Make sure that you review the |
| output for correctness. |
| """ |
| |
| import optparse |
| import os |
| import re |
| import sys |
| |
| sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'common')) |
| import path_util |
| |
| import update_histogram_enum |
| import update_use_counter_feature_enum |
| |
| |
| USE_COUNTER_CPP_PATH = 'third_party/blink/renderer/core/frame/use_counter.cc' |
| |
| |
| def EnumToCssProperty(enum_name): |
| """Converts a camel cased enum name to the lower case CSS property.""" |
| # The first group also searches for uppercase letters to account for single |
| # uppercase letters, such as in "ZIndex" that need to convert to "z-index". |
| return re.sub(r'([a-zA-Z])([A-Z])', r'\1-\2', enum_name).lower() |
| |
| |
| def ReadCssProperties(filename): |
| # Read the file as a list of lines |
| with open(path_util.GetInputFile(filename)) as f: |
| content = f.readlines() |
| |
| # Looking for a pair of lines like "case CSSPropertyGrid:\n return 453;". |
| ENUM_REGEX = re.compile(r"""CSSProperty(.*): # capture the enum name |
| \s*return\s* |
| ([0-9]+) # capture the id |
| """, re.VERBOSE) |
| |
| properties = {} |
| previous_line = '' |
| for line in content: |
| enum_match = ENUM_REGEX.search(previous_line + '\n' + line) |
| if enum_match: |
| enum_name = enum_match.group(1) |
| property_id = int(enum_match.group(2)) |
| properties[property_id] = EnumToCssProperty(enum_name) |
| previous_line = '' |
| else: |
| previous_line = line |
| |
| return properties |
| |
| |
| if __name__ == '__main__': |
| parser = optparse.OptionParser() |
| parser.add_option('--for-dashboard', action='store_true', dest='dashboard', |
| default=False, |
| help='Print enum definition formatted for use in uma.py of ' |
| 'Chromium dashboard developed at ' |
| 'https://github.com/GoogleChrome/chromium-dashboard') |
| options, args = parser.parse_args() |
| |
| if options.dashboard: |
| enum_dict = ReadCssProperties(USE_COUNTER_CPP_PATH) |
| update_use_counter_feature_enum.PrintEnumForDashboard(enum_dict) |
| else: |
| update_histogram_enum.UpdateHistogramFromDict( |
| 'MappedCSSProperties', ReadCssProperties(USE_COUNTER_CPP_PATH), |
| USE_COUNTER_CPP_PATH, os.path.basename(__file__)) |