Skip to content

Commit

Permalink
[sancov] -print-coverage-stats option to print various coverage stati…
Browse files Browse the repository at this point in the history
…stics.

Differential Revision: http://reviews.llvm.org/D18418

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264222 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
aizatsky-chromium committed Mar 24, 2016
1 parent d34f785 commit 9647ee5
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 4 deletions.
9 changes: 9 additions & 0 deletions test/tools/sancov/stats.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
REQUIRES: x86_64-linux
RUN: sancov -print-coverage-stats %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.0.sancov | FileCheck %s

CHECK: all-points: 16
CHECK: cov-points: 7
CHECK: all-fns: 3
CHECK: cov-fns: 2


54 changes: 50 additions & 4 deletions tools/sancov/sancov.cc
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ enum ActionType {
PrintCovPointsAction,
CoveredFunctionsAction,
NotCoveredFunctionsAction,
HtmlReportAction
HtmlReportAction,
StatsAction
};

cl::opt<ActionType> Action(
Expand All @@ -77,6 +78,8 @@ cl::opt<ActionType> Action(
"Print all not covered funcions."),
clEnumValN(HtmlReportAction, "html-report",
"Print HTML coverage report."),
clEnumValN(StatsAction, "print-coverage-stats",
"Print coverage statistics."),
clEnumValEnd));

static cl::list<std::string>
Expand Down Expand Up @@ -516,6 +519,23 @@ static ErrorOr<bool> isCoverageFile(std::string FileName) {
return Header->Magic == BinCoverageMagic;
}

struct CoverageStats {
CoverageStats() : AllPoints(0), CovPoints(0), AllFns(0), CovFns(0) {}

size_t AllPoints;
size_t CovPoints;
size_t AllFns;
size_t CovFns;
};

static raw_ostream &operator<<(raw_ostream &OS, const CoverageStats &Stats) {
OS << "all-points: " << Stats.AllPoints << "\n";
OS << "cov-points: " << Stats.CovPoints << "\n";
OS << "all-fns: " << Stats.AllFns << "\n";
OS << "cov-fns: " << Stats.CovFns << "\n";
return OS;
}

class CoverageData {
public:
// Read single file coverage data.
Expand Down Expand Up @@ -615,9 +635,8 @@ class SourceCoverageData {
MIXED = 3
};

SourceCoverageData(std::string ObjectFile, const std::set<uint64_t> &Addrs) {
std::set<uint64_t> AllCovPoints = getCoveragePoints(ObjectFile);

SourceCoverageData(std::string ObjectFile, const std::set<uint64_t> &Addrs)
: AllCovPoints(getCoveragePoints(ObjectFile)) {
if (!std::includes(AllCovPoints.begin(), AllCovPoints.end(), Addrs.begin(),
Addrs.end())) {
Fail("Coverage points in binary and .sancov file do not match.");
Expand Down Expand Up @@ -776,7 +795,15 @@ class SourceCoverageData {
return Files;
}

void collectStats(CoverageStats *Stats) const {
Stats->AllPoints += AllCovPoints.size();
Stats->AllFns += computeAllFunctions().size();
Stats->CovFns += computeCoveredFunctions().size();
}

private:
const std::set<uint64_t> AllCovPoints;

std::vector<AddrInfo> AllAddrInfo;
std::vector<AddrInfo> CovAddrInfo;
};
Expand Down Expand Up @@ -954,6 +981,13 @@ class CoverageDataWithObjectFile : public CoverageData {
}
}

void collectStats(CoverageStats *Stats) const {
Stats->CovPoints += Addrs->size();

SourceCoverageData SCovData(ObjectFile, *Addrs);
SCovData.collectStats(Stats);
}

private:
CoverageDataWithObjectFile(std::string ObjectFile,
std::unique_ptr<CoverageData> Coverage)
Expand Down Expand Up @@ -1048,6 +1082,14 @@ class CoverageDataSet {
}
}

void printStats(raw_ostream &OS) const {
CoverageStats Stats;
for (const auto &Cov : Coverage) {
Cov->collectStats(&Stats);
}
OS << Stats;
}

void printReport(raw_ostream &OS) const {
auto Title =
(llvm::sys::path::filename(MainObjFile) + " Coverage Report").str();
Expand Down Expand Up @@ -1172,6 +1214,10 @@ int main(int argc, char **argv) {
CovDataSet.get()->printReport(outs());
return 0;
}
case StatsAction: {
CovDataSet.get()->printStats(outs());
return 0;
}
case PrintAction:
case PrintCovPointsAction:
llvm_unreachable("unsupported action");
Expand Down

0 comments on commit 9647ee5

Please sign in to comment.