コード例 #1
0
ファイル: Session.cs プロジェクト: DJMajorRush/CapFrameX
        public IList <double> GetFrametimeSampleWindow(int startIndex, double endIndex,
                                                       ERemoveOutlierMethod eRemoveOutlierMethod = ERemoveOutlierMethod.None)
        {
            var frametimesSampleWindow = new List <double>();
            var frametimes             = _frametimeStatisticProvider?.GetOutlierAdjustedSequence(FrameTimes, eRemoveOutlierMethod);

            if (frametimes != null && frametimes.Any())
            {
                for (int i = startIndex; i < frametimes.Count - endIndex; i++)
                {
                    frametimesSampleWindow.Add(frametimes[i]);
                }
            }

            return(frametimesSampleWindow);
        }
コード例 #2
0
ファイル: Session.cs プロジェクト: DJMajorRush/CapFrameX
        public IList <double> GetFrametimeTimeWindow(double startTime, double endTime,
                                                     ERemoveOutlierMethod eRemoveOutlierMethod = ERemoveOutlierMethod.None)
        {
            IList <double> frametimesTimeWindow = new List <double>();
            var            frametimes           = _frametimeStatisticProvider?.GetOutlierAdjustedSequence(FrameTimes, eRemoveOutlierMethod);

            if (frametimes != null && FrameStart != null)
            {
                for (int i = 0; i < frametimes.Count; i++)
                {
                    if (FrameStart[i] >= startTime && FrameStart[i] <= endTime)
                    {
                        frametimesTimeWindow.Add(frametimes[i]);
                    }
                }
            }

            return(frametimesTimeWindow);
        }
コード例 #3
0
        public IList <double> GetOutlierAdjustedSequence(IList <double> sequence, ERemoveOutlierMethod method)
        {
            IList <double> adjustedSequence = null;

            switch (method)
            {
            case ERemoveOutlierMethod.DeciPercentile:
            {
                var deciPercentile = sequence.Quantile(TAU);
                adjustedSequence = new List <double>();

                foreach (var element in sequence)
                {
                    if (element < deciPercentile)
                    {
                        adjustedSequence.Add(element);
                    }
                }
            }
            break;

            case ERemoveOutlierMethod.InterquartileRange:
                break;

            case ERemoveOutlierMethod.ThreeSigma:
                break;

            case ERemoveOutlierMethod.TwoDotFiveSigma:
                break;

            case ERemoveOutlierMethod.None:
                adjustedSequence = sequence;
                break;

            default:
                adjustedSequence = sequence;
                break;
            }

            return(adjustedSequence);
        }
コード例 #4
0
        public void BuildPlotmodel(ISession session, IPlotSettings plotSettings, double startTime, double endTime, ERemoveOutlierMethod eRemoveOutlinerMethod, Action <PlotModel> onFinishAction = null)
        {
            var plotModel = PlotModel;

            Reset();
            if (session == null)
            {
                return;
            }

            plotModel.Axes.Add(AxisDefinitions[EPlotAxis.XAXIS]);
            plotModel.Axes.Add(AxisDefinitions[EPlotAxis.YAXISFRAMETIMES]);

            SetFrametimeChart(plotModel, session.GetFrametimePointsTimeWindow(startTime, endTime, _frametimeStatisticProviderOptions, eRemoveOutlinerMethod));

            if (plotSettings.IsAnyGraphVisible && session.HasValidSensorData())
            {
                plotModel.Axes.Add(AxisDefinitions[EPlotAxis.YAXISPERCENTAGE]);

                if (plotSettings.ShowGpuLoad)
                {
                    SetGPULoadChart(plotModel, session.GetGPULoadPointTimeWindow());
                }
                if (plotSettings.ShowCpuLoad)
                {
                    SetCPULoadChart(plotModel, session.GetCPULoadPointTimeWindow());
                }
                if (plotSettings.ShowCpuMaxThreadLoad)
                {
                    SetCPUMaxThreadLoadChart(plotModel, session.GetCPUMaxThreadLoadPointTimeWindow());
                }
                if (plotSettings.ShowGpuPowerLimit)
                {
                    SetGpuPowerLimitChart(plotModel, session.GetGpuPowerLimitPointTimeWindow());
                }
            }
            onFinishAction?.Invoke(plotModel);
            plotModel.InvalidatePlot(true);
        }
コード例 #5
0
        public void BuildPlotmodel(ISession session, IPlotSettings plotSettings, double startTime, double endTime, ERemoveOutlierMethod eRemoveOutlinerMethod, EFilterMode filterMode, Action <PlotModel> onFinishAction = null)
        {
            var plotModel = PlotModel;

            Reset();

            if (session == null)
            {
                return;
            }

            plotModel.Axes.Add(AxisDefinitions[EPlotAxis.XAXIS]);
            plotModel.Axes.Add(AxisDefinitions[EPlotAxis.YAXISFPS]);


            var    frametimes = session.GetFrametimeTimeWindow(startTime, endTime, _frametimeStatisticProviderOptions, eRemoveOutlinerMethod);
            double average = frametimes.Count * 1000 / frametimes.Sum();
            double yMin, yMax;

            plotModel.Series.Clear();

            var rawFpsPoints = session.GetFpsPointsTimeWindow(startTime, endTime, _frametimeStatisticProviderOptions, eRemoveOutlinerMethod, EFilterMode.None);

            if (filterMode is EFilterMode.RawPlusAverage)
            {
                var avgFpsPoints = session.GetFpsPointsTimeWindow(startTime, endTime, _frametimeStatisticProviderOptions, eRemoveOutlinerMethod, EFilterMode.TimeIntervalAverage);

                SetRawFPS(plotModel, rawFpsPoints);
                SetFpsChart(plotModel, avgFpsPoints, rawFpsPoints, average, 2, OxyColor.FromRgb(241, 125, 32));


                yMin = rawFpsPoints.Min(pnt => pnt.Y);
                yMax = rawFpsPoints.Max(pnt => pnt.Y);
            }
            else
            {
                var fpsPoints = session.GetFpsPointsTimeWindow(startTime, endTime, _frametimeStatisticProviderOptions, eRemoveOutlinerMethod, filterMode);

                SetFpsChart(plotModel, fpsPoints, rawFpsPoints, average, filterMode is EFilterMode.None ? 1 : 2, Constants.FpsStroke);

                yMin = fpsPoints.Min(pnt => pnt.Y);
                yMax = fpsPoints.Max(pnt => pnt.Y);
            }
            UpdateYAxisMinMaxBorders(yMin, yMax, average);

            if (plotSettings.IsAnyGraphVisible && session.HasValidSensorData())
            {
                plotModel.Axes.Add(AxisDefinitions[EPlotAxis.YAXISPERCENTAGE]);

                if (plotSettings.ShowGpuLoad)
                {
                    SetGPULoadChart(plotModel, session.GetGPULoadPointTimeWindow());
                }
                if (plotSettings.ShowCpuLoad)
                {
                    SetCPULoadChart(plotModel, session.GetCPULoadPointTimeWindow());
                }
                if (plotSettings.ShowCpuMaxThreadLoad)
                {
                    SetCPUMaxThreadLoadChart(plotModel, session.GetCPUMaxThreadLoadPointTimeWindow());
                }
                if (plotSettings.ShowGpuPowerLimit)
                {
                    SetGpuPowerLimitChart(plotModel, session.GetGpuPowerLimitPointTimeWindow());
                }
            }

            onFinishAction?.Invoke(plotModel);
            plotModel.InvalidatePlot(true);
        }
コード例 #6
0
        public static IList <Point> GetFrametimePointsTimeWindow(this ISession session, double startTime, double endTime, IFrametimeStatisticProviderOptions options, ERemoveOutlierMethod eRemoveOutlierMethod = ERemoveOutlierMethod.None)
        {
            IList <Point> frametimesPointsWindow     = new List <Point>();
            var           frametimeStatisticProvider = new FrametimeStatisticProvider(options);

            var frametimes  = frametimeStatisticProvider?.GetOutlierAdjustedSequence(session.Runs.SelectMany(r => r.CaptureData.MsBetweenPresents).ToArray(), eRemoveOutlierMethod);
            var frameStarts = session.Runs.SelectMany(r => r.CaptureData.TimeInSeconds).ToArray();

            if (frametimes.Any() && frameStarts.Any())
            {
                for (int i = 0; i < frametimes.Count(); i++)
                {
                    if (frameStarts[i] >= startTime && frameStarts[i] <= endTime)
                    {
                        frametimesPointsWindow.Add(new Point(frameStarts[i], frametimes[i]));
                    }
                }
            }

            return(frametimesPointsWindow);
        }
コード例 #7
0
        public static IList <Point> GetFpsPointsTimeWindow(this ISession session, double startTime, double endTime,
                                                           IFrametimeStatisticProviderOptions options, ERemoveOutlierMethod eRemoveOutlierMethod = ERemoveOutlierMethod.None,
                                                           EFilterMode filterMode = EFilterMode.None)
        {
            IList <Point> fpsPoints               = null;
            var           frametimePoints         = session.GetFrametimePointsTimeWindow(startTime, endTime, options, eRemoveOutlierMethod);
            var           intervalFrametimePoints = session.GetFrametimePointsTimeWindow(0, endTime, options, eRemoveOutlierMethod);

            switch (filterMode)
            {
            case EFilterMode.TimeIntervalAverage:
                var timeIntervalAverageFilter = new IntervalTimeAverageFilter(options.IntervalAverageWindowTime);
                var timeIntervalAveragePoints = timeIntervalAverageFilter
                                                .ProcessSamples(intervalFrametimePoints.Select(pnt => pnt.Y).ToList(), startTime * 1000, endTime * 1000, session.Runs.SelectMany(r => r.CaptureData.TimeInSeconds).Last() * 1000);
                fpsPoints = timeIntervalAveragePoints.Select(pnt => new Point(pnt.X / 1000, 1000 / pnt.Y)).ToList();
                break;

            default:
                fpsPoints = frametimePoints.Select(pnt => new Point(pnt.X, 1000 / pnt.Y)).ToList();
                break;
            }

            return(fpsPoints);
        }
コード例 #8
0
 public static IList <Point> GetFpsPointTimeWindow(this ISession session, double startTime, double endTime, IFrametimeStatisticProviderOptions options, ERemoveOutlierMethod eRemoveOutlierMethod = ERemoveOutlierMethod.None)
 {
     return(session.GetFrametimePointsTimeWindow(startTime, endTime, options, eRemoveOutlierMethod).Select(pnt => new Point(pnt.X, 1000 / pnt.Y)).ToList());
 }