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); }
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); }
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); }
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); }
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); }
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); }
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); }
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()); }