github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/internal/coverage/decodemeta/decodefile.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package decodemeta 6 7 import ( 8 "github.com/shogo82148/std/bufio" 9 "github.com/shogo82148/std/internal/coverage" 10 "github.com/shogo82148/std/internal/coverage/stringtab" 11 "github.com/shogo82148/std/os" 12 ) 13 14 // CoverageMetaFileReader provides state and methods for reading 15 // a meta-data file from a code coverage run. 16 type CoverageMetaFileReader struct { 17 f *os.File 18 hdr coverage.MetaFileHeader 19 tmp []byte 20 pkgOffsets []uint64 21 pkgLengths []uint64 22 strtab *stringtab.Reader 23 fileRdr *bufio.Reader 24 fileView []byte 25 debug bool 26 } 27 28 // NewCoverageMetaFileReader returns a new helper object for reading 29 // the coverage meta-data output file 'f'. The param 'fileView' is a 30 // read-only slice containing the contents of 'f' obtained by mmap'ing 31 // the file read-only; 'fileView' may be nil, in which case the helper 32 // will read the contents of the file using regular file Read 33 // operations. 34 func NewCoverageMetaFileReader(f *os.File, fileView []byte) (*CoverageMetaFileReader, error) 35 36 // NumPackages returns the number of packages for which this file 37 // contains meta-data. 38 func (r *CoverageMetaFileReader) NumPackages() uint64 39 40 // CounterMode returns the counter mode (set, count, atomic) used 41 // when building for coverage for the program that produce this 42 // meta-data file. 43 func (r *CoverageMetaFileReader) CounterMode() coverage.CounterMode 44 45 // CounterGranularity returns the counter granularity (single counter per 46 // function, or counter per block) selected when building for coverage 47 // for the program that produce this meta-data file. 48 func (r *CoverageMetaFileReader) CounterGranularity() coverage.CounterGranularity 49 50 // FileHash returns the hash computed for all of the package meta-data 51 // blobs. Coverage counter data files refer to this hash, and the 52 // hash will be encoded into the meta-data file name. 53 func (r *CoverageMetaFileReader) FileHash() [16]byte 54 55 // GetPackageDecoder requests a decoder object for the package within 56 // the meta-data file whose index is 'pkIdx'. If the 57 // CoverageMetaFileReader was set up with a read-only file view, a 58 // pointer into that file view will be returned, otherwise the buffer 59 // 'payloadbuf' will be written to (or if it is not of sufficient 60 // size, a new buffer will be allocated). Return value is the decoder, 61 // a byte slice with the encoded meta-data, and an error. 62 func (r *CoverageMetaFileReader) GetPackageDecoder(pkIdx uint32, payloadbuf []byte) (*CoverageMetaDataDecoder, []byte, error) 63 64 // GetPackagePayload returns the raw (encoded) meta-data payload for the 65 // package with index 'pkIdx'. As with GetPackageDecoder, if the 66 // CoverageMetaFileReader was set up with a read-only file view, a 67 // pointer into that file view will be returned, otherwise the buffer 68 // 'payloadbuf' will be written to (or if it is not of sufficient 69 // size, a new buffer will be allocated). Return value is the decoder, 70 // a byte slice with the encoded meta-data, and an error. 71 func (r *CoverageMetaFileReader) GetPackagePayload(pkIdx uint32, payloadbuf []byte) ([]byte, error)