diff options
author | Max Moroz <mmoroz@chromium.org> | 2018-01-12 20:31:32 +0000 |
---|---|---|
committer | Max Moroz <mmoroz@chromium.org> | 2018-01-12 20:31:32 +0000 |
commit | 6242cac18eda0b31f9bb1f2c360de143afd0ec4e (patch) | |
tree | 7c398555a37633d93efb7db05c3d33856b96857b /llvm/tools/llvm-cov | |
parent | e41a5e2490d358e47d7fdaebb41a9f82cfeb7def (diff) | |
download | bcm5719-llvm-6242cac18eda0b31f9bb1f2c360de143afd0ec4e.tar.gz bcm5719-llvm-6242cac18eda0b31f9bb1f2c360de143afd0ec4e.zip |
[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
Diffstat (limited to 'llvm/tools/llvm-cov')
-rw-r--r-- | llvm/tools/llvm-cov/CoverageExporterJson.cpp | 63 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageExporterJson.h | 6 |
2 files changed, 39 insertions, 30 deletions
diff --git a/llvm/tools/llvm-cov/CoverageExporterJson.cpp b/llvm/tools/llvm-cov/CoverageExporterJson.cpp index 142c6ee1542..3621f9ab97f 100644 --- a/llvm/tools/llvm-cov/CoverageExporterJson.cpp +++ b/llvm/tools/llvm-cov/CoverageExporterJson.cpp @@ -209,53 +209,58 @@ 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"); + // Calculate and render detailed coverage information for given file. + auto FileCoverage = Coverage.getCoverageForFile(Filename); + renderFileCoverage(FileCoverage, FileReport); + } - // Start List of Segments. - emitArrayStart(); + emitDictKey("summary"); + renderSummary(FileReport); - for (const auto &Segment : FileCoverage) - renderSegment(Segment); + // End File. + emitDictEnd(); +} - // End List of Segments. - emitArrayEnd(); - emitDictKey("expansions"); +void CoverageExporterJson::renderFileCoverage( + const coverage::CoverageData &FileCoverage, + const FileCoverageSummary &FileReport) { + emitDictKey("segments"); + + // Start List of Segments. + emitArrayStart(); - // Start List of Expansions. - emitArrayStart(); + for (const auto &Segment : FileCoverage) + renderSegment(Segment); - for (const auto &Expansion : FileCoverage.getExpansions()) - renderExpansion(Expansion); + // End List of Segments. + emitArrayEnd(); - // End List of Expansions. - emitArrayEnd(); - } + emitDictKey("expansions"); - emitDictKey("summary"); - renderSummary(FileReport); + // Start List of Expansions. + emitArrayStart(); - // End File. - emitDictEnd(); + for (const auto &Expansion : FileCoverage.getExpansions()) + renderExpansion(Expansion); + + // End List of Expansions. + emitArrayEnd(); } void CoverageExporterJson::renderSegment( diff --git a/llvm/tools/llvm-cov/CoverageExporterJson.h b/llvm/tools/llvm-cov/CoverageExporterJson.h index d576196beee..4631e94d535 100644 --- a/llvm/tools/llvm-cov/CoverageExporterJson.h +++ b/llvm/tools/llvm-cov/CoverageExporterJson.h @@ -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); |