const (
// Special P identifiers:
FakeP = 1000000 + iota
TimerP // depicts timer unblocks
NetpollP // depicts network unblocks
SyscallP // depicts returns from syscalls
GCP // depicts GC state
ProfileP // depicts recording of CPU profile samples
)
const CommonStyle = `
/* See https://github.com/golang/pkgsite/blob/master/static/shared/typography/typography.css */
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
font-size: 1rem;
line-height: normal;
max-width: 9in;
margin: 1em;
}
h1 { font-size: 1.5rem; }
h2 { font-size: 1.375rem; }
h1,h2 {
font-weight: 600;
line-height: 1.25em;
word-break: break-word;
}
p { color: grey85; font-size:85%; }
code,
pre,
textarea.code {
font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;
font-size: 0.875rem;
line-height: 1.5em;
}
pre,
textarea.code {
background-color: var(--color-background-accented);
border: var(--border);
border-radius: var(--border-radius);
color: var(--color-text);
overflow-x: auto;
padding: 0.625rem;
tab-size: 4;
white-space: pre;
}
`
func BuildProfile(prof []ProfileRecord) *profile.Profile
func MMUHandlerFunc(ranges []Range, f MutatorUtilFunc) http.HandlerFunc
func MainHandler(views []View) http.Handler
func SVGProfileHandlerFunc(f ProfileFunc) http.HandlerFunc
SVGProfileHandlerFunc serves pprof-like profile generated by prof as svg.
func StaticHandler() http.Handler
func TraceHandler() http.Handler
func WalkStackFrames(allFrames map[string]format.Frame, id int, fn func(id int))
WalkStackFrames calls fn for id and all of its parent frames from allFrames.
type ArrowEvent struct {
Name string
Start time.Duration
End time.Duration
FromResource uint64
FromStack int
ToResource uint64
}
type AsyncSliceEvent struct {
SliceEvent
Category string
Scope string
TaskColorIndex uint64 // Take on the same color as the task with this ID.
}
type Emitter struct {
// contains filtered or unexported fields
}
func NewEmitter(c TraceConsumer, rangeStart, rangeEnd time.Duration) *Emitter
NewEmitter returns a new Emitter that writes to c. The rangeStart and rangeEnd args are used for splitting large traces.
func (e *Emitter) Arrow(a ArrowEvent)
func (e *Emitter) AsyncSlice(s AsyncSliceEvent)
func (e *Emitter) Err() error
Err returns an error if the emitter is in an invalid state.
func (e *Emitter) Event(ev *format.Event)
func (e *Emitter) Flush()
func (e *Emitter) Focus(id uint64)
func (e *Emitter) Gomaxprocs(v uint64)
func (e *Emitter) GoroutineTransition(ts time.Duration, from, to GState)
func (e *Emitter) HeapAlloc(ts time.Duration, v uint64)
func (e *Emitter) HeapGoal(ts time.Duration, v uint64)
func (e *Emitter) IncThreadStateCount(ts time.Duration, state ThreadState, delta int64)
func (e *Emitter) Instant(i InstantEvent)
func (e *Emitter) OptionalEvent(ev *format.Event)
OptionalEvent emits ev if it's within the time range of the consumer, i.e. the selected trace split range.
func (e *Emitter) Resource(id uint64, name string)
func (e *Emitter) SetResourceFilter(filter func(uint64) bool)
func (e *Emitter) SetResourceType(name string)
func (e *Emitter) Slice(s SliceEvent)
func (e *Emitter) Stack(stk []trace.StackFrame) int
Stack emits the given frames and returns a unique id for the stack. No pointers to the given data are being retained beyond the call to Stack.
func (e *Emitter) Task(id uint64, name string, sortIndex int)
func (e *Emitter) TaskArrow(a ArrowEvent)
func (e *Emitter) TaskSlice(s SliceEvent)
type GState int
const (
GDead GState = iota
GRunnable
GRunning
GWaiting
GWaitingGC
)
type InstantEvent struct {
Ts time.Duration
Name string
Category string
Resource uint64
Stack int
Arg any
}
type Mode int
const (
ModeGoroutineOriented Mode = 1 << iota
ModeTaskOriented
ModeThreadOriented // Mutually exclusive with ModeGoroutineOriented.
)
type MutatorUtilFunc func(trace.UtilFlags) ([][]trace.MutatorUtil, error)
type ProfileFunc func(r *http.Request) ([]ProfileRecord, error)
type ProfileRecord struct {
Stack []trace.StackFrame
Count uint64
Time time.Duration
}
type Range struct {
Name string
Start int
End int
StartTime int64
EndTime int64
}
func (r Range) URL(viewType ViewType) string
type SliceEvent struct {
Name string
Ts time.Duration
Dur time.Duration
Resource uint64
Stack int
EndStack int
Arg any
}
type ThreadState int
const (
ThreadStateInSyscall ThreadState = iota
ThreadStateInSyscallRuntime
ThreadStateRunning
)
TimeHistogram is an high-dynamic-range histogram for durations.
type TimeHistogram struct {
Count int
Buckets []int
MinBucket, MaxBucket int
}
func (h *TimeHistogram) Add(d time.Duration)
Add adds a single sample to the histogram.
func (h *TimeHistogram) BucketMin(bucket int) time.Duration
BucketMin returns the minimum duration value for a provided bucket.
func (h *TimeHistogram) ToHTML(urlmaker func(min, max time.Duration) string) template.HTML
ToHTML renders the histogram as HTML.
type TraceConsumer struct {
ConsumeTimeUnit func(unit string)
ConsumeViewerEvent func(v *format.Event, required bool)
ConsumeViewerFrame func(key string, f format.Frame)
Flush func()
}
func SplittingTraceConsumer(max int) (*splitter, TraceConsumer)
func ViewerDataTraceConsumer(w io.Writer, startIdx, endIdx int64) TraceConsumer
ViewerDataTraceConsumer returns a TraceConsumer that writes to w. The startIdx and endIdx are used for splitting large traces. They refer to indexes in the traceEvents output array, not the events in the trace input.
type View struct {
Type ViewType
Ranges []Range
}
func (v View) URL(rangeIdx int) string
type ViewType string
const (
ViewProc ViewType = "proc"
ViewThread ViewType = "thread"
)
| Name | Synopsis |
|---|---|
| .. | |