aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/html.go21
-rw-r--r--pkg/cover/report.go9
2 files changed, 30 insertions, 0 deletions
diff --git a/pkg/cover/html.go b/pkg/cover/html.go
index bdbd3bbf4..63b1506c1 100644
--- a/pkg/cover/html.go
+++ b/pkg/cover/html.go
@@ -4,6 +4,7 @@
package cover
import (
+ "bufio"
"bytes"
"encoding/csv"
"fmt"
@@ -12,6 +13,7 @@ import (
"io"
"io/ioutil"
"math"
+ "net/http"
"path/filepath"
"sort"
"strconv"
@@ -104,6 +106,25 @@ func (rg *ReportGenerator) DoHTML(w io.Writer, progs []Prog) error {
return coverTemplate.Execute(w, d)
}
+func (rg *ReportGenerator) DoRawCoverFiles(w http.ResponseWriter, progs []Prog) error {
+ if err := rg.lazySymbolize(progs); err != nil {
+ return err
+ }
+ sort.Slice(rg.Frames, func(i, j int) bool {
+ return rg.Frames[i].PC < rg.Frames[j].PC
+ })
+
+ w.Header().Set("Content-Type", "text/plain; charset=utf-8")
+ buf := bufio.NewWriter(w)
+ fmt.Fprintf(buf, "PC,Module,Offset,Filename,StartLine,EndLine\n")
+ for _, frame := range rg.Frames {
+ offset := frame.PC - frame.Module.Addr
+ fmt.Fprintf(buf, "0x%x,%v,0x%x,%v,%v\n", frame.PC, frame.Module.Name, offset, frame.Name, frame.StartLine)
+ }
+ buf.Flush()
+ return nil
+}
+
type fileStats struct {
Name string
CoveredLines int
diff --git a/pkg/cover/report.go b/pkg/cover/report.go
index 8f805fe10..c7d96b703 100644
--- a/pkg/cover/report.go
+++ b/pkg/cover/report.go
@@ -175,6 +175,15 @@ func (rg *ReportGenerator) lazySymbolize(progs []Prog) error {
return err
}
rg.Frames = append(rg.Frames, frames...)
+ uniqueFrames := make(map[uint64]bool)
+ var finalFrames []backend.Frame
+ for _, frame := range rg.Frames {
+ if !uniqueFrames[frame.PC] {
+ uniqueFrames[frame.PC] = true
+ finalFrames = append(finalFrames, frame)
+ }
+ }
+ rg.Frames = finalFrames
for sym := range symbolize {
sym.Symbolized = true
}