diff options
| author | Taras Madan <tarasmadan@google.com> | 2024-11-06 20:50:45 +0100 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-11-07 08:38:08 +0000 |
| commit | 867e44df36d93e8127938eca6f6a5c339a2ba0b8 (patch) | |
| tree | 5ac045074727eb4b67dc7f2d90414c43317a2dd8 | |
| parent | 69abf6c7a42942f529f2b3d5b6917f97c5aecc10 (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.go | 8 | ||||
| -rwxr-xr-x | tools/syz-covermerger/init_db.sh | 2 | ||||
| -rw-r--r-- | tools/syz-covermerger/syz_covermerger.go | 24 |
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 |
