From e63481ffe5d7a5688b7422c02445312b5e9046eb Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 10 Apr 2025 12:01:26 +0200 Subject: dashboard/app: export info about uncovered blocks as well Currently it's only possible to understand total number of uncovered blocks in a function (implicitly defined by Instrumented field). This does not allow to render coverage data, nor do detailed analysis on line level. Export detailed info about both covered and uncovered blocks. This allows to e.g. calculate coverage percent for kernel interfaces. --- pkg/cover/html.go | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'pkg/cover/html.go') diff --git a/pkg/cover/html.go b/pkg/cover/html.go index c7bd945b6..1b2d4d024 100644 --- a/pkg/cover/html.go +++ b/pkg/cover/html.go @@ -264,19 +264,19 @@ type ProgramCoverage struct { } type FileCoverage struct { - Repo string `json:"repo,omitempty"` - Commit string `json:"commit,omitempty"` - FilePath string `json:"file_path"` - Functions []*FunctionCoverage `json:"functions"` + Repo string `json:"repo,omitempty"` + Commit string `json:"commit,omitempty"` + FilePath string `json:"file_path"` + Functions []*FuncCoverage `json:"functions"` } -type FunctionCoverage struct { - FuncName string `json:"func_name"` - Instrumented int `json:"total_blocks,omitempty"` - Blocks []*CoveredBlock `json:"covered_blocks"` +type FuncCoverage struct { + FuncName string `json:"func_name"` + Blocks []*Block `json:"blocks"` } -type CoveredBlock struct { +type Block struct { + HitCount int `json:"hit_count,omitempty"` FromLine int `json:"from_line"` FromCol int `json:"from_column"` ToLine int `json:"to_line"` @@ -312,22 +312,23 @@ func (rg *ReportGenerator) DoCoverPrograms(w io.Writer, params HandlerParams) er var progCoverage []*FileCoverage for filePath, functions := range fileFuncFrames { - var expFuncs []*FunctionCoverage + var expFuncs []*FuncCoverage for funcName, frames := range functions { - var expCoveredBlocks []*CoveredBlock + var expCoveredBlocks []*Block for _, frame := range frames { endCol := frame.EndCol if endCol == backend.LineEnd { endCol = -1 } - expCoveredBlocks = append(expCoveredBlocks, &CoveredBlock{ + expCoveredBlocks = append(expCoveredBlocks, &Block{ + HitCount: 1, FromCol: frame.StartCol, FromLine: frame.StartLine, ToCol: endCol, ToLine: frame.EndLine, }) } - expFuncs = append(expFuncs, &FunctionCoverage{ + expFuncs = append(expFuncs, &FuncCoverage{ FuncName: funcName, Blocks: expCoveredBlocks, }) -- cgit mrf-deployment