Commit ba0c95eb by Ben Clayton

Regres: Fix uncovered calculations after optimizations

The uncovered span calculations were ignoring span groups and inverted spans. This is now correctly handled by Tree.allSpans(). Bug: b/152192800 Change-Id: I2bd8afa3c956b03b598a3d5297cb775fd19da35d Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/43573 Kokoro-Result: kokoro <noreply+kokoro@google.com> Reviewed-by: 's avatarAntonio Maiorano <amaiorano@google.com> Tested-by: 's avatarBen Clayton <bclayton@google.com>
parent dc23b088
...@@ -148,16 +148,8 @@ func (t *Tree) writeFilesJSON(spansByID map[SpanID]Span, sb *strings.Builder) { ...@@ -148,16 +148,8 @@ func (t *Tree) writeFilesJSON(spansByID map[SpanID]Span, sb *strings.Builder) {
file := t.files[path] file := t.files[path]
uncovered := append(SpanList{}, file.allSpans...) uncovered := append(SpanList{}, file.allSpans...)
file.tcm.traverse(func(tc *TestCoverage) { for id := range t.allSpans(file, file.tcm) {
for id := range tc.Spans { uncovered.Remove(spansByID[id])
uncovered.Remove(spansByID[id])
}
})
percentage := 0.0
if totalLines := file.allSpans.NumLines(); totalLines > 0 {
uncoveredLines := uncovered.NumLines()
percentage = 1.0 - (float64(uncoveredLines) / float64(totalLines))
} }
if i > 0 { if i > 0 {
...@@ -167,9 +159,14 @@ func (t *Tree) writeFilesJSON(spansByID map[SpanID]Span, sb *strings.Builder) { ...@@ -167,9 +159,14 @@ func (t *Tree) writeFilesJSON(spansByID map[SpanID]Span, sb *strings.Builder) {
sb.WriteString(path) sb.WriteString(path)
sb.WriteString(`":`) sb.WriteString(`":`)
sb.WriteString(`{`) sb.WriteString(`{`)
sb.WriteString(`"p":`) if totalLines := file.allSpans.NumLines(); totalLines > 0 {
sb.WriteString(fmt.Sprintf("%v", percentage)) uncoveredLines := uncovered.NumLines()
sb.WriteString(`,"g":`) percentage := 1.0 - (float64(uncoveredLines) / float64(totalLines))
sb.WriteString(`"p":`)
sb.WriteString(fmt.Sprintf("%v", percentage))
sb.WriteString(`,`)
}
sb.WriteString(`"g":`)
t.writeSpanGroupsJSON(file.spangroups, sb) t.writeSpanGroupsJSON(file.spangroups, sb)
sb.WriteString(`,"u":`) sb.WriteString(`,"u":`)
t.writeUncoveredJSON(file, uncovered, sb) t.writeUncoveredJSON(file, uncovered, sb)
...@@ -324,20 +321,11 @@ func (p *parser) populateAllSpans(tree *Tree) { ...@@ -324,20 +321,11 @@ func (p *parser) populateAllSpans(tree *Tree) {
for span, id := range tree.spans { for span, id := range tree.spans {
spansByID[id] = span spansByID[id] = span
} }
for _, tf := range tree.files { for _, file := range tree.files {
tf.tcm.traverse(func(tc *TestCoverage) { for spanID := range tree.allSpans(file, file.tcm) {
for spanID := range tc.Spans { span := spansByID[spanID]
span := spansByID[spanID] file.allSpans.Add(span)
tf.allSpans.Add(span) }
}
if groupID := tc.Group; groupID != nil {
group := tf.spangroups[*groupID]
for spanID := range group.Spans {
span := spansByID[spanID]
tf.allSpans.Add(span)
}
}
})
} }
} }
......
...@@ -170,6 +170,21 @@ nextFile: ...@@ -170,6 +170,21 @@ nextFile:
} }
} }
// allSpans returns all the spans in use by the TestCoverageMap and its children.
func (t *Tree) allSpans(tf *treeFile, tcm TestCoverageMap) SpanSet {
spans := SpanSet{}
for _, tc := range tcm {
for id := tc.Group; id != nil; id = tf.spangroups[*id].Extend {
group := tf.spangroups[*id]
spans = spans.addAll(group.Spans)
}
spans = spans.addAll(tc.Spans)
spans = spans.addAll(spans.invertAll(t.allSpans(tf, tc.Children)))
}
return spans
}
// StringID is an identifier of a string // StringID is an identifier of a string
type StringID int type StringID int
...@@ -437,6 +452,21 @@ func (s SpanSet) invert(rhs SpanID) SpanSet { ...@@ -437,6 +452,21 @@ func (s SpanSet) invert(rhs SpanID) SpanSet {
return s.add(rhs) return s.add(rhs)
} }
func (s SpanSet) invertAll(rhs SpanSet) SpanSet {
out := make(SpanSet, len(s)+len(rhs))
for span := range s {
if !rhs.contains(span) {
out[span] = struct{}{}
}
}
for span := range rhs {
if !s.contains(span) {
out[span] = struct{}{}
}
}
return out
}
// SpanGroupID is an identifier of a SpanGroup. // SpanGroupID is an identifier of a SpanGroup.
type SpanGroupID int type SpanGroupID int
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment