aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-11-06 20:50:45 +0100
committerTaras Madan <tarasmadan@google.com>2024-11-07 08:38:08 +0000
commit867e44df36d93e8127938eca6f6a5c339a2ba0b8 (patch)
tree5ac045074727eb4b67dc7f2d90414c43317a2dd8
parent69abf6c7a42942f529f2b3d5b6917f97c5aecc10 (diff)
pkg/coveragedb: store hitcount instead of coveredlines
Instrumented lines + hit count gives more information than instrumented + covered lines. Expected storage cost is at the same level.
-rw-r--r--pkg/coveragedb/spanner.go8
-rwxr-xr-xtools/syz-covermerger/init_db.sh2
-rw-r--r--tools/syz-covermerger/syz_covermerger.go24
3 files changed, 19 insertions, 15 deletions
diff --git a/pkg/coveragedb/spanner.go b/pkg/coveragedb/spanner.go
index dfab7ff7a..0ff3a3197 100644
--- a/pkg/coveragedb/spanner.go
+++ b/pkg/coveragedb/spanner.go
@@ -22,7 +22,7 @@ type FilesRecord struct {
Instrumented int64
Covered int64
LinesInstrumented []int64
- LinesCovered []int64
+ HitCounts []int64
}
type FileSubsystems struct {
@@ -51,7 +51,7 @@ type Coverage struct {
Instrumented int64
Covered int64
LinesInstrumented []int64
- LinesCovered []int64
+ HitCounts []int64
}
func SaveMergeResult(ctx context.Context, projectID string, covMap map[string]*Coverage,
@@ -113,10 +113,10 @@ func fileRecordMutation(session, filePath string, record *Coverage) *spanner.Mut
Instrumented: record.Instrumented,
Covered: record.Covered,
LinesInstrumented: record.LinesInstrumented,
- LinesCovered: record.LinesCovered,
+ HitCounts: record.HitCounts,
})
if err != nil {
- panic(fmt.Sprintf("failed to fileRecordMutation(): %s", err.Error()))
+ panic(fmt.Sprintf("failed to fileRecordMutation: %v", err))
}
return insert
}
diff --git a/tools/syz-covermerger/init_db.sh b/tools/syz-covermerger/init_db.sh
index bc72218bc..d31f68e9a 100755
--- a/tools/syz-covermerger/init_db.sh
+++ b/tools/syz-covermerger/init_db.sh
@@ -18,7 +18,7 @@ CREATE TABLE
"instrumented" bigint,
"covered" bigint,
"linesinstrumented" bigint[],
- "linescovered" bigint[],
+ "hitcounts" bigint[],
PRIMARY KEY
(session, filepath) );')
gcloud spanner databases ddl update $db --instance=syzbot --project=syzkaller \
diff --git a/tools/syz-covermerger/syz_covermerger.go b/tools/syz-covermerger/syz_covermerger.go
index b64d4dae8..0f7782076 100644
--- a/tools/syz-covermerger/syz_covermerger.go
+++ b/tools/syz-covermerger/syz_covermerger.go
@@ -140,22 +140,26 @@ func mergeResultsToCoverage(mergedCoverage map[string]*covermerger.MergeResult,
if !lineStat.FileExists {
continue
}
- var linesInstrumented, linesCovered []int64
- for lineNum, lineHitCount := range lineStat.HitCounts {
- linesInstrumented = append(linesInstrumented, int64(lineNum))
- if lineHitCount > 0 {
- linesCovered = append(linesCovered, int64(lineNum))
+
+ lines := maps.Keys(lineStat.HitCounts)
+ slices.Sort(lines)
+
+ var linesInstrumented, hitCounts []int64
+ var instrumented, covered int64
+ for _, line := range lines {
+ instrumented++
+ linesInstrumented = append(linesInstrumented, int64(line))
+ hitCount := lineStat.HitCounts[line]
+ hitCounts = append(hitCounts, int64(hitCount))
+ if hitCount > 0 {
+ covered++
}
}
- slices.Sort(linesInstrumented)
- slices.Sort(linesCovered)
- instrumented := int64(len(linesInstrumented))
- covered := int64(len(linesCovered))
res[fileName] = &coveragedb.Coverage{
Instrumented: instrumented,
Covered: covered,
LinesInstrumented: linesInstrumented,
- LinesCovered: linesCovered,
+ HitCounts: hitCounts,
}
totalInstrumented += instrumented
totalCovered += covered