[llvm] r216300 - llvm-cov: add code coverage tool that's based on coverage mapping format and clang's pgo.

NAKAMURA Takumi geek4civic at gmail.com
Tue Sep 30 17:56:12 PDT 2014


2014-08-23 7:56 GMT+09:00 Alex Lorenz <arphaman at gmail.com>:
> Author: arphaman
> Date: Fri Aug 22 17:56:03 2014
> New Revision: 216300
>
> URL: http://llvm.org/viewvc/llvm-project?rev=216300&view=rev
> Log:
> llvm-cov: add code coverage tool that's based on coverage mapping format and clang's pgo.
>
> This commit expands llvm-cov's functionality by adding support for a new code coverage
> tool that uses LLVM's coverage mapping format and clang's instrumentation based profiling.
> The gcov compatible tool can be invoked by supplying the 'gcov' command as the first argument,
> or by modifying the tool's name to end with 'gcov'.
>
> Differential Revision: http://reviews.llvm.org/D4445
>
> Added:
>     llvm/trunk/test/tools/llvm-cov/Inputs/highlightedRanges.covmapping   (with props)
>     llvm/trunk/test/tools/llvm-cov/Inputs/highlightedRanges.profdata   (with props)
>     llvm/trunk/test/tools/llvm-cov/Inputs/lineExecutionCounts.covmapping   (with props)
>     llvm/trunk/test/tools/llvm-cov/Inputs/lineExecutionCounts.profdata   (with props)
>     llvm/trunk/test/tools/llvm-cov/Inputs/regionMarkers.covmapping   (with props)
>     llvm/trunk/test/tools/llvm-cov/Inputs/regionMarkers.profdata   (with props)
>     llvm/trunk/test/tools/llvm-cov/showHighlightedRanges.cpp
>     llvm/trunk/test/tools/llvm-cov/showLineExecutionCounts.cpp
>     llvm/trunk/test/tools/llvm-cov/showRegionMarkers.cpp
>     llvm/trunk/tools/llvm-cov/CodeCoverage.cpp
>     llvm/trunk/tools/llvm-cov/CoverageFilters.cpp
>     llvm/trunk/tools/llvm-cov/CoverageFilters.h
>     llvm/trunk/tools/llvm-cov/CoverageReport.cpp
>     llvm/trunk/tools/llvm-cov/CoverageReport.h
>     llvm/trunk/tools/llvm-cov/CoverageSummary.cpp
>     llvm/trunk/tools/llvm-cov/CoverageSummary.h
>     llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.cpp
>     llvm/trunk/tools/llvm-cov/CoverageSummaryInfo.h
>     llvm/trunk/tools/llvm-cov/CoverageViewOptions.h
>     llvm/trunk/tools/llvm-cov/FunctionCoverageMapping.h
>     llvm/trunk/tools/llvm-cov/RenderingSupport.h
>     llvm/trunk/tools/llvm-cov/SourceCoverageDataManager.cpp
>     llvm/trunk/tools/llvm-cov/SourceCoverageDataManager.h
>     llvm/trunk/tools/llvm-cov/SourceCoverageView.cpp
>     llvm/trunk/tools/llvm-cov/SourceCoverageView.h
>     llvm/trunk/tools/llvm-cov/TestingSupport.cpp
> Modified:
>     llvm/trunk/lib/ProfileData/CoverageMappingReader.cpp
>     llvm/trunk/test/tools/llvm-cov/Inputs/README
>     llvm/trunk/tools/llvm-cov/CMakeLists.txt
>     llvm/trunk/tools/llvm-cov/LLVMBuild.txt
>     llvm/trunk/tools/llvm-cov/Makefile
>     llvm/trunk/tools/llvm-cov/llvm-cov.cpp

> Added: llvm/trunk/tools/llvm-cov/CoverageReport.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageReport.cpp?rev=216300&view=auto
> ==============================================================================
> --- llvm/trunk/tools/llvm-cov/CoverageReport.cpp (added)
> +++ llvm/trunk/tools/llvm-cov/CoverageReport.cpp Fri Aug 22 17:56:03 2014

> +void CoverageReport::render(const FileCoverageSummary &File, raw_ostream &OS) {
> +  OS << column(File.Name, FileReportColumns[0], Column::LeftTrim)
> +     << format("%*zd", FileReportColumns[1], File.RegionCoverage.NumRegions);
> +  Options.colored_ostream(OS, File.RegionCoverage.isFullyCovered()
> +                                  ? raw_ostream::GREEN
> +                                  : raw_ostream::RED)
> +      << format("%*zd", FileReportColumns[2], File.RegionCoverage.NotCovered);
> +  Options.colored_ostream(OS,
> +                          determineCoveragePercentageColor(File.RegionCoverage))
> +      << format("%*.2f", FileReportColumns[3] - 1,
> +                File.RegionCoverage.getPercentCovered()) << '%';
> +  OS << format("%*zd", FileReportColumns[4],
> +               File.FunctionCoverage.NumFunctions);
> +  Options.colored_ostream(
> +      OS, determineCoveragePercentageColor(File.FunctionCoverage))
> +      << format("%*.2f", FileReportColumns[5] - 1,
> +                File.FunctionCoverage.getPercentCovered()) << '%';
> +  OS << "\n";
> +}
> +
> +void CoverageReport::render(const FunctionCoverageSummary &Function,
> +                            raw_ostream &OS) {
> +  OS << column(Function.Name, FunctionReportColumns[0], Column::RightTrim)
> +     << format("%*zd", FunctionReportColumns[1],
> +               Function.RegionCoverage.NumRegions);
> +  Options.colored_ostream(OS, Function.RegionCoverage.isFullyCovered()
> +                                  ? raw_ostream::GREEN
> +                                  : raw_ostream::RED)
> +      << format("%*zd", FunctionReportColumns[2],
> +                Function.RegionCoverage.NotCovered);
> +  Options.colored_ostream(
> +      OS, determineCoveragePercentageColor(Function.RegionCoverage))
> +      << format("%*.2f", FunctionReportColumns[3] - 1,
> +                Function.RegionCoverage.getPercentCovered()) << '%';
> +  OS << format("%*zd", FunctionReportColumns[4],
> +               Function.LineCoverage.NumLines);
> +  Options.colored_ostream(OS, Function.LineCoverage.isFullyCovered()
> +                                  ? raw_ostream::GREEN
> +                                  : raw_ostream::RED)
> +      << format("%*zd", FunctionReportColumns[5],
> +                Function.LineCoverage.NotCovered);
> +  Options.colored_ostream(
> +      OS, determineCoveragePercentageColor(Function.LineCoverage))
> +      << format("%*.2f", FunctionReportColumns[6] - 1,
> +                Function.LineCoverage.getPercentCovered()) << '%';
> +  OS << "\n";
> +}

"z" is unavailable in MSVCRT's formatter. Tweaked in r218723.

.IMHO, uint32_t might satisfy instead of size_t in RegionCoverageInfo.
Then PRIu32 might be available.



More information about the llvm-commits mailing list