From ab044bec4b1ebb0652027c39d370f20b5b9cad39 Mon Sep 17 00:00:00 2001 From: Dmitriy Nikiforov Date: Fri, 29 Sep 2017 18:49:57 +0300 Subject: [PATCH] Add 'Function coverage' column to coverage report Function coverage reflects the ratio of all at least partly covered functions to all instrumented functions in file or in total. Previous 'Coverage' column is renamed to 'Edge coverage'. Change-Id: I578ddeb651843cddd9bad7639911489cc353def2 --- scripts/coverage-report-dump.py | 46 +++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/scripts/coverage-report-dump.py b/scripts/coverage-report-dump.py index 9c16f4f..6440028 100755 --- a/scripts/coverage-report-dump.py +++ b/scripts/coverage-report-dump.py @@ -37,7 +37,11 @@ INDEX_PAGE_TMPL = """ - + + + + $filenames
FileCoverage
FileEdge CoverageFunctions Coverage
Files with 0 coverage are not shown.
@@ -104,23 +108,34 @@ class SymcovData: """Build a filename->pct coverage.""" result = dict() all_points = set() + all_funcs_cnt = 0 + cov_funcs_cnt = 0 for filename, fns in self.point_symbol_info.items(): file_points = [] + cov_file_funcs_cnt = 0 for fn, points in fns.items(): + all_funcs_cnt += 1 + if len(set(points) & self.covered_points) > 0: + cov_funcs_cnt += 1 + cov_file_funcs_cnt += 1 file_points.extend(points.keys()) covered_points = self.covered_points & set(file_points) all_points |= set(file_points) - result[filename] = int(math.ceil( - len(covered_points) * 100 / len(file_points))) + result[filename] = ( + int(math.ceil(len(covered_points) * 100 / len(file_points))), + int(math.ceil(cov_file_funcs_cnt * 100 / len(fns))) + ) + + result[SymcovData.TOTAL_COV_KEY] = ( + int(math.ceil(len(self.covered_points) * 100 / len(all_points))), + int(math.ceil(cov_funcs_cnt * 100 / all_funcs_cnt)) + ) - result[SymcovData.TOTAL_COV_KEY] = int(math.ceil( - len(self.covered_points) * 100 / len(all_points))) return result def total_coverage(self): return self.file_coverage[SymcovData.TOTAL_COV_KEY] - def format_pct(pct): pct_str = str(max(0, min(100, pct))) zeroes = '0' * (3 - len(pct_str)) @@ -189,22 +204,25 @@ class DumpCov(): if filename.startswith(tuple(exclude_headers)) and\ filename.endswith((".h", ".hpp")): continue - file_coverage = self.__symcov_data.file_coverage[filename] - if not file_coverage: + edge_coverage, funcs_coverage = self.__symcov_data.file_coverage[filename] + if not edge_coverage: continue filelist.append( "{name}" - "{coverage}%".format( + "{edge}%{funcs}%".format( name=self.__html_chars_escape(filename), - coverage=format_pct(file_coverage))) + edge=format_pct(edge_coverage), + funcs=format_pct(funcs_coverage))) # TODO: Print it pretty - print("{:<76} {}%".format(filename, file_coverage)) + print("{:<76} {}% {}%".format(filename, edge_coverage, funcs_coverage)) self.__dump_src_file(filename) + total_edge, total_funcs = self.__symcov_data.total_coverage() filelist.append( - "Total coverage" - "{coverage}%".format( - coverage=format_pct(self.__symcov_data.total_coverage()))) + "Total" + "{edge}%{funcs}%".format( + edge=format_pct(total_edge), + funcs=format_pct(total_funcs))) response = string.Template(INDEX_PAGE_TMPL).safe_substitute( filenames='\n'.join(filelist)) -- 2.34.1