aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/cover/report.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2021-03-16 17:18:58 +0100
committerDmitry Vyukov <dvyukov@google.com>2021-03-18 09:17:51 +0100
commitc86aca3f01de03aaadc6ef5006846bbba1e5a154 (patch)
tree3129f6f7c318144ad5c26efcd4ac2d72d44f1bdb /pkg/cover/report.go
parent9c04290738141669bf76cc2d861ffd633c90c73c (diff)
pkg/cover: use symbols to split PCs by module
We already find symbol for every PC in lazySymbolize. We can just use that to map PCs to modules instead of the additional modules sorting/searching.
Diffstat (limited to 'pkg/cover/report.go')
-rw-r--r--pkg/cover/report.go19
1 files changed, 5 insertions, 14 deletions
diff --git a/pkg/cover/report.go b/pkg/cover/report.go
index 651bc62f2..b622af4a4 100644
--- a/pkg/cover/report.go
+++ b/pkg/cover/report.go
@@ -110,11 +110,7 @@ func (rg *ReportGenerator) prepareFileMap(progs []Prog) (map[string]*file, error
for _, frame := range rg.Frames {
f := getFile(files, frame.Name, frame.Path)
ln := f.lines[frame.StartLine]
- pc := frame.PC
- if frame.Module.Name != "" {
- pc += frame.Module.Addr
- }
- coveredBy := progPCs[pc]
+ coveredBy := progPCs[frame.PC]
if len(coveredBy) == 0 {
f.uncovered = append(f.uncovered, frame.Range)
continue
@@ -172,7 +168,7 @@ func (rg *ReportGenerator) lazySymbolize(progs []Prog) error {
}
symbolize := make(map[*backend.Symbol]bool)
uniquePCs := make(map[uint64]bool)
- var pcs []uint64
+ pcs := make(map[*backend.Module][]uint64)
for _, prog := range progs {
for _, pc := range prog.PCs {
if uniquePCs[pc] {
@@ -180,21 +176,16 @@ func (rg *ReportGenerator) lazySymbolize(progs []Prog) error {
}
uniquePCs[pc] = true
sym := rg.findSymbol(pc)
- if sym == nil {
+ if sym == nil || (sym.Symbolized || symbolize[sym]) {
continue
}
- if !sym.Symbolized && !symbolize[sym] {
- symbolize[sym] = true
- pcs = append(pcs, sym.PCs...)
- }
+ symbolize[sym] = true
+ pcs[sym.Module] = append(pcs[sym.Module], sym.PCs...)
}
}
if len(uniquePCs) == 0 {
return fmt.Errorf("no coverage collected so far")
}
- if len(pcs) == 0 {
- return nil
- }
frames, err := rg.Symbolize(pcs)
if err != nil {
return err