diff options
| author | Taras Madan <tarasmadan@google.com> | 2024-08-14 16:55:20 +0200 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-08-16 09:17:58 +0000 |
| commit | bf5013fbdcd591b55cfc8151a971fcc6f727ad29 (patch) | |
| tree | b16feff72a61913618e8bb4c2ce5cc4de4105fdb | |
| parent | f13a072362423321c5643f0a95caae95964726d4 (diff) | |
pkg/covermerger: store line details
| -rw-r--r-- | pkg/covermerger/covermerger.go | 8 | ||||
| -rw-r--r-- | pkg/covermerger/file_line_merger.go | 22 |
2 files changed, 19 insertions, 11 deletions
diff --git a/pkg/covermerger/covermerger.go b/pkg/covermerger/covermerger.go index 5c3e021a6..35ac58b92 100644 --- a/pkg/covermerger/covermerger.go +++ b/pkg/covermerger/covermerger.go @@ -40,8 +40,9 @@ type RepoBranchCommit struct { } type MergeResult struct { - HitCounts map[int]int - FileExists bool + HitCounts map[int]int + FileExists bool + LineDetails map[int][]*FileRecord } type FileCoverageMerger interface { @@ -61,7 +62,7 @@ func batchFileData(c *Config, targetFilePath string, records []*FileRecord) (*Me if err != nil { return nil, fmt.Errorf("failed to getFileVersions: %w", err) } - merger := makeFileLineCoverMerger(fvs, c.Base) + merger := makeFileLineCoverMerger(fvs, c.Base, c.StoreDetails) for _, record := range records { merger.Add(record) } @@ -111,6 +112,7 @@ type Config struct { skipRepoClone bool Base RepoBranchCommit FileVersProvider FileVersProvider + StoreDetails bool } func isSchema(fields, schema []string) bool { diff --git a/pkg/covermerger/file_line_merger.go b/pkg/covermerger/file_line_merger.go index 4cfeef2d9..5d609b749 100644 --- a/pkg/covermerger/file_line_merger.go +++ b/pkg/covermerger/file_line_merger.go @@ -6,7 +6,7 @@ package covermerger import "github.com/google/syzkaller/pkg/log" func makeFileLineCoverMerger( - fvs fileVersions, base RepoBranchCommit) FileCoverageMerger { + fvs fileVersions, base RepoBranchCommit, storeDetails bool) FileCoverageMerger { baseFile := "" baseFileExists := false for rbc, fv := range fvs { @@ -20,12 +20,18 @@ func makeFileLineCoverMerger( return &DeletedFileLineMerger{} } a := &FileLineCoverMerger{ + MergeResult: &MergeResult{ + HitCounts: make(map[int]int), + FileExists: true, + }, rbcToFile: fvs, baseFile: baseFile, - hitCounts: make(map[int]int), matchers: make(map[RepoBranchCommit]*LineToLineMatcher), lostFrames: map[RepoBranchCommit]int64{}, } + if storeDetails { + a.MergeResult.LineDetails = make(map[int][]*FileRecord) + } for rbc, fv := range fvs { a.matchers[rbc] = makeLineToLineMatcher(fv, baseFile) } @@ -33,9 +39,9 @@ func makeFileLineCoverMerger( } type FileLineCoverMerger struct { + *MergeResult rbcToFile fileVersions baseFile string - hitCounts map[int]int matchers map[RepoBranchCommit]*LineToLineMatcher lostFrames map[RepoBranchCommit]int64 } @@ -48,7 +54,10 @@ func (a *FileLineCoverMerger) Add(record *FileRecord) { return } if targetLine := a.matchers[record.RepoBranchCommit].SameLinePos(record.StartLine); targetLine != -1 { - a.hitCounts[targetLine] += record.HitCount + a.HitCounts[targetLine] += record.HitCount + if a.LineDetails != nil { + a.LineDetails[targetLine] = append(a.LineDetails[record.StartLine], record) + } } } @@ -57,8 +66,5 @@ func (a *FileLineCoverMerger) Result() *MergeResult { log.Logf(1, "\t[warn] lost %d frames from rbc(%s, %s, %s)", lostFrames, rbc.Repo, rbc.Branch, rbc.Commit) } - return &MergeResult{ - HitCounts: a.hitCounts, - FileExists: true, - } + return a.MergeResult } |
