Skip to content

Commit

Permalink
Merge pull request lucaslorentz#16 from exyi/report-optimization
Browse files Browse the repository at this point in the history
Improved performance of report on a mid-sized project.
  • Loading branch information
lucaslorentz authored Feb 6, 2018
2 parents 9dadda4 + 046bc0c commit d03518a
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 21 deletions.
5 changes: 3 additions & 2 deletions src/MiniCover/Reports/BaseReport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public abstract class BaseReport
public virtual int Execute(InstrumentationResult result, float threshold)
{
var hits = File.Exists(result.HitsFile)
? File.ReadAllLines(result.HitsFile).Select(h => int.Parse(h)).Distinct().ToHashSet()
? File.ReadAllLines(result.HitsFile).Select(h => int.Parse(h)).ToHashSet()
: new HashSet<int>();

var files = result.Assemblies
Expand Down Expand Up @@ -49,9 +49,10 @@ public virtual int Execute(InstrumentationResult result, float threshold)

WriteReport(kvFile, lines, coveredLines, coveragePercentage, fileColor);

WriteDetailedReport(result, files, hits);
}

WriteDetailedReport(result, files, hits);

var totalCoveragePercentage = (float)totalCoveredLines / totalLines;
var isHigherThanThreshold = totalCoveragePercentage >= threshold;
var totalsColor = isHigherThanThreshold ? ConsoleColor.Green : ConsoleColor.Red;
Expand Down
40 changes: 21 additions & 19 deletions src/MiniCover/Reports/HtmlReport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,32 +55,34 @@ protected override void WriteDetailedReport(InstrumentationResult result, IDicti
htmlWriter.WriteLine("<html>");
htmlWriter.WriteLine("<body style=\"font-family: sans-serif;\">");

var instrumentedLineNumbers = kvFile.Value.Instructions
.SelectMany(i => Enumerable.Range(i.StartLine, i.EndLine - i.StartLine + 1))
.Distinct()
.ToArray();

var hitInstructions = kvFile.Value.Instructions.Where(h => hits.Contains(h.Id)).ToArray();
var coveredLineNumbers = hitInstructions
.SelectMany(i => Enumerable.Range(i.StartLine, i.EndLine - i.StartLine + 1))
.Distinct()
.ToArray();
var uncoveredLineNumbers = new HashSet<int>();
var coveredLineNumbers = new HashSet<int>();
foreach(var i in kvFile.Value.Instructions)
{
if (hits.Contains(i.Id))
{
for (var lineIndex = i.StartLine; lineIndex <= i.EndLine; lineIndex++)
coveredLineNumbers.Add(lineIndex);
}
else
{
for (var lineIndex = i.StartLine; lineIndex <= i.EndLine; lineIndex++)
uncoveredLineNumbers.Add(lineIndex);
}
}

var l = 0;
foreach (var line in lines)
{
l++;
var style = "white-space: pre;";
if (instrumentedLineNumbers.Contains(l))
if (coveredLineNumbers.Contains(l))
{
style += BgColorGreen;
}
else if (uncoveredLineNumbers.Contains(l))
{
if (coveredLineNumbers.Contains(l))
{
style += BgColorGreen;
}
else
{
style += BgColorRed;
}
style += BgColorRed;
}
else
{
Expand Down

0 comments on commit d03518a

Please sign in to comment.