func pprofByGoroutine(compute computePprofFunc, t *parsedTrace) traceviewer.ProfileFunc { … } func pprofByRegion(compute computePprofFunc, t *parsedTrace) traceviewer.ProfileFunc { … } // pprofMatchingGoroutines returns the ids of goroutines of the matching name and its interval. // If the id string is empty, returns nil without an error. func pprofMatchingGoroutines(name string, t *parsedTrace) (map[trace.GoID][]interval, error) { … } // pprofMatchingRegions returns the time intervals of matching regions // grouped by the goroutine id. If the filter is nil, returns nil without an error. func pprofMatchingRegions(filter *regionFilter, t *parsedTrace) (map[trace.GoID][]interval, error) { … } type computePprofFunc … // computePprofIO returns a computePprofFunc that generates IO pprof-like profile (time spent in // IO wait, currently only network blocking event). func computePprofIO() computePprofFunc { … } // computePprofBlock returns a computePprofFunc that generates blocking pprof-like profile // (time spent blocked on synchronization primitives). func computePprofBlock() computePprofFunc { … } // computePprofSyscall returns a computePprofFunc that generates a syscall pprof-like // profile (time spent in syscalls). func computePprofSyscall() computePprofFunc { … } // computePprofSched returns a computePprofFunc that generates a scheduler latency pprof-like profile // (time between a goroutine become runnable and actually scheduled for execution). func computePprofSched() computePprofFunc { … } // makeComputePprofFunc returns a computePprofFunc that generates a profile of time goroutines spend // in a particular state for the specified reasons. func makeComputePprofFunc(state trace.GoState, trackReason func(string) bool) computePprofFunc { … } // pprofOverlappingDuration returns the overlapping duration between // the time intervals in gToIntervals and the specified event. // If gToIntervals is nil, this simply returns the event's duration. func pprofOverlappingDuration(gToIntervals map[trace.GoID][]interval, id trace.GoID, sample interval) time.Duration { … } type interval … func (i interval) duration() time.Duration { … } func (i1 interval) overlap(i2 interval) time.Duration { … } const pprofMaxStack … type stackMap … func newStackMap() *stackMap { … } func (m *stackMap) getOrAdd(stack trace.Stack) *traceviewer.ProfileRecord { … } func (m *stackMap) profile() []traceviewer.ProfileRecord { … } // pcsForStack extracts the first pprofMaxStack PCs from stack into pcs. func pcsForStack(stack trace.Stack, pcs *[pprofMaxStack]uint64) { … }