Android-x86
Fork
Donation

  • R/O
  • HTTP
  • SSH
  • HTTPS

external-swiftshader: Commit

external/swiftshader


Commit MetaInfo

Revisionba0c95eb406fb2c36cb2d1515765f4de82cbed9b (tree)
Time2020-04-08 06:06:47
AuthorBen Clayton <bclayton@goog...>
CommiterBen Clayton

Log Message

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: Antonio Maiorano <amaiorano@google.com>
Tested-by: Ben Clayton <bclayton@google.com>

Change Summary

Incremental Difference

--- a/tests/regres/cov/serialization.go
+++ b/tests/regres/cov/serialization.go
@@ -148,16 +148,8 @@ func (t *Tree) writeFilesJSON(spansByID map[SpanID]Span, sb *strings.Builder) {
148148 file := t.files[path]
149149
150150 uncovered := append(SpanList{}, file.allSpans...)
151- file.tcm.traverse(func(tc *TestCoverage) {
152- for id := range tc.Spans {
153- uncovered.Remove(spansByID[id])
154- }
155- })
156-
157- percentage := 0.0
158- if totalLines := file.allSpans.NumLines(); totalLines > 0 {
159- uncoveredLines := uncovered.NumLines()
160- percentage = 1.0 - (float64(uncoveredLines) / float64(totalLines))
151+ for id := range t.allSpans(file, file.tcm) {
152+ uncovered.Remove(spansByID[id])
161153 }
162154
163155 if i > 0 {
@@ -167,9 +159,14 @@ func (t *Tree) writeFilesJSON(spansByID map[SpanID]Span, sb *strings.Builder) {
167159 sb.WriteString(path)
168160 sb.WriteString(`":`)
169161 sb.WriteString(`{`)
170- sb.WriteString(`"p":`)
171- sb.WriteString(fmt.Sprintf("%v", percentage))
172- sb.WriteString(`,"g":`)
162+ if totalLines := file.allSpans.NumLines(); totalLines > 0 {
163+ uncoveredLines := uncovered.NumLines()
164+ percentage := 1.0 - (float64(uncoveredLines) / float64(totalLines))
165+ sb.WriteString(`"p":`)
166+ sb.WriteString(fmt.Sprintf("%v", percentage))
167+ sb.WriteString(`,`)
168+ }
169+ sb.WriteString(`"g":`)
173170 t.writeSpanGroupsJSON(file.spangroups, sb)
174171 sb.WriteString(`,"u":`)
175172 t.writeUncoveredJSON(file, uncovered, sb)
@@ -324,20 +321,11 @@ func (p *parser) populateAllSpans(tree *Tree) {
324321 for span, id := range tree.spans {
325322 spansByID[id] = span
326323 }
327- for _, tf := range tree.files {
328- tf.tcm.traverse(func(tc *TestCoverage) {
329- for spanID := range tc.Spans {
330- span := spansByID[spanID]
331- tf.allSpans.Add(span)
332- }
333- if groupID := tc.Group; groupID != nil {
334- group := tf.spangroups[*groupID]
335- for spanID := range group.Spans {
336- span := spansByID[spanID]
337- tf.allSpans.Add(span)
338- }
339- }
340- })
324+ for _, file := range tree.files {
325+ for spanID := range tree.allSpans(file, file.tcm) {
326+ span := spansByID[spanID]
327+ file.allSpans.Add(span)
328+ }
341329 }
342330 }
343331
--- a/tests/regres/cov/tree.go
+++ b/tests/regres/cov/tree.go
@@ -170,6 +170,21 @@ nextFile:
170170 }
171171 }
172172
173+// allSpans returns all the spans in use by the TestCoverageMap and its children.
174+func (t *Tree) allSpans(tf *treeFile, tcm TestCoverageMap) SpanSet {
175+ spans := SpanSet{}
176+ for _, tc := range tcm {
177+ for id := tc.Group; id != nil; id = tf.spangroups[*id].Extend {
178+ group := tf.spangroups[*id]
179+ spans = spans.addAll(group.Spans)
180+ }
181+ spans = spans.addAll(tc.Spans)
182+
183+ spans = spans.addAll(spans.invertAll(t.allSpans(tf, tc.Children)))
184+ }
185+ return spans
186+}
187+
173188 // StringID is an identifier of a string
174189 type StringID int
175190
@@ -437,6 +452,21 @@ func (s SpanSet) invert(rhs SpanID) SpanSet {
437452 return s.add(rhs)
438453 }
439454
455+func (s SpanSet) invertAll(rhs SpanSet) SpanSet {
456+ out := make(SpanSet, len(s)+len(rhs))
457+ for span := range s {
458+ if !rhs.contains(span) {
459+ out[span] = struct{}{}
460+ }
461+ }
462+ for span := range rhs {
463+ if !s.contains(span) {
464+ out[span] = struct{}{}
465+ }
466+ }
467+ return out
468+}
469+
440470 // SpanGroupID is an identifier of a SpanGroup.
441471 type SpanGroupID int
442472
Show on old repository browser