mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: new profile buffer implementation supporting label pointers
The existing CPU profiling buffer is a slice of uintptr, but we want to start including profiling label data in the profiles, and those labels need to be pointers in order to let them describe rich information. This CL implements a new profBuf type that holds both a slice of uint64 for data and a slice of unsafe.Pointer for profiling labels (aka tags). Making the runtime use these buffers will happen in followup CLs. Change-Id: I9ff16b532d8edaf4ce0cbba1098229a561834efc Reviewed-on: https://go-review.googlesource.com/36713 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
9230ee20f3
commit
b788fd80e6
5 changed files with 761 additions and 4 deletions
|
|
@ -248,3 +248,26 @@ func CountPagesInUse() (pagesInUse, counted uintptr) {
|
|||
|
||||
func Fastrand() uint32 { return fastrand() }
|
||||
func Fastrandn(n uint32) uint32 { return fastrandn(n) }
|
||||
|
||||
type ProfBuf profBuf
|
||||
|
||||
func NewProfBuf(hdrsize, bufwords, tags int) *ProfBuf {
|
||||
return (*ProfBuf)(newProfBuf(hdrsize, bufwords, tags))
|
||||
}
|
||||
|
||||
func (p *ProfBuf) Write(tag *unsafe.Pointer, now int64, hdr []uint64, stk []uintptr) {
|
||||
(*profBuf)(p).write(tag, now, hdr, stk)
|
||||
}
|
||||
|
||||
const (
|
||||
ProfBufBlocking = profBufBlocking
|
||||
ProfBufNonBlocking = profBufNonBlocking
|
||||
)
|
||||
|
||||
func (p *ProfBuf) Read(mode profBufReadMode) ([]uint64, []unsafe.Pointer, bool) {
|
||||
return (*profBuf)(p).read(profBufReadMode(mode))
|
||||
}
|
||||
|
||||
func (p *ProfBuf) Close() {
|
||||
(*profBuf)(p).close()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue