#!/usr/bin/env python
# Copyright (c) 2012 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.
"""Generates the metrics collected weekly for the Browser Components project.
See
http://www.chromium.org/developers/design-documents/browser-components
for details.
"""
import os
import sys
# This is done so that we can import checkdeps. If not invoked as
# main, our user must ensure it is in PYTHONPATH.
if __name__ == '__main__':
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..',
'tools', 'checkdeps'))
import count_ifdefs
import checkdeps
import results
# Preprocessor pattern to find OS_XYZ defines.
PREPROCESSOR_PATTERN = 'OS_[A-Z]+'
class BrowserComponentsMetricsGenerator(object):
def __init__(self, checkout_root):
self.checkout_root = checkout_root
self.chrome_browser = os.path.join(checkout_root, 'chrome', 'browser')
def CountIfdefs(self, skip_tests):
return count_ifdefs.CountIfdefs(
PREPROCESSOR_PATTERN, self.chrome_browser, skip_tests)
def CountViolations(self, skip_tests):
deps_checker = checkdeps.DepsChecker(self.checkout_root,
ignore_temp_rules=True,
skip_tests=skip_tests)
deps_checker.results_formatter = results.CountViolationsFormatter()
deps_checker.CheckDirectory(os.path.join('chrome', 'browser'))
return int(deps_checker.results_formatter.GetResults())
def main():
generator = BrowserComponentsMetricsGenerator(
os.path.join(os.path.dirname(__file__), '..', '..', '..'))
print "All metrics are for chrome/browser.\n"
print "OS ifdefs, all: %d" % generator.CountIfdefs(False)
print "OS ifdefs, -tests: %d" % generator.CountIfdefs(True)
print ("Intended DEPS violations, all: %d" %
generator.CountViolations(False))
print "Intended DEPS violations, -tests: %d" % generator.CountViolations(True)
return 0
if __name__ == '__main__':
sys.exit(main())