aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/covermerger
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-08-14 16:55:20 +0200
committerTaras Madan <tarasmadan@google.com>2024-08-16 09:17:58 +0000
commitbf5013fbdcd591b55cfc8151a971fcc6f727ad29 (patch)
treeb16feff72a61913618e8bb4c2ce5cc4de4105fdb /pkg/covermerger
parentf13a072362423321c5643f0a95caae95964726d4 (diff)
pkg/covermerger: store line details
Diffstat (limited to 'pkg/covermerger')
-rw-r--r--pkg/covermerger/covermerger.go8
-rw-r--r--pkg/covermerger/file_line_merger.go22
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
}