summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-cov
diff options
context:
space:
mode:
authorMax Moroz <mmoroz@chromium.org>2018-01-12 20:31:32 +0000
committerMax Moroz <mmoroz@chromium.org>2018-01-12 20:31:32 +0000
commit6242cac18eda0b31f9bb1f2c360de143afd0ec4e (patch)
tree7c398555a37633d93efb7db05c3d33856b96857b /llvm/tools/llvm-cov
parente41a5e2490d358e47d7fdaebb41a9f82cfeb7def (diff)
downloadbcm5719-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.cpp63
-rw-r--r--llvm/tools/llvm-cov/CoverageExporterJson.h6
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);
OpenPOWER on IntegriCloud