diff options
| author | Joey Jiao <quic_jiangenj@quicinc.com> | 2024-05-13 12:46:45 +0800 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2024-06-11 04:38:10 +0000 |
| commit | 08c5b761d289843b83009b008b3eb878cb94b439 (patch) | |
| tree | 392dd9f952bf5568b95b4c904679ff16b93f6d06 /pkg | |
| parent | 004eed1484ee57028a0173e51568305f19d657b6 (diff) | |
pkg/cover: parallelize symbolizeModule to speed up the symbolize
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/backend/dwarf.go | 19 |
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 } |
