Skip to content

Commit 50479f6

Browse files
author
Eli Friedman
committedSep 11, 2017
[llvm-cov] Allow hiding instantiation/region coverage from summary tables
Region coverage is difficult to explain without going deep into how coverage is implemented. Instantiation coverage is easier to explain, but probably not useful in most cases (templates don't exist in C, and most C++ code contains relatively few templates). This patch adds the options "-show-region-summary" and "-show-instantiation-summary" to allow hiding those columns. "-show-instantiation-summary" is turned off by default. llvm-svn: 312969
1 parent b9b6025 commit 50479f6

File tree

7 files changed

+78
-51
lines changed

7 files changed

+78
-51
lines changed
 

Diff for: ‎llvm/test/tools/llvm-cov/hideUnexecutedSubviews.test

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
RUN: llvm-profdata merge %S/Inputs/hideUnexecutedSubviews.proftext -o %t.profdata
22

3-
RUN: llvm-cov show %S/Inputs/templateInstantiations.covmapping -instr-profile %t.profdata -path-equivalence=/tmp,%S %S/showTemplateInstantiations.cpp | FileCheck -check-prefix=FILE %s
3+
RUN: llvm-cov show %S/Inputs/templateInstantiations.covmapping -instr-profile %t.profdata -show-region-summary -show-instantiation-summary -path-equivalence=/tmp,%S %S/showTemplateInstantiations.cpp | FileCheck -check-prefix=FILE %s
44

5-
RUN: llvm-cov show %S/Inputs/templateInstantiations.covmapping -instr-profile %t.profdata -format html -o %t.html.dir -path-equivalence=/tmp,%S %S/showTemplateInstantiations.cpp
5+
RUN: llvm-cov show %S/Inputs/templateInstantiations.covmapping -instr-profile %t.profdata -format html -show-region-summary -show-instantiation-summary -o %t.html.dir -path-equivalence=/tmp,%S %S/showTemplateInstantiations.cpp
66
RUN: FileCheck -check-prefix=FILE %s -input-file %t.html.dir/coverage/tmp/showTemplateInstantiations.cpp.html
77

88
FILE: Unexecuted instantiation: _Z4funcIbEiT_

Diff for: ‎llvm/test/tools/llvm-cov/report.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -path-equivalence=,%S 2>&1 | FileCheck %s
1+
// RUN: llvm-cov report %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -path-equivalence=,%S 2>&1 -show-region-summary -show-instantiation-summary | FileCheck %s
22
// RUN: llvm-cov report -show-functions %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -path-equivalence=,%S %s 2>&1 | FileCheck -check-prefix=FILT %s
33
// RUN: llvm-cov report -show-functions %S/Inputs/report.covmapping -instr-profile %S/Inputs/report.profdata -path-equivalence=,%S %s does-not-exist.cpp 2>&1 | FileCheck -check-prefix=FILT %s
44

Diff for: ‎llvm/test/tools/llvm-cov/showLineExecutionCounts.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,11 @@ int main() { // TEXT: [[@LINE]]| 161|int main(
8080
// HTML-INDEX-LABEL: <table>
8181
// HTML-INDEX: <td class='column-entry-left'>Filename</td>
8282
// HTML-INDEX: <td class='column-entry'>Function Coverage</td>
83-
// HTML-INDEX: <td class='column-entry'>Instantiation Coverage</td>
8483
// HTML-INDEX: <td class='column-entry'>Line Coverage</td>
8584
// HTML-INDEX: <td class='column-entry'>Region Coverage</td>
8685
// HTML-INDEX: <a href='coverage{{.*}}showLineExecutionCounts.cpp.html'{{.*}}showLineExecutionCounts.cpp</a>
8786
// HTML-INDEX: <td class='column-entry-green'>
8887
// HTML-INDEX: 100.00% (1/1)
89-
// HTML-INDEX: <td class='column-entry-green'>
90-
// HTML-INDEX: 100.00% (1/1)
9188
// HTML-INDEX: <td class='column-entry-yellow'>
9289
// HTML-INDEX: 80.00% (16/20)
9390
// HTML-INDEX: <td class='column-entry-red'>

Diff for: ‎llvm/tools/llvm-cov/CodeCoverage.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,15 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
608608
cl::list<std::string> DemanglerOpts(
609609
"Xdemangler", cl::desc("<demangler-path>|<demangler-option>"));
610610

611+
cl::opt<bool> RegionSummary(
612+
"show-region-summary", cl::Optional,
613+
cl::desc("Show region statistics in summary table"),
614+
cl::init(true));
615+
616+
cl::opt<bool> InstantiationSummary(
617+
"show-instantiation-summary", cl::Optional,
618+
cl::desc("Show instantiation statistics in summary table"));
619+
611620
auto commandLineParser = [&, this](int argc, const char **argv) -> int {
612621
cl::ParseCommandLineOptions(argc, argv, "LLVM code coverage tool\n");
613622
ViewOpts.Debug = DebugDump;
@@ -718,6 +727,9 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
718727
::exit(0);
719728
}
720729

730+
ViewOpts.ShowRegionSummary = RegionSummary;
731+
ViewOpts.ShowInstantiationSummary = InstantiationSummary;
732+
721733
return 0;
722734
};
723735

Diff for: ‎llvm/tools/llvm-cov/CoverageReport.cpp

+44-34
Original file line numberDiff line numberDiff line change
@@ -181,18 +181,22 @@ void CoverageReport::render(const FileCoverageSummary &File,
181181
SmallString<256> FileName = File.Name;
182182
sys::path::remove_dots(FileName, /*remove_dot_dots=*/true);
183183
sys::path::native(FileName);
184-
OS << column(FileName, FileReportColumns[0], Column::NoTrim)
185-
<< format("%*u", FileReportColumns[1],
186-
(unsigned)File.RegionCoverage.NumRegions);
187-
Options.colored_ostream(OS, FileCoverageColor) << format(
188-
"%*u", FileReportColumns[2], (unsigned)File.RegionCoverage.NotCovered);
189-
if (File.RegionCoverage.NumRegions)
190-
Options.colored_ostream(OS, FileCoverageColor)
191-
<< format("%*.2f", FileReportColumns[3] - 1,
192-
File.RegionCoverage.getPercentCovered())
193-
<< '%';
194-
else
195-
OS << column("-", FileReportColumns[3], Column::RightAlignment);
184+
OS << column(FileName, FileReportColumns[0], Column::NoTrim);
185+
186+
if (Options.ShowRegionSummary) {
187+
OS << format("%*u", FileReportColumns[1],
188+
(unsigned)File.RegionCoverage.NumRegions);
189+
Options.colored_ostream(OS, FileCoverageColor) << format(
190+
"%*u", FileReportColumns[2], (unsigned)File.RegionCoverage.NotCovered);
191+
if (File.RegionCoverage.NumRegions)
192+
Options.colored_ostream(OS, FileCoverageColor)
193+
<< format("%*.2f", FileReportColumns[3] - 1,
194+
File.RegionCoverage.getPercentCovered())
195+
<< '%';
196+
else
197+
OS << column("-", FileReportColumns[3], Column::RightAlignment);
198+
}
199+
196200
OS << format("%*u", FileReportColumns[4],
197201
(unsigned)File.FunctionCoverage.NumFunctions);
198202
OS << format("%*u", FileReportColumns[5],
@@ -205,18 +209,22 @@ void CoverageReport::render(const FileCoverageSummary &File,
205209
<< '%';
206210
else
207211
OS << column("-", FileReportColumns[6], Column::RightAlignment);
208-
OS << format("%*u", FileReportColumns[7],
209-
(unsigned)File.InstantiationCoverage.NumFunctions);
210-
OS << format("%*u", FileReportColumns[8],
211-
(unsigned)(File.InstantiationCoverage.NumFunctions -
212-
File.InstantiationCoverage.Executed));
213-
if (File.InstantiationCoverage.NumFunctions)
214-
Options.colored_ostream(OS, InstantiationCoverageColor)
215-
<< format("%*.2f", FileReportColumns[9] - 1,
216-
File.InstantiationCoverage.getPercentCovered())
217-
<< '%';
218-
else
219-
OS << column("-", FileReportColumns[9], Column::RightAlignment);
212+
213+
if (Options.ShowInstantiationSummary) {
214+
OS << format("%*u", FileReportColumns[7],
215+
(unsigned)File.InstantiationCoverage.NumFunctions);
216+
OS << format("%*u", FileReportColumns[8],
217+
(unsigned)(File.InstantiationCoverage.NumFunctions -
218+
File.InstantiationCoverage.Executed));
219+
if (File.InstantiationCoverage.NumFunctions)
220+
Options.colored_ostream(OS, InstantiationCoverageColor)
221+
<< format("%*.2f", FileReportColumns[9] - 1,
222+
File.InstantiationCoverage.getPercentCovered())
223+
<< '%';
224+
else
225+
OS << column("-", FileReportColumns[9], Column::RightAlignment);
226+
}
227+
220228
OS << format("%*u", FileReportColumns[10],
221229
(unsigned)File.LineCoverage.NumLines);
222230
Options.colored_ostream(OS, LineCoverageColor) << format(
@@ -359,17 +367,19 @@ void CoverageReport::renderFileReports(raw_ostream &OS,
359367
Filenames.emplace_back(FCS.Name);
360368
adjustColumnWidths(Filenames, {});
361369

362-
OS << column("Filename", FileReportColumns[0])
363-
<< column("Regions", FileReportColumns[1], Column::RightAlignment)
364-
<< column("Missed Regions", FileReportColumns[2], Column::RightAlignment)
365-
<< column("Cover", FileReportColumns[3], Column::RightAlignment)
366-
<< column("Functions", FileReportColumns[4], Column::RightAlignment)
370+
OS << column("Filename", FileReportColumns[0]);
371+
if (Options.ShowRegionSummary)
372+
OS << column("Regions", FileReportColumns[1], Column::RightAlignment)
373+
<< column("Missed Regions", FileReportColumns[2], Column::RightAlignment)
374+
<< column("Cover", FileReportColumns[3], Column::RightAlignment);
375+
OS << column("Functions", FileReportColumns[4], Column::RightAlignment)
367376
<< column("Missed Functions", FileReportColumns[5], Column::RightAlignment)
368-
<< column("Executed", FileReportColumns[6], Column::RightAlignment)
369-
<< column("Instantiations", FileReportColumns[7], Column::RightAlignment)
370-
<< column("Missed Insts.", FileReportColumns[8], Column::RightAlignment)
371-
<< column("Executed", FileReportColumns[9], Column::RightAlignment)
372-
<< column("Lines", FileReportColumns[10], Column::RightAlignment)
377+
<< column("Executed", FileReportColumns[6], Column::RightAlignment);
378+
if (Options.ShowInstantiationSummary)
379+
OS << column("Instantiations", FileReportColumns[7], Column::RightAlignment)
380+
<< column("Missed Insts.", FileReportColumns[8], Column::RightAlignment)
381+
<< column("Executed", FileReportColumns[9], Column::RightAlignment);
382+
OS << column("Lines", FileReportColumns[10], Column::RightAlignment)
373383
<< column("Missed Lines", FileReportColumns[11], Column::RightAlignment)
374384
<< column("Cover", FileReportColumns[12], Column::RightAlignment) << "\n";
375385
renderDivider(FileReportColumns, OS);

Diff for: ‎llvm/tools/llvm-cov/CoverageViewOptions.h

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ struct CoverageViewOptions {
3030
bool ShowExpandedRegions;
3131
bool ShowFunctionInstantiations;
3232
bool ShowFullFilenames;
33+
bool ShowRegionSummary;
34+
bool ShowInstantiationSummary;
3335
OutputFormat Format;
3436
std::string ShowOutputDirectory;
3537
std::vector<std::string> DemanglerOpts;

Diff for: ‎llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp

+17-11
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,16 @@ void CoveragePrinterHTML::closeViewFile(OwnedStream OS) {
285285
}
286286

287287
/// Emit column labels for the table in the index.
288-
static void emitColumnLabelsForIndex(raw_ostream &OS) {
288+
static void emitColumnLabelsForIndex(raw_ostream &OS,
289+
const CoverageViewOptions &Opts) {
289290
SmallVector<std::string, 4> Columns;
290291
Columns.emplace_back(tag("td", "Filename", "column-entry-left"));
291-
for (const char *Label : {"Function Coverage", "Instantiation Coverage",
292-
"Line Coverage", "Region Coverage"})
293-
Columns.emplace_back(tag("td", Label, "column-entry"));
292+
Columns.emplace_back(tag("td", "Function Coverage", "column-entry"));
293+
if (Opts.ShowInstantiationSummary)
294+
Columns.emplace_back(tag("td", "Instantiation Coverage", "column-entry"));
295+
Columns.emplace_back(tag("td", "Line Coverage", "column-entry"));
296+
if (Opts.ShowRegionSummary)
297+
Columns.emplace_back(tag("td", "Region Coverage", "column-entry"));
294298
OS << tag("tr", join(Columns.begin(), Columns.end(), ""));
295299
}
296300

@@ -345,14 +349,16 @@ void CoveragePrinterHTML::emitFileSummary(raw_ostream &OS, StringRef SF,
345349
AddCoverageTripleToColumn(FCS.FunctionCoverage.Executed,
346350
FCS.FunctionCoverage.NumFunctions,
347351
FCS.FunctionCoverage.getPercentCovered());
348-
AddCoverageTripleToColumn(FCS.InstantiationCoverage.Executed,
349-
FCS.InstantiationCoverage.NumFunctions,
350-
FCS.InstantiationCoverage.getPercentCovered());
352+
if (Opts.ShowInstantiationSummary)
353+
AddCoverageTripleToColumn(FCS.InstantiationCoverage.Executed,
354+
FCS.InstantiationCoverage.NumFunctions,
355+
FCS.InstantiationCoverage.getPercentCovered());
351356
AddCoverageTripleToColumn(FCS.LineCoverage.Covered, FCS.LineCoverage.NumLines,
352357
FCS.LineCoverage.getPercentCovered());
353-
AddCoverageTripleToColumn(FCS.RegionCoverage.Covered,
354-
FCS.RegionCoverage.NumRegions,
355-
FCS.RegionCoverage.getPercentCovered());
358+
if (Opts.ShowRegionSummary)
359+
AddCoverageTripleToColumn(FCS.RegionCoverage.Covered,
360+
FCS.RegionCoverage.NumRegions,
361+
FCS.RegionCoverage.getPercentCovered());
356362

357363
OS << tag("tr", join(Columns.begin(), Columns.end(), ""), "light-row");
358364
}
@@ -395,7 +401,7 @@ Error CoveragePrinterHTML::createIndexFile(
395401
// Emit a table containing links to reports for each file in the covmapping.
396402
// Exclude files which don't contain any regions.
397403
OSRef << BeginCenteredDiv << BeginTable;
398-
emitColumnLabelsForIndex(OSRef);
404+
emitColumnLabelsForIndex(OSRef, Opts);
399405
FileCoverageSummary Totals("TOTALS");
400406
auto FileReports =
401407
CoverageReport::prepareFileReports(Coverage, Totals, SourceFiles, Opts);

0 commit comments

Comments
 (0)
Please sign in to comment.