codekingpro/portable-devtools
114k
1// Copyright 2023 The Go Authors. All rights reserved.2// Use of this source code is governed by a BSD-style3// license that can be found in the LICENSE file.4 5package main6 7import (8 "fmt"9 "internal/trace"10 "internal/trace/traceviewer"11 "slices"12)13 14// viewerFrames returns the frames of the stack of ev. The given frame slice is15// used to store the frames to reduce allocations.16func viewerFrames(stk trace.Stack) []trace.StackFrame {17 return slices.Collect(stk.Frames())18}19 20func viewerGState(state trace.GoState, inMarkAssist bool) traceviewer.GState {21 switch state {22 case trace.GoUndetermined:23 return traceviewer.GDead24 case trace.GoNotExist:25 return traceviewer.GDead26 case trace.GoRunnable:27 return traceviewer.GRunnable28 case trace.GoRunning:29 return traceviewer.GRunning30 case trace.GoWaiting:31 if inMarkAssist {32 return traceviewer.GWaitingGC33 }34 return traceviewer.GWaiting35 case trace.GoSyscall:36 // N.B. A goroutine in a syscall is considered "executing" (state.Executing() == true).37 return traceviewer.GRunning38 default:39 panic(fmt.Sprintf("unknown GoState: %s", state.String()))40 }41}42 