]> git.proxmox.com Git - rustc.git/blame - src/llvm/tools/llvm-cov/CoverageSummary.cpp
Imported Upstream version 1.0.0+dfsg1
[rustc.git] / src / llvm / tools / llvm-cov / CoverageSummary.cpp
CommitLineData
1a4d82fc
JJ
1//===- CoverageSummary.cpp - Code coverage summary ------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This class implements data management and rendering for the code coverage
11// summaries of all files and functions.
12//
13//===----------------------------------------------------------------------===//
14
15#include "CoverageSummary.h"
16#include "llvm/Support/FileSystem.h"
17#include "llvm/Support/Format.h"
18
19using namespace llvm;
20
21unsigned CoverageSummary::getFileID(StringRef Filename) {
22 for (unsigned I = 0, E = Filenames.size(); I < E; ++I) {
23 if (sys::fs::equivalent(Filenames[I], Filename))
24 return I;
25 }
26 Filenames.push_back(Filename);
27 return Filenames.size() - 1;
28}
29
30void
85aaf69f
SL
31CoverageSummary::createSummaries(const coverage::CoverageMapping &Coverage) {
32 for (StringRef Filename : Coverage.getUniqueSourceFiles()) {
33 size_t PrevSize = FunctionSummaries.size();
34 for (const auto &F : Coverage.getCoveredFunctions(Filename))
35 FunctionSummaries.push_back(FunctionCoverageSummary::get(F));
36 size_t Count = FunctionSummaries.size() - PrevSize;
37 if (Count == 0)
1a4d82fc 38 continue;
85aaf69f
SL
39 FileSummaries.push_back(FileCoverageSummary::get(
40 Filename, makeArrayRef(FunctionSummaries.data() + PrevSize, Count)));
1a4d82fc
JJ
41 }
42}
43
44FileCoverageSummary CoverageSummary::getCombinedFileSummaries() {
45 size_t NumRegions = 0, CoveredRegions = 0;
46 size_t NumLines = 0, NonCodeLines = 0, CoveredLines = 0;
47 size_t NumFunctionsExecuted = 0, NumFunctions = 0;
48 for (const auto &File : FileSummaries) {
49 NumRegions += File.RegionCoverage.NumRegions;
50 CoveredRegions += File.RegionCoverage.Covered;
51
52 NumLines += File.LineCoverage.NumLines;
53 NonCodeLines += File.LineCoverage.NonCodeLines;
54 CoveredLines += File.LineCoverage.Covered;
55
56 NumFunctionsExecuted += File.FunctionCoverage.Executed;
57 NumFunctions += File.FunctionCoverage.NumFunctions;
58 }
59 return FileCoverageSummary(
60 "TOTAL", RegionCoverageInfo(CoveredRegions, NumRegions),
61 LineCoverageInfo(CoveredLines, NonCodeLines, NumLines),
62 FunctionCoverageInfo(NumFunctionsExecuted, NumFunctions),
63 None);
64}