1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00

[llvm-cov] Skip unnecessary coverage computations for "export -summary-only".

Summary:
This speeds up export "summary-only" execution by an order of magnitude or two,
depending on number of threads used for prepareFileReports execution.

Also includes minor refactoring for splitting render of summary and detailed data
in two independent methods.

Reviewers: vsk, morehouse

Reviewed By: vsk

Subscribers: llvm-commits, kcc

Differential Revision: https://reviews.llvm.org/D42000

llvm-svn: 322397
This commit is contained in:
Max Moroz 2018-01-12 20:31:32 +00:00
parent 18f10e166c
commit 4cc49f7e96
2 changed files with 41 additions and 32 deletions

View File

@ -209,46 +209,24 @@ void CoverageExporterJson::renderFiles(
emitArrayStart();
for (unsigned I = 0, E = SourceFiles.size(); I < E; ++I) {
// Render the file.
auto FileCoverage = Coverage.getCoverageForFile(SourceFiles[I]);
renderFile(FileCoverage, FileReports[I]);
renderFile(SourceFiles[I], FileReports[I]);
}
// End List of Files.
emitArrayEnd();
}
void CoverageExporterJson::renderFile(
const coverage::CoverageData &FileCoverage,
const FileCoverageSummary &FileReport) {
// Start File.
void CoverageExporterJson::renderFile(const std::string &Filename,
const FileCoverageSummary &FileReport) {
// Start File.
emitDictStart();
emitDictElement("filename", FileCoverage.getFilename());
// Skip segments and expansions for summary-only export mode.
emitDictElement("filename", Filename);
if (!Options.ExportSummaryOnly) {
emitDictKey("segments");
// Start List of Segments.
emitArrayStart();
for (const auto &Segment : FileCoverage)
renderSegment(Segment);
// End List of Segments.
emitArrayEnd();
emitDictKey("expansions");
// Start List of Expansions.
emitArrayStart();
for (const auto &Expansion : FileCoverage.getExpansions())
renderExpansion(Expansion);
// End List of Expansions.
emitArrayEnd();
// Calculate and render detailed coverage information for given file.
auto FileCoverage = Coverage.getCoverageForFile(Filename);
renderFileCoverage(FileCoverage, FileReport);
}
emitDictKey("summary");
@ -258,6 +236,33 @@ void CoverageExporterJson::renderFile(
emitDictEnd();
}
void CoverageExporterJson::renderFileCoverage(
const coverage::CoverageData &FileCoverage,
const FileCoverageSummary &FileReport) {
emitDictKey("segments");
// Start List of Segments.
emitArrayStart();
for (const auto &Segment : FileCoverage)
renderSegment(Segment);
// End List of Segments.
emitArrayEnd();
emitDictKey("expansions");
// Start List of Expansions.
emitArrayStart();
for (const auto &Expansion : FileCoverage.getExpansions())
renderExpansion(Expansion);
// End List of Expansions.
emitArrayEnd();
}
void CoverageExporterJson::renderSegment(
const coverage::CoverageSegment &Segment) {
// Start Segment.

View File

@ -74,9 +74,13 @@ class CoverageExporterJson : public CoverageExporter {
ArrayRef<FileCoverageSummary> FileReports);
/// \brief Render a single file.
void renderFile(const coverage::CoverageData &FileCoverage,
void renderFile(const std::string &Filename,
const FileCoverageSummary &FileReport);
/// \brief Render summary for a single file.
void renderFileCoverage(const coverage::CoverageData &FileCoverage,
const FileCoverageSummary &FileReport);
/// \brief Render a CoverageSegment.
void renderSegment(const coverage::CoverageSegment &Segment);