Home | History | Annotate | Download | only in trace

Lines Matching refs:ev

345 	setGState := func(ev *trace.Event, g uint64, oldState, newState gState) {
357 for _, ev := range ctx.events {
359 switch ev.Type {
361 setGState(ev, ev.G, gRunnable, gRunning)
362 if _, ok := gnames[ev.G]; !ok {
363 if len(ev.Stk) > 0 {
364 gnames[ev.G] = fmt.Sprintf("G%v %s", ev.G, ev.Stk[0].Fn)
366 gnames[ev.G] = fmt.Sprintf("G%v", ev.G)
375 setGState(ev, ev.Args[0], gDead, gRunnable)
378 setGState(ev, ev.G, gRunning, gDead)
380 setGState(ev, ev.Args[0], gWaiting, gRunnable)
382 setGState(ev, ev.G, gWaiting, gRunnable)
385 setGState(ev, ev.G, gRunning, gWaiting)
388 setGState(ev, ev.G, gRunning, gRunnable)
392 setGState(ev, ev.G, gRunning, gWaiting)
394 setGState(ev, ev.G, gRunning, gWaitingGC)
396 setGState(ev, ev.G, gRunnable, gWaiting)
399 setGState(ev, ev.G, gRunnable, gWaiting)
402 ctx.heapStats.heapAlloc = ev.Args[0]
404 ctx.heapStats.nextGC = ev.Args[0]
410 return ctx.data, fmt.Errorf("invalid state after processing %v: runnable=%d running=%d insyscall=%d", ev, ctx.gstates[gRunnable], ctx.gstates[gRunning], ctx.threadStats.insyscall)
415 if ctx.gs != nil && ev.P < trace.FakeP && !ctx.gs[ev.G] {
418 if ev.Ts < ctx.startTime || ev.Ts > ctx.endTime {
422 if ev.P < trace.FakeP && ev.P > maxProc {
423 maxProc = ev.P
427 switch ev.Type {
432 ctx.emitInstant(ev, "proc start")
437 ctx.emitInstant(ev, "proc stop")
439 ctx.emitSlice(ev, "GC")
445 ctx.emitSlice(ev, "MARK TERMINATION")
448 ctx.emitSlice(ev, "SWEEP")
451 ctx.emitSlice(ev, gnames[ev.G])
453 ctx.emitSlice(ev, ev.SArgs[0])
455 ctx.emitArrow(ev, "go")
457 ctx.emitArrow(ev, "unblock")
459 ctx.emitInstant(ev, "syscall")
461 ctx.emitArrow(ev, "sysexit")
464 ctx.emitThreadCounters(ev)
465 ctx.emitHeapCounters(ev)
466 ctx.emitGoroutineCounters(ev)
513 func (ctx *traceContext) time(ev *trace.Event) float64 {
515 return float64(ev.Ts-ctx.startTime) / 1000
518 func (ctx *traceContext) proc(ev *trace.Event) uint64 {
519 if ctx.gtrace && ev.P < trace.FakeP {
520 return ev.G
522 return uint64(ev.P)
526 func (ctx *traceContext) emitSlice(ev *trace.Event, name string) {
530 Time: ctx.time(ev),
531 Dur: ctx.time(ev.Link) - ctx.time(ev),
532 Tid: ctx.proc(ev),
533 Stack: ctx.stack(ev.Stk),
534 EndStack: ctx.stack(ev.Link.Stk),
543 func (ctx *traceContext) emitHeapCounters(ev *trace.Event) {
554 ctx.emit(&ViewerEvent{Name: "Heap", Phase: "C", Time: ctx.time(ev), Pid: 1, Arg: &heapCountersArg{ctx.heapStats.heapAlloc, diff}})
564 ev *trace.Event) {
571 ctx.emit(&ViewerEvent{Name: "Goroutines", Phase: "C", Time: ctx.time(ev), Pid: 1, Arg: &goroutineCountersArg{ctx.gstates[gRunning], ctx.gstates[gRunnable], ctx.gstates[gWaitingGC]}})
580 func (ctx *traceContext) emitThreadCounters(ev *trace.Event) {
587 ctx.emit(&ViewerEvent{Name: "Threads", Phase: "C", Time: ctx.time(ev), Pid: 1, Arg: &threadCountersArg{ctx.threadStats.prunning, ctx.threadStats.insyscall}})
591 func (ctx *traceContext) emitInstant(ev *trace.Event, name string) {
593 if ev.Type == trace.EvProcStart {
597 arg = &Arg{ev.Args[0]}
599 ctx.emit(&ViewerEvent{Name: name, Phase: "I", Scope: "t", Time: ctx.time(ev), Tid: ctx.proc(ev), Stack: ctx.stack(ev.Stk), Arg: arg})
602 func (ctx *traceContext) emitArrow(ev *trace.Event, name string) {
603 if ev.Link == nil {
608 if ctx.gtrace && (!ctx.gs[ev.Link.G] || ev.Link.Ts < ctx.startTime || ev.Link.Ts > ctx.endTime) {
612 if ev.P == trace.NetpollP || ev.P == trace.TimerP || ev.P == trace.SyscallP {
615 ctx.emitInstant(&trace.Event{P: ev.P, Ts: ev.Ts}, "unblock")
619 ctx.emit(&ViewerEvent{Name: name, Phase: "s", Tid: ctx.proc(ev), ID: ctx.arrowSeq, Time: ctx.time(ev), Stack: ctx.stack(ev.Stk)})
620 ctx.emit(&ViewerEvent{Name: name, Phase: "t", Tid: ctx.proc(ev.Link), ID: ctx.arrowSeq, Time: ctx.time(ev.Link)})