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;
     }
 }
Beispiel #4
0
        /// <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]);
 }