コード例 #1
0
        internal void AddWiEvent(WorkItemData widata, WiEventType type)
        {
            long?em = null;

            if (_runTestSw != null)
            {
                em = _runTestSw.ElapsedMilliseconds;
            }

            WiTestEvent e = new WiTestEvent {
                Type = type, Dt = DateTime.Now, ElapsedMilliseconds = em, GlobalElapsedMilliseconds = _globalSw.ElapsedMilliseconds
            };

            widata.Events.Add(e);
        }
コード例 #2
0
        private PhaseDurationData GetPhaseDurationData(WiEventType start, WiEventType complete)
        {
            DateTime?minStartTime    = null;
            DateTime?maxCompleteTime = null;
            long?    minStartEm      = null;
            long?    maxCompleteEm   = null;

            List <long> durationList = new List <long>();

            foreach (WorkItemData wid in _wiDataList)
            {
                WiTestEvent se = wid.Events.FirstOrDefault(e => e.Type == start);
                WiTestEvent ce = wid.Events.FirstOrDefault(e => e.Type == complete);
                if (se != null && ce != null)
                {
                    durationList.Add(ce.GlobalElapsedMilliseconds - se.GlobalElapsedMilliseconds);

                    if (!minStartTime.HasValue || minStartTime.Value > se.Dt)
                    {
                        minStartTime = se.Dt;
                    }

                    if (!maxCompleteTime.HasValue || maxCompleteTime.Value < ce.Dt)
                    {
                        maxCompleteTime = ce.Dt;
                    }

                    if (!minStartEm.HasValue || minStartEm.Value > se.ElapsedMilliseconds.Value)
                    {
                        minStartEm = se.ElapsedMilliseconds;
                    }

                    if (!maxCompleteEm.HasValue || maxCompleteEm.Value < ce.ElapsedMilliseconds.Value)
                    {
                        maxCompleteEm = ce.ElapsedMilliseconds;
                    }
                }
            }

            if (durationList.Count == 0)
            {
                return(null);
            }

            durationList.Sort();
            long    medianDuration = ((durationList.Count % 2) == 1 ? durationList[(durationList.Count - 1) / 2] : (durationList[durationList.Count / 2 - 1] + durationList[durationList.Count / 2]) / 2);
            decimal avgDuration    = Math.Round(new decimal(durationList.Average()), 3);

            PhaseDurationData data = new PhaseDurationData
            {
                FirstStartTime   = minStartTime.Value,
                LastCompleteTime = maxCompleteTime.Value,
                Duration         = maxCompleteEm.Value - minStartEm.Value,
                FirstStartMs     = minStartEm.Value,
                LastCompleteMs   = maxCompleteEm.Value,
                MinDuration      = durationList.First(),
                MaxDuration      = durationList.Last(),
                MedianDuration   = medianDuration,
                AverageDuration  = avgDuration
            };

            return(data);
        }