mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-05 03:46:27 +00:00
[llvm-cov] Add an API to prepare file reports (NFC)
It would be nice to prepare file reports (using the CoverageReport API) without actually rendering them to the console. I plan on using this to flesh out the 'index' files in the coverage views. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281009 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f539109ae3
commit
006e320c47
@ -133,7 +133,8 @@ unsigned getLongestCommonPrefixLen(ArrayRef<StringRef> Strings) {
|
|||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
void CoverageReport::render(const FileCoverageSummary &File, raw_ostream &OS) {
|
void CoverageReport::render(const FileCoverageSummary &File,
|
||||||
|
raw_ostream &OS) const {
|
||||||
auto FileCoverageColor =
|
auto FileCoverageColor =
|
||||||
determineCoveragePercentageColor(File.RegionCoverage);
|
determineCoveragePercentageColor(File.RegionCoverage);
|
||||||
auto FuncCoverageColor =
|
auto FuncCoverageColor =
|
||||||
@ -169,7 +170,7 @@ void CoverageReport::render(const FileCoverageSummary &File, raw_ostream &OS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CoverageReport::render(const FunctionCoverageSummary &Function,
|
void CoverageReport::render(const FunctionCoverageSummary &Function,
|
||||||
raw_ostream &OS) {
|
raw_ostream &OS) const {
|
||||||
auto FuncCoverageColor =
|
auto FuncCoverageColor =
|
||||||
determineCoveragePercentageColor(Function.RegionCoverage);
|
determineCoveragePercentageColor(Function.RegionCoverage);
|
||||||
auto LineCoverageColor =
|
auto LineCoverageColor =
|
||||||
@ -234,7 +235,34 @@ void CoverageReport::renderFunctionReports(ArrayRef<StringRef> Files,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CoverageReport::renderFileReports(raw_ostream &OS) {
|
std::vector<FileCoverageSummary>
|
||||||
|
CoverageReport::prepareFileReports(FileCoverageSummary &Totals,
|
||||||
|
ArrayRef<StringRef> Files) const {
|
||||||
|
std::vector<FileCoverageSummary> FileReports;
|
||||||
|
unsigned LCP = 0;
|
||||||
|
if (Files.size() > 1)
|
||||||
|
LCP = getLongestCommonPrefixLen(Files);
|
||||||
|
|
||||||
|
for (StringRef Filename : Files) {
|
||||||
|
FileCoverageSummary Summary(Filename.drop_front(LCP));
|
||||||
|
for (const auto &F : Coverage.getCoveredFunctions(Filename)) {
|
||||||
|
FunctionCoverageSummary Function = FunctionCoverageSummary::get(F);
|
||||||
|
Summary.addFunction(Function);
|
||||||
|
Totals.addFunction(Function);
|
||||||
|
}
|
||||||
|
FileReports.push_back(Summary);
|
||||||
|
}
|
||||||
|
|
||||||
|
return FileReports;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CoverageReport::renderFileReports(raw_ostream &OS) const {
|
||||||
|
std::vector<StringRef> UniqueSourceFiles = Coverage.getUniqueSourceFiles();
|
||||||
|
renderFileReports(OS, UniqueSourceFiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CoverageReport::renderFileReports(raw_ostream &OS,
|
||||||
|
ArrayRef<StringRef> Files) const {
|
||||||
adjustColumnWidths(Coverage);
|
adjustColumnWidths(Coverage);
|
||||||
OS << column("Filename", FileReportColumns[0])
|
OS << column("Filename", FileReportColumns[0])
|
||||||
<< column("Regions", FileReportColumns[1], Column::RightAlignment)
|
<< column("Regions", FileReportColumns[1], Column::RightAlignment)
|
||||||
@ -249,21 +277,11 @@ void CoverageReport::renderFileReports(raw_ostream &OS) {
|
|||||||
renderDivider(FileReportColumns, OS);
|
renderDivider(FileReportColumns, OS);
|
||||||
OS << "\n";
|
OS << "\n";
|
||||||
|
|
||||||
std::vector<StringRef> UniqueSourceFiles = Coverage.getUniqueSourceFiles();
|
|
||||||
unsigned LCP = 0;
|
|
||||||
if (UniqueSourceFiles.size() > 1)
|
|
||||||
LCP = getLongestCommonPrefixLen(UniqueSourceFiles);
|
|
||||||
|
|
||||||
FileCoverageSummary Totals("TOTAL");
|
FileCoverageSummary Totals("TOTAL");
|
||||||
for (StringRef Filename : UniqueSourceFiles) {
|
auto FileReports = prepareFileReports(Totals, Files);
|
||||||
FileCoverageSummary Summary(Filename.drop_front(LCP));
|
for (const FileCoverageSummary &FCS : FileReports)
|
||||||
for (const auto &F : Coverage.getCoveredFunctions(Filename)) {
|
render(FCS, OS);
|
||||||
FunctionCoverageSummary Function = FunctionCoverageSummary::get(F);
|
|
||||||
Summary.addFunction(Function);
|
|
||||||
Totals.addFunction(Function);
|
|
||||||
}
|
|
||||||
render(Summary, OS);
|
|
||||||
}
|
|
||||||
renderDivider(FileReportColumns, OS);
|
renderDivider(FileReportColumns, OS);
|
||||||
OS << "\n";
|
OS << "\n";
|
||||||
render(Totals, OS);
|
render(Totals, OS);
|
||||||
|
@ -24,8 +24,8 @@ class CoverageReport {
|
|||||||
const CoverageViewOptions &Options;
|
const CoverageViewOptions &Options;
|
||||||
const coverage::CoverageMapping &Coverage;
|
const coverage::CoverageMapping &Coverage;
|
||||||
|
|
||||||
void render(const FileCoverageSummary &File, raw_ostream &OS);
|
void render(const FileCoverageSummary &File, raw_ostream &OS) const;
|
||||||
void render(const FunctionCoverageSummary &Function, raw_ostream &OS);
|
void render(const FunctionCoverageSummary &Function, raw_ostream &OS) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CoverageReport(const CoverageViewOptions &Options,
|
CoverageReport(const CoverageViewOptions &Options,
|
||||||
@ -34,7 +34,16 @@ public:
|
|||||||
|
|
||||||
void renderFunctionReports(ArrayRef<StringRef> Files, raw_ostream &OS);
|
void renderFunctionReports(ArrayRef<StringRef> Files, raw_ostream &OS);
|
||||||
|
|
||||||
void renderFileReports(raw_ostream &OS);
|
/// Prepare file reports for the files specified in \p Files.
|
||||||
|
std::vector<FileCoverageSummary>
|
||||||
|
prepareFileReports(FileCoverageSummary &Totals,
|
||||||
|
ArrayRef<StringRef> Files) const;
|
||||||
|
|
||||||
|
/// Render file reports for every unique file in the coverage mapping.
|
||||||
|
void renderFileReports(raw_ostream &OS) const;
|
||||||
|
|
||||||
|
/// Render file reports for the files specified in \p Files.
|
||||||
|
void renderFileReports(raw_ostream &OS, ArrayRef<StringRef> Files) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
Loading…
x
Reference in New Issue
Block a user