[Coverage] Add ignore_filename_regex argument to coverage script.
This argument enables excluding certain files and folders from code
coverage report using regular expression.
Bug: 813123
Change-Id: I13343645ba1e3e67dfc17932bc97113600a69095
Reviewed-on: https://chromium-review.googlesource.com/1017382
Reviewed-by: Max Moroz <[email protected]>
Commit-Queue: Yuke Liao <[email protected]>
Cr-Commit-Position: refs/heads/master@{#551822}
diff --git a/tools/code_coverage/coverage.py b/tools/code_coverage/coverage.py
index 117d64e..a6a1c65 100755
--- a/tools/code_coverage/coverage.py
+++ b/tools/code_coverage/coverage.py
@@ -249,8 +249,8 @@
if summary_dict[feature]['total'] == 0:
percentage = 0.0
else:
- percentage = float(summary_dict[feature]['covered']) / summary_dict[
- feature]['total'] * 100
+ percentage = float(summary_dict[feature]
+ ['covered']) / summary_dict[feature]['total'] * 100
color_class = self._GetColorClass(percentage)
entry[feature] = {
@@ -412,7 +412,7 @@
def _GeneratePerFileLineByLineCoverageInHtml(binary_paths, profdata_file_path,
- filters):
+ filters, ignore_filename_regex):
"""Generates per file line-by-line coverage in html using 'llvm-cov show'.
For a file with absolute path /a/b/x.cc, a html report is generated as:
@@ -439,6 +439,9 @@
['-object=' + binary_path for binary_path in binary_paths[1:]])
_AddArchArgumentForIOSIfNeeded(subprocess_cmd, len(binary_paths))
subprocess_cmd.extend(filters)
+ if ignore_filename_regex:
+ subprocess_cmd.append('-ignore-filename-regex=%s' % ignore_filename_regex)
+
subprocess.check_call(subprocess_cmd)
logging.debug('Finished running "llvm-cov show" command')
@@ -944,7 +947,8 @@
return profdata_file_path
-def _GeneratePerFileCoverageSummary(binary_paths, profdata_file_path, filters):
+def _GeneratePerFileCoverageSummary(binary_paths, profdata_file_path, filters,
+ ignore_filename_regex):
"""Generates per file coverage summary using "llvm-cov export" command."""
# llvm-cov export [options] -instr-profile PROFILE BIN [-object BIN,...]
# [[-object BIN]] [SOURCES].
@@ -960,6 +964,8 @@
['-object=' + binary_path for binary_path in binary_paths[1:]])
_AddArchArgumentForIOSIfNeeded(subprocess_cmd, len(binary_paths))
subprocess_cmd.extend(filters)
+ if ignore_filename_regex:
+ subprocess_cmd.append('-ignore-filename-regex=%s' % ignore_filename_regex)
json_output = json.loads(subprocess.check_output(subprocess_cmd))
assert len(json_output['data']) == 1
@@ -1181,6 +1187,14 @@
'the directories are included recursively.')
arg_parser.add_argument(
+ '-i',
+ '--ignore-filename-regex',
+ type=str,
+ help='Skip source code files with file paths that match the given '
+ 'regular expression. For example, use -i=\'.*/out/.*|.*/third_party/.*\' '
+ 'to exclude files in third_party/ and out/ folders from the report.')
+
+ arg_parser.add_argument(
'-j',
'--jobs',
type=int,
@@ -1249,9 +1263,11 @@
logging.info('Generating code coverage report in html (this can take a while '
'depending on size of target!)')
per_file_coverage_summary = _GeneratePerFileCoverageSummary(
- binary_paths, profdata_file_path, absolute_filter_paths)
+ binary_paths, profdata_file_path, absolute_filter_paths,
+ args.ignore_filename_regex)
_GeneratePerFileLineByLineCoverageInHtml(binary_paths, profdata_file_path,
- absolute_filter_paths)
+ absolute_filter_paths,
+ args.ignore_filename_regex)
_GenerateFileViewHtmlIndexFile(per_file_coverage_summary)
per_directory_coverage_summary = _CalculatePerDirectoryCoverageSummary(