mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-03 23:30:46 +00:00

We only have two counters enabled, just for testing, and they just count from the SVG mapped attribute code. That's not great, and they mostly complicate the next few patches. Differential Revision: https://phabricator.services.mozilla.com/D44695 --HG-- extra : moz-landing-system : lando
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'custom ([A-Za-z0-9_]+) (.*)$', line)
|
|
if m:
|
|
name, desc = m.groups()
|
|
yield { 'type': 'custom',
|
|
'name': name,
|
|
'desc': desc }
|
|
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'] == 'custom':
|
|
append_counters(counter['name'].upper(), counter['desc'])
|
|
|
|
return items
|