consider function size in coverage output (#81)

This commit is contained in:
alex 2020-10-19 18:46:55 +01:00 committed by GitHub
parent 4d530df425
commit cab03be6be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -40,6 +40,26 @@ asm_func_pattern = re.compile(
def include_asms_in_c(text): def include_asms_in_c(text):
return (match.group(1) for match in asm_func_pattern.finditer(text)) return (match.group(1) for match in asm_func_pattern.finditer(text))
def parse_map_file(p = Path(DIR, "build", "papermario.map")):
addresses = []
with open(p, "r") as f:
for match in re.compile(f"^\s+0x([a-f0-9]+)\s+([_a-zA-Z0-9]+)", re.MULTILINE).finditer(f.read()):
addr = int(match.group(1), 16)
func = match.group(2)
addresses.append((func, addr))
addresses.sort(key=lambda x: x[1]) # sort by address
sizes = {}
for i in range(0, len(addresses) - 1):
func, addr = addresses[i]
next_addr = addresses[i + 1][1]
sizes[func] = next_addr - addr
return sizes
matched = [] matched = []
asm = [] asm = []
for filename in C_FILES: for filename in C_FILES:
@ -63,7 +83,14 @@ if __name__ == "__main__":
exit() exit()
total = len(matched) + len(non_matched) total = len(matched) + len(non_matched)
print(f"{len(matched)}+{len(partial_matched)} / {total} functions ({(len(matched) / total) * 100:.2f}% matched)") print(f"{len(matched)}+{len(partial_matched)} / {total} functions ({(len(matched) / total) * 100:.2f}%)")
function_sizes = parse_map_file()
size_matched = sum(function_sizes.get(f, 0) for f in matched)
size_partial_matched = sum(function_sizes.get(f, 0) for f in partial_matched)
size_non_matched = sum(function_sizes.get(f, 0) for f in non_matched)
size_total = size_matched + size_non_matched
print(f"{size_matched}+{size_partial_matched} / {size_total} bytes ({(size_matched / size_total) * 100:.2f}%)")
if len(matched_but_undeleted_asm) > 0: if len(matched_but_undeleted_asm) > 0:
print(f"The following functions have been matched but still exist in asm/nonmatchings/: {' '.join(matched_but_undeleted_asm)}") print(f"The following functions have been matched but still exist in asm/nonmatchings/: {' '.join(matched_but_undeleted_asm)}")