public ThreadInfo(int tid, Timestamp firstEventTime, ThreadState startingState, ThreadInfo parentThread = null, bool inheritPid = false) { this.Tid = tid; if (startingState == ThreadState.TASK_NEW) { this.previousState = SchedulingState.NewlyCreated; if (inheritPid && parentThread != null) { this.Pid = parentThread.Pid; } else { this.Pid = tid; } if (parentThread != null) { if (inheritPid) { this.Pid = parentThread.Pid; } else { this.Pid = tid; } this.Command = parentThread.Command; } else { this.Command = String.Empty; this.Pid = tid; } this.StartTime = firstEventTime; } else { this.Pid = tid * (-1); this.previousState = SchedulingState.Unknown; this.Command = String.Empty; this.StartTime = Timestamp.Zero; } this.lastEventTimestamp = firstEventTime; this.currentState = ThreadStateToSchedulingState(startingState); if (startingState == ThreadState.TASK_WAKING && parentThread != null) { this.readyingPid = parentThread.PidAsString(); this.readyingTid = parentThread.Tid.ToString(); } else { this.readyingPid = String.Empty; this.readyingTid = String.Empty; } }
internal static string ToSerializedValue(this SchedulingState value) { switch (value) { case SchedulingState.Enabled: return("enabled"); case SchedulingState.Disabled: return("disabled"); } return(null); }
public void SwitchOut(LTTngEvent data, ThreadState newState) { this.ExecTimeNs += data.Timestamp - this.lastEventTimestamp; this.currentState = ThreadStateToSchedulingState(newState); this.previousState = SchedulingState.Running; this.lastEventTimestamp = data.Timestamp; this.previousSwitchOutTime = data.Timestamp; this.readyingPid = String.Empty; this.readyingTid = String.Empty; if (this.isTerminated()) { this.ExitTime = data.Timestamp; } }
/// <summary> /// 枚举转文字 /// </summary> /// <param name="d"></param> /// <returns></returns> public static string Enum2StringS(SchedulingState d) { switch (d) { case SchedulingState.Stop: return("已停诊"); case SchedulingState.Visit: return("出诊"); case SchedulingState.OneApplicationForSuspension: return("申请中"); case SchedulingState.MiniApplicationForSuspension: return("申请中"); default: return("未知"); } }
private void stateTransition(Timestamp newEventTimestamp, ThreadState newState) { TimestampDelta nanosecondsToAdd = newEventTimestamp - this.lastEventTimestamp; this.lastEventTimestamp = newEventTimestamp; var prevState = this.currentState; this.currentState = ThreadStateToSchedulingState(newState); switch (prevState) { case SchedulingState.Running: case SchedulingState.NewlyCreated: ///Adding to ready time because exec time is added after a context switch this.ReadyTimeNs += nanosecondsToAdd; return; case SchedulingState.Sleeping: this.SleepTimeNs += nanosecondsToAdd; break; case SchedulingState.DiskSleeping: this.DiskSleepTimeNs += nanosecondsToAdd; break; case SchedulingState.Stopped: this.StoppedTimeNs += nanosecondsToAdd; break; case SchedulingState.Parked: this.ParkedTimeNs += nanosecondsToAdd; break; case SchedulingState.Idle: this.IdleTimeNs += nanosecondsToAdd; break; } ///Only set if current state is not running this.previousState = prevState; this.previousWaitTime = nanosecondsToAdd; }
public static string ToSerialString(this SchedulingState value) => value switch {
public static string SchedulingStateToString(SchedulingState state) { return(ThreadInfo.StringSchedulingState[(uint)state]); }