コード例 #1
0
        private void AddToFrameTimeChart(ComparisonRecordInfoWrapper wrappedComparisonInfo)
        {
            double startTime       = FirstSeconds;
            double endTime         = LastSeconds;
            var    session         = wrappedComparisonInfo.WrappedRecordInfo.Session;
            var    frametimePoints = session.GetFrametimePointsTimeWindow(startTime, endTime, _appConfiguration)
                                     .Select(pnt => new Point(pnt.X, pnt.Y));

            var chartTitle = string.Empty;

            var color           = wrappedComparisonInfo.FrametimeGraphColor.Value;
            var frametimeSeries = new Statistics.PlotBuilder.LineSeries()
            {
                Tag                   = wrappedComparisonInfo.WrappedRecordInfo.FileRecordInfo.Id,
                Title                 = chartTitle,
                StrokeThickness       = 1,
                LegendStrokeThickness = 4,
                Color                 = wrappedComparisonInfo.IsHideModeSelected ?
                                        OxyColors.Transparent : OxyColor.FromRgb(color.R, color.G, color.B)
            };

            frametimeSeries.Points.AddRange(frametimePoints.Select(pnt => new DataPoint(pnt.X, pnt.Y)));
            ComparisonModel.Series.Add(frametimeSeries);
        }
コード例 #2
0
        private void SetFrameInputLagChart(IList <double> frametimes, IList <double> upperBoundInputlagtimes, IList <double> lowerBoundInputlagtimes)
        {
            if (frametimes.IsNullOrEmpty() ||
                upperBoundInputlagtimes.IsNullOrEmpty() ||
                lowerBoundInputlagtimes.IsNullOrEmpty())
            {
                InputLagModel = new PlotModel
                {
                    PlotMargins         = new OxyThickness(40, 10, 0, 40),
                    PlotAreaBorderColor = _appConfiguration.UseDarkMode ? OxyColor.FromArgb(100, 204, 204, 204) : OxyColor.FromArgb(50, 30, 30, 30),
                    LegendPosition      = LegendPosition.TopCenter,
                    LegendOrientation   = LegendOrientation.Horizontal,
                };
                return;
            }

            var appMissed          = _session.Runs.SelectMany(r => r.CaptureData.Dropped).ToList();
            var filteredFrametimes = frametimes.Where((ft, i) => appMissed[i] != true).ToList();

            var yMin = Math.Min(filteredFrametimes.Min(), lowerBoundInputlagtimes.Min());
            var yMax = Math.Max(filteredFrametimes.Max(), upperBoundInputlagtimes.Max());

            var frametimeSeries = new Statistics.PlotBuilder.LineSeries
            {
                Title                 = "Frametimes",
                StrokeThickness       = 1,
                LegendStrokeThickness = 4,
                Color                 = Constants.FrametimeStroke
            };

            var upperBoundInputLagSeries = new Statistics.PlotBuilder.LineSeries
            {
                Title                 = "Input lag high",
                StrokeThickness       = 1,
                LegendStrokeThickness = 4,
                Color                 = OxyColor.FromRgb(255, 150, 150)
            };

            var lowerBoundInputLagSeries = new Statistics.PlotBuilder.LineSeries
            {
                Title                 = "Input lag low",
                StrokeThickness       = 1,
                LegendStrokeThickness = 4,
                Color                 = OxyColor.FromRgb(200, 140, 140)
            };

            var areaSeries = new AreaSeries()
            {
                StrokeThickness = 1,
                Color           = OxyColors.Transparent,
                Fill            = OxyColor.FromArgb(64, 225, 145, 145)
            };

            frametimeSeries.Points.AddRange(filteredFrametimes.Select((x, i) => new DataPoint(i, x)));
            upperBoundInputLagSeries.Points.AddRange(upperBoundInputlagtimes.Select((x, i) => new DataPoint(i, x)));
            lowerBoundInputLagSeries.Points.AddRange(lowerBoundInputlagtimes.Select((x, i) => new DataPoint(i, x)));
            areaSeries.Points.AddRange(lowerBoundInputlagtimes.Select((x, i) => new DataPoint(i, x)));
            areaSeries.Points2.AddRange(upperBoundInputlagtimes.Select((x, i) => new DataPoint(i, x)));

            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                var tmp = new PlotModel
                {
                    PlotMargins         = new OxyThickness(40, 10, 40, 40),
                    PlotAreaBorderColor = OxyColor.FromArgb(64, 204, 204, 204),
                    LegendPosition      = LegendPosition.TopCenter,
                    LegendOrientation   = LegendOrientation.Horizontal,
                    TextColor           = _appConfiguration.UseDarkMode ? OxyColors.White : OxyColors.Black
                };

                tmp.Series.Add(frametimeSeries);
                tmp.Series.Add(upperBoundInputLagSeries);
                tmp.Series.Add(lowerBoundInputLagSeries);
                tmp.Series.Add(areaSeries);

                //Axes
                //X
                tmp.Axes.Add(new LinearAxis()
                {
                    Key                    = "xAxis",
                    Position               = OxyPlot.Axes.AxisPosition.Bottom,
                    Title                  = "Samples",
                    Minimum                = 0,
                    Maximum                = filteredFrametimes.Count(),
                    MajorGridlineStyle     = LineStyle.Solid,
                    MajorGridlineThickness = 1,
                    MajorGridlineColor     = _appConfiguration.UseDarkMode ? OxyColor.FromArgb(40, 204, 204, 204) : OxyColor.FromArgb(20, 30, 30, 30),
                    MinorTickSize          = 0,
                    MajorTickSize          = 0
                });

                //Y
                tmp.Axes.Add(new LinearAxis()
                {
                    Key                    = "yAxis",
                    Position               = OxyPlot.Axes.AxisPosition.Left,
                    Title                  = "Frametime + input lag [ms]",
                    Minimum                = yMin - (yMax - yMin) / 6,
                    Maximum                = yMax + (yMax - yMin) / 6,
                    MajorGridlineStyle     = LineStyle.Solid,
                    MajorGridlineThickness = 1,
                    MajorGridlineColor     = _appConfiguration.UseDarkMode ? OxyColor.FromArgb(40, 204, 204, 204) : OxyColor.FromArgb(20, 30, 30, 30),
                    MinorTickSize          = 0,
                    MajorTickSize          = 0
                });

                InputLagModel = tmp;
            }));
        }
コード例 #3
0
        private void SetFrameDisplayTimesChart(IList <double> frametimes, IList <double> displaytimes)
        {
            if (frametimes == null || !frametimes.Any())
            {
                return;
            }

            if (displaytimes == null || !displaytimes.Any())
            {
                return;
            }

            var yMin = Math.Min(frametimes.Min(), displaytimes.Min());
            var yMax = Math.Max(frametimes.Max(), displaytimes.Max());

            var frametimeSeries = new Statistics.PlotBuilder.LineSeries
            {
                Title                 = "Frametimes",
                StrokeThickness       = 1,
                LegendStrokeThickness = 4,
                Color                 = Constants.FrametimeStroke
            };

            var untilDisplayedTimesSeries = new Statistics.PlotBuilder.LineSeries
            {
                Title                 = "Until displayed times",
                StrokeThickness       = 1,
                LegendStrokeThickness = 4,
                Color                 = OxyColor.FromArgb(150, 241, 125, 32)
            };

            frametimeSeries.Points.AddRange(frametimes.Select((x, i) => new DataPoint(i, x)));
            untilDisplayedTimesSeries.Points.AddRange(displaytimes.Select((x, i) => new DataPoint(i, x)));

            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                var tmp = new PlotModel
                {
                    PlotMargins         = new OxyThickness(40, 10, 40, 40),
                    PlotAreaBorderColor = _appConfiguration.UseDarkMode ? OxyColor.FromArgb(100, 204, 204, 204) : OxyColor.FromArgb(50, 30, 30, 30),
                    LegendPosition      = LegendPosition.TopCenter,
                    LegendOrientation   = LegendOrientation.Horizontal,
                    TextColor           = _appConfiguration.UseDarkMode ? OxyColors.White : OxyColors.Black
                };

                tmp.Series.Add(frametimeSeries);
                tmp.Series.Add(untilDisplayedTimesSeries);

                //Axes
                //X
                tmp.Axes.Add(new LinearAxis()
                {
                    Key                    = "xAxis",
                    Position               = OxyPlot.Axes.AxisPosition.Bottom,
                    Title                  = "Samples",
                    Minimum                = 0,
                    Maximum                = frametimes.Count,
                    MajorGridlineStyle     = LineStyle.Solid,
                    MajorGridlineThickness = 1,
                    MajorGridlineColor     = _appConfiguration.UseDarkMode ? OxyColor.FromArgb(40, 204, 204, 204) : OxyColor.FromArgb(20, 30, 30, 30),
                    MinorTickSize          = 0,
                    MajorTickSize          = 0
                });

                //Y
                tmp.Axes.Add(new LinearAxis()
                {
                    Key                    = "yAxis",
                    Position               = OxyPlot.Axes.AxisPosition.Left,
                    Title                  = "Frametime + until displayed time [ms]",
                    Minimum                = yMin - (yMax - yMin) / 6,
                    Maximum                = yMax + (yMax - yMin) / 6,
                    MajorGridlineStyle     = LineStyle.Solid,
                    MajorGridlineThickness = 1,
                    MajorGridlineColor     = _appConfiguration.UseDarkMode ? OxyColor.FromArgb(40, 204, 204, 204) : OxyColor.FromArgb(20, 30, 30, 30),
                    MinorTickSize          = 0,
                    MajorTickSize          = 0
                });

                SynchronizationModel = tmp;
            }));
        }