Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(732)

Side by Side Diff: build/android/emma_coverage_stats.py

Issue 1284083004: Fractional line coverage + logging change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | build/android/emma_coverage_stats_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Generates incremental code coverage reports for Java code in Chromium. 6 """Generates incremental code coverage reports for Java code in Chromium.
7 7
8 Usage: 8 Usage:
9 9
10 build/android/emma_coverage_stats.py -v --out <output file path> --emma-dir 10 build/android/emma_coverage_stats.py -v --out <output file path> --emma-dir
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 return None 293 return None
294 emma_file = self._source_to_emma[file_path] 294 emma_file = self._source_to_emma[file_path]
295 total_line_coverage = self._emma_parser.GetLineCoverage(emma_file) 295 total_line_coverage = self._emma_parser.GetLineCoverage(emma_file)
296 incremental_line_coverage = [line for line in total_line_coverage 296 incremental_line_coverage = [line for line in total_line_coverage
297 if line.lineno in line_numbers] 297 if line.lineno in line_numbers]
298 line_by_line_coverage = [ 298 line_by_line_coverage = [
299 { 299 {
300 'line': line.source, 300 'line': line.source,
301 'coverage': line.covered_status, 301 'coverage': line.covered_status,
302 'changed': line.lineno in line_numbers, 302 'changed': line.lineno in line_numbers,
303 'fractional_coverage': line.fractional_line_coverage,
303 } 304 }
304 for line in total_line_coverage 305 for line in total_line_coverage
305 ] 306 ]
306 total_covered_lines, total_lines = ( 307 total_covered_lines, total_lines = (
307 self.GetSummaryStatsForLines(total_line_coverage)) 308 self.GetSummaryStatsForLines(total_line_coverage))
308 incremental_covered_lines, incremental_total_lines = ( 309 incremental_covered_lines, incremental_total_lines = (
309 self.GetSummaryStatsForLines(incremental_line_coverage)) 310 self.GetSummaryStatsForLines(incremental_line_coverage))
310 311
311 file_coverage_stats = { 312 file_coverage_stats = {
312 'absolute': { 313 'absolute': {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 389
389 Args: 390 Args:
390 file_path: A string representing path to the file. 391 file_path: A string representing path to the file.
391 392
392 Returns: 393 Returns:
393 True for Java files that exist, False for all others. 394 True for Java files that exist, False for all others.
394 """ 395 """
395 if os.path.splitext(file_path)[1] == '.java' and os.path.exists(file_path): 396 if os.path.splitext(file_path)[1] == '.java' and os.path.exists(file_path):
396 return True 397 return True
397 else: 398 else:
398 logging.debug( 399 logging.info('Skipping file %s, cannot compute code coverage.', file_path)
399 'Skipping file %s, cannot compute code coverage.', file_path)
400 return False 400 return False
401 401
402 @staticmethod 402 @staticmethod
403 def GetPackageNameFromFile(file_path): 403 def GetPackageNameFromFile(file_path):
404 """Gets the full package name including the file name for a given file path. 404 """Gets the full package name including the file name for a given file path.
405 405
406 Args: 406 Args:
407 file_path: String representing the path to the Java source file. 407 file_path: String representing the path to the Java source file.
408 408
409 Returns: 409 Returns:
(...skipping 28 matching lines...) Expand all
438 with open(line_coverage_file) as f: 438 with open(line_coverage_file) as f:
439 potential_files_for_coverage = json.load(f) 439 potential_files_for_coverage = json.load(f)
440 440
441 files_for_coverage = {f: lines 441 files_for_coverage = {f: lines
442 for f, lines in potential_files_for_coverage.iteritems() 442 for f, lines in potential_files_for_coverage.iteritems()
443 if _EmmaCoverageStats.NeedsCoverage(f)} 443 if _EmmaCoverageStats.NeedsCoverage(f)}
444 444
445 coverage_results = {} 445 coverage_results = {}
446 if files_for_coverage: 446 if files_for_coverage:
447 code_coverage = _EmmaCoverageStats(coverage_dir, files_for_coverage.keys()) 447 code_coverage = _EmmaCoverageStats(coverage_dir, files_for_coverage.keys())
448 coverage_results = code_coverage.GetCoverageDict( 448 coverage_results = code_coverage.GetCoverageDict(files_for_coverage)
449 files_for_coverage)
450 else: 449 else:
451 logging.info('No Java files requiring coverage were included in %s.', 450 logging.info('No Java files requiring coverage were included in %s.',
452 line_coverage_file) 451 line_coverage_file)
453 452
454 with open(out_file_path, 'w+') as out_status_file: 453 with open(out_file_path, 'w+') as out_status_file:
455 json.dump(coverage_results, out_status_file) 454 json.dump(coverage_results, out_status_file)
456 455
457 456
458 def main(): 457 def main():
459 argparser = argparse.ArgumentParser() 458 argparser = argparse.ArgumentParser()
460 argparser.add_argument('--out', required=True, type=str, 459 argparser.add_argument('--out', required=True, type=str,
461 help='Report output file path.') 460 help='Report output file path.')
462 argparser.add_argument('--emma-dir', required=True, type=str, 461 argparser.add_argument('--emma-dir', required=True, type=str,
463 help='EMMA HTML report directory.') 462 help='EMMA HTML report directory.')
464 argparser.add_argument('--lines-for-coverage-file', required=True, type=str, 463 argparser.add_argument('--lines-for-coverage-file', required=True, type=str,
465 help='File containing a JSON object. Should contain a ' 464 help='File containing a JSON object. Should contain a '
466 'dict mapping file names to lists of line numbers of ' 465 'dict mapping file names to lists of line numbers of '
467 'code for which coverage information is desired.') 466 'code for which coverage information is desired.')
468 argparser.add_argument('-v', '--verbose', action='count', 467 argparser.add_argument('-v', '--verbose', action='count',
469 help='Print verbose log information.') 468 help='Print verbose log information.')
470 args = argparser.parse_args() 469 args = argparser.parse_args()
471 run_tests_helper.SetLogLevel(args.verbose) 470 run_tests_helper.SetLogLevel(args.verbose)
472 GenerateCoverageReport(args.lines_for_coverage_file, args.out, args.emma_dir) 471 GenerateCoverageReport(args.lines_for_coverage_file, args.out, args.emma_dir)
473 472
474 473
475 if __name__ == '__main__': 474 if __name__ == '__main__':
476 sys.exit(main()) 475 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | build/android/emma_coverage_stats_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698