mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
cover: handle multiple samples from the same location
This change is ported from src/cmd/cover/profile.go[1].
Now that go test supported -coverprofile with multiple packages (#6909),
x/tools/cover/profile should also handle multiple samples from the same
location.
[1]: f39050c8eb
Fixes golang/go#23076
Change-Id: I1b1d664bf56f7e22c6cb2726df44fb577408c6f7
Reviewed-on: https://go-review.googlesource.com/83078
Run-TryBot: Rob Pike <r@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
parent
9b32ad6a00
commit
5d8e38b955
@ -91,6 +91,29 @@ func ParseProfiles(fileName string) ([]*Profile, error) {
|
|||||||
}
|
}
|
||||||
for _, p := range files {
|
for _, p := range files {
|
||||||
sort.Sort(blocksByStart(p.Blocks))
|
sort.Sort(blocksByStart(p.Blocks))
|
||||||
|
// Merge samples from the same location.
|
||||||
|
j := 1
|
||||||
|
for i := 1; i < len(p.Blocks); i++ {
|
||||||
|
b := p.Blocks[i]
|
||||||
|
last := p.Blocks[j-1]
|
||||||
|
if b.StartLine == last.StartLine &&
|
||||||
|
b.StartCol == last.StartCol &&
|
||||||
|
b.EndLine == last.EndLine &&
|
||||||
|
b.EndCol == last.EndCol {
|
||||||
|
if b.NumStmt != last.NumStmt {
|
||||||
|
return nil, fmt.Errorf("inconsistent NumStmt: changed from %d to %d", last.NumStmt, b.NumStmt)
|
||||||
|
}
|
||||||
|
if mode == "set" {
|
||||||
|
p.Blocks[j-1].Count |= b.Count
|
||||||
|
} else {
|
||||||
|
p.Blocks[j-1].Count += b.Count
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
p.Blocks[j] = b
|
||||||
|
j++
|
||||||
|
}
|
||||||
|
p.Blocks = p.Blocks[:j]
|
||||||
}
|
}
|
||||||
// Generate a sorted slice.
|
// Generate a sorted slice.
|
||||||
profiles := make([]*Profile, 0, len(files))
|
profiles := make([]*Profile, 0, len(files))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user