Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Scans the Chromium source for histograms that are absent from histograms.xml. | 5 """Scans the Chromium source for histograms that are absent from histograms.xml. |
| 6 | 6 |
| 7 This is a heuristic scan, so a clean run of this script does not guarantee that | 7 This is a heuristic scan, so a clean run of this script does not guarantee that |
| 8 all histograms in the Chromium source are properly mapped. Notably, field | 8 all histograms in the Chromium source are properly mapped. Notably, field |
| 9 trials are entirely ignored by this script. | 9 trials are entirely ignored by this script. |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 (\w*::)? # Optional namespace | 31 (\w*::)? # Optional namespace |
| 32 k[A-Z] # Match a constant identifier: 'k' followed by an uppercase letter | 32 k[A-Z] # Match a constant identifier: 'k' followed by an uppercase letter |
| 33 \w* # Match the rest of the constant identifier | 33 \w* # Match the rest of the constant identifier |
| 34 $ # Make sure there's only the identifier, nothing else | 34 $ # Make sure there's only the identifier, nothing else |
| 35 """, re.VERBOSE) | 35 """, re.VERBOSE) |
| 36 HISTOGRAM_REGEX = re.compile(r""" | 36 HISTOGRAM_REGEX = re.compile(r""" |
| 37 UMA_HISTOGRAM # Match the shared prefix for standard UMA histogram macros | 37 UMA_HISTOGRAM # Match the shared prefix for standard UMA histogram macros |
| 38 \w* # Match the rest of the macro name, e.g. '_ENUMERATION' | 38 \w* # Match the rest of the macro name, e.g. '_ENUMERATION' |
| 39 \( # Match the opening parenthesis for the macro | 39 \( # Match the opening parenthesis for the macro |
| 40 \s* # Match any whitespace -- especially, any newlines | 40 \s* # Match any whitespace -- especially, any newlines |
| 41 ([^,]*) # Capture the first parameter to the macro | 41 ([^,)]*) # Capture the first parameter to the macro |
| 42 , # Match the comma that delineates the first parameter | 42 [,)] # Match the comma/bracket that delineates the first parameter |
|
Ilya Sherman
2014/08/30 01:17:13
nit: s/bracket/paren
Alexei Svitkine (slow)
2014/09/02 15:48:42
Done.
| |
| 43 """, re.VERBOSE) | 43 """, re.VERBOSE) |
| 44 | 44 |
| 45 | 45 |
| 46 class DirectoryNotFoundException(Exception): | 46 class DirectoryNotFoundException(Exception): |
| 47 """Base class to distinguish locally defined exceptions from standard ones.""" | 47 """Base class to distinguish locally defined exceptions from standard ones.""" |
| 48 def __init__(self, msg): | 48 def __init__(self, msg): |
| 49 self.msg = msg | 49 self.msg = msg |
| 50 | 50 |
| 51 def __str__(self): | 51 def __str__(self): |
| 52 return self.msg | 52 return self.msg |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 106 '"FakeHistogram" + variant' | 106 '"FakeHistogram" + variant' |
| 107 | 107 |
| 108 Returns: | 108 Returns: |
| 109 None | 109 None |
| 110 """ | 110 """ |
| 111 # Ignore histogram macros, which typically contain backslashes so that they | 111 # Ignore histogram macros, which typically contain backslashes so that they |
| 112 # can be formatted across lines. | 112 # can be formatted across lines. |
| 113 if '\\' in histogram: | 113 if '\\' in histogram: |
| 114 return | 114 return |
| 115 | 115 |
| 116 # Field trials are unique within a session, so are effectively constants. | |
| 117 if histogram.startswith('base::FieldTrial::MakeName'): | |
| 118 return | |
| 119 | |
| 120 # Ignore histogram names that have been pulled out into C++ constants. | 116 # Ignore histogram names that have been pulled out into C++ constants. |
| 121 if CONSTANT_REGEX.match(histogram): | 117 if CONSTANT_REGEX.match(histogram): |
| 122 return | 118 return |
| 123 | 119 |
| 124 # TODO(isherman): This is still a little noisy... needs further filtering to | 120 # TODO(isherman): This is still a little noisy... needs further filtering to |
| 125 # reduce the noise. | 121 # reduce the noise. |
| 126 logging.warning('%s contains non-literal histogram name <%s>', filename, | 122 logging.warning('%s contains non-literal histogram name <%s>', filename, |
| 127 histogram) | 123 histogram) |
| 128 | 124 |
| 129 | 125 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 logging.info('Histograms in Chromium but not in XML files:') | 247 logging.info('Histograms in Chromium but not in XML files:') |
| 252 logging.info('-------------------------------------------------') | 248 logging.info('-------------------------------------------------') |
| 253 for histogram in sorted(unmapped_histograms): | 249 for histogram in sorted(unmapped_histograms): |
| 254 logging.info(' %s - %s', histogram, hashHistogramName(histogram)) | 250 logging.info(' %s - %s', histogram, hashHistogramName(histogram)) |
| 255 else: | 251 else: |
| 256 logging.info('Success! No unmapped histograms found.') | 252 logging.info('Success! No unmapped histograms found.') |
| 257 | 253 |
| 258 | 254 |
| 259 if __name__ == '__main__': | 255 if __name__ == '__main__': |
| 260 main() | 256 main() |
| OLD | NEW |