Home | History | Annotate | Download | only in metrics
      1 #!/usr/bin/env python
      2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 """Generates the metrics collected weekly for the Browser Components project.
      7 
      8 See
      9 http://www.chromium.org/developers/design-documents/browser-components
     10 for details.
     11 """
     12 
     13 import os
     14 import sys
     15 
     16 
     17 # This is done so that we can import checkdeps.  If not invoked as
     18 # main, our user must ensure it is in PYTHONPATH.
     19 if __name__ == '__main__':
     20   sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..',
     21                                'buildtools', 'checkdeps'))
     22 
     23 
     24 import count_ifdefs
     25 import checkdeps
     26 import results
     27 
     28 
     29 # Preprocessor pattern to find OS_XYZ defines.
     30 PREPROCESSOR_PATTERN = 'OS_[A-Z]+'
     31 
     32 
     33 class BrowserComponentsMetricsGenerator(object):
     34   def __init__(self, checkout_root):
     35     self.checkout_root = checkout_root
     36     self.chrome_browser = os.path.join(checkout_root, 'chrome', 'browser')
     37 
     38   def CountIfdefs(self, skip_tests):
     39     return count_ifdefs.CountIfdefs(
     40         PREPROCESSOR_PATTERN, self.chrome_browser, skip_tests)
     41 
     42   def CountViolations(self, skip_tests):
     43     deps_checker = checkdeps.DepsChecker(self.checkout_root,
     44                                          ignore_temp_rules=True,
     45                                          skip_tests=skip_tests)
     46     deps_checker.results_formatter = results.CountViolationsFormatter()
     47     deps_checker.CheckDirectory(os.path.join('chrome', 'browser'))
     48     return int(deps_checker.results_formatter.GetResults())
     49 
     50 
     51 def main():
     52   generator = BrowserComponentsMetricsGenerator(
     53       os.path.join(os.path.dirname(__file__), '..', '..', '..'))
     54 
     55   print "All metrics are for chrome/browser.\n"
     56   print "OS ifdefs, all:                   %d" % generator.CountIfdefs(False)
     57   print "OS ifdefs, -tests:                %d" % generator.CountIfdefs(True)
     58   print ("Intended DEPS violations, all:    %d" %
     59          generator.CountViolations(False))
     60   print "Intended DEPS violations, -tests: %d" % generator.CountViolations(True)
     61   return 0
     62 
     63 
     64 if __name__ == '__main__':
     65   sys.exit(main())
     66