mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 23:31:56 +00:00
e225a0e389
There is no preprocessing directive in the file. Also, the current support for preprocessing doesn't take into account any DEFINES that would be set in the corresponding moz.build, which would be quite surprising would someone want to use preprocessing on that file in the future.
72 lines
3.0 KiB
Python
72 lines
3.0 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import buildconfig
|
|
import collections
|
|
import re
|
|
import StringIO
|
|
import sys
|
|
|
|
def read_conf(conf_filename):
|
|
# Can't read/write from a single StringIO, so make a new one for reading.
|
|
stream = open(conf_filename, 'rU')
|
|
|
|
def parse_counters(stream):
|
|
for line_num, line in enumerate(stream):
|
|
line = line.rstrip('\n')
|
|
if not line or line.startswith('//'):
|
|
# empty line or comment
|
|
continue
|
|
m = re.match(r'method ([A-Za-z0-9]+)\.([A-Za-z0-9]+)$', line)
|
|
if m:
|
|
interface_name, method_name = m.groups()
|
|
yield { 'type': 'method',
|
|
'interface_name': interface_name,
|
|
'method_name': method_name }
|
|
continue
|
|
m = re.match(r'attribute ([A-Za-z0-9]+)\.([A-Za-z0-9]+)$', line)
|
|
if m:
|
|
interface_name, attribute_name = m.groups()
|
|
yield { 'type': 'attribute',
|
|
'interface_name': interface_name,
|
|
'attribute_name': attribute_name }
|
|
continue
|
|
m = re.match(r'property ([A-Za-z0-9]+)$', line)
|
|
if m:
|
|
property_name = m.group(1)
|
|
yield { 'type': 'property',
|
|
'property_name': property_name }
|
|
continue
|
|
raise ValueError('error parsing %s at line %d' % (conf_filename, line_num))
|
|
|
|
return parse_counters(stream)
|
|
|
|
def generate_histograms(filename):
|
|
# The mapping for use counters to telemetry histograms depends on the
|
|
# ordering of items in the dictionary.
|
|
items = collections.OrderedDict()
|
|
for counter in read_conf(filename):
|
|
def append_counter(name, desc):
|
|
items[name] = { 'expires_in_version': 'never',
|
|
'kind' : 'boolean',
|
|
'description': desc }
|
|
|
|
def append_counters(name, desc):
|
|
append_counter('USE_COUNTER2_%s_DOCUMENT' % name, 'Whether a document %s' % desc)
|
|
append_counter('USE_COUNTER2_%s_PAGE' % name, 'Whether a page %s' % desc)
|
|
|
|
if counter['type'] == 'method':
|
|
method = '%s.%s' % (counter['interface_name'], counter['method_name'])
|
|
append_counters(method.replace('.', '_').upper(), 'called %s' % method)
|
|
elif counter['type'] == 'attribute':
|
|
attr = '%s.%s' % (counter['interface_name'], counter['attribute_name'])
|
|
counter_name = attr.replace('.', '_').upper()
|
|
append_counters('%s_getter' % counter_name, 'got %s' % attr)
|
|
append_counters('%s_setter' % counter_name, 'set %s' % attr)
|
|
elif counter['type'] == 'property':
|
|
prop = counter['property_name']
|
|
append_counters('PROPERTY_%s' % prop.replace('-', '_').upper(), "used the '%s' property" % prop)
|
|
|
|
return items
|