aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJoey Jiao <quic_jiangenj@quicinc.com>2024-05-13 12:46:45 +0800
committerDmitry Vyukov <dvyukov@google.com>2024-06-11 04:38:10 +0000
commit08c5b761d289843b83009b008b3eb878cb94b439 (patch)
tree392dd9f952bf5568b95b4c904679ff16b93f6d06 /pkg
parent004eed1484ee57028a0173e51568305f19d657b6 (diff)
pkg/cover: parallelize symbolizeModule to speed up the symbolize
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/backend/dwarf.go19
1 files changed, 15 insertions, 4 deletions
diff --git a/pkg/cover/backend/dwarf.go b/pkg/cover/backend/dwarf.go
index a1f2b3e1e..5b2281a36 100644
--- a/pkg/cover/backend/dwarf.go
+++ b/pkg/cover/backend/dwarf.go
@@ -458,12 +458,23 @@ func symbolizeModule(target *targets.Target, interner *symbolizer.Interner, objD
func symbolize(target *targets.Target, interner *symbolizer.Interner, objDir, srcDir, buildDir string,
splitBuildDelimiters []string, pcs map[*Module][]uint64) ([]Frame, error) {
var frames []Frame
+ type frameResult struct {
+ frames []Frame
+ err error
+ }
+ frameC := make(chan frameResult, len(pcs))
for mod, pcs1 := range pcs {
- frames1, err := symbolizeModule(target, interner, objDir, srcDir, buildDir, splitBuildDelimiters, mod, pcs1)
- if err != nil {
- return nil, err
+ go func(mod *Module, pcs []uint64) {
+ frames, err := symbolizeModule(target, interner, objDir, srcDir, buildDir, splitBuildDelimiters, mod, pcs)
+ frameC <- frameResult{frames: frames, err: err}
+ }(mod, pcs1)
+ }
+ for range pcs {
+ res := <-frameC
+ if res.err != nil {
+ return nil, res.err
}
- frames = append(frames, frames1...)
+ frames = append(frames, res.frames...)
}
return frames, nil
}