private void OnCopyFpsValues()
        {
            if (RecordSession == null)
            {
                return;
            }

            var           fps     = RecordDataServer.GetFpsTimeWindow();
            StringBuilder builder = new StringBuilder();

            foreach (var framerate in fps)
            {
                builder.Append(framerate.ToString(CultureInfo.InvariantCulture) + Environment.NewLine);
            }

            Clipboard.SetDataObject(builder.ToString(), false);
        }
        private void OnCopyFpsPoints()
        {
            if (RecordSession == null)
            {
                return;
            }

            var           fpsPoints = RecordDataServer.GetFpsPointTimeWindow();
            StringBuilder builder   = new StringBuilder();

            for (int i = 0; i < fpsPoints.Count; i++)
            {
                builder.Append(fpsPoints[i].X.ToString(CultureInfo.InvariantCulture) + "\t" +
                               fpsPoints[i].Y.ToString(CultureInfo.InvariantCulture) + Environment.NewLine);
            }

            Clipboard.SetDataObject(builder.ToString(), false);
        }
        public void SetFpsChart(IList <Point> fpsPoints)
        {
            if (fpsPoints == null || !fpsPoints.Any())
            {
                return;
            }

            int    count             = fpsPoints.Count;
            var    fpsDataPoints     = fpsPoints.Select(pnt => new DataPoint(pnt.X, pnt.Y));
            var    yMin              = fpsPoints.Min(pnt => pnt.Y);
            var    yMax              = fpsPoints.Max(pnt => pnt.Y);
            var    frametimes        = RecordDataServer.GetFrametimeTimeWindow();
            double average           = frametimes.Count * 1000 / frametimes.Sum();
            var    averageDataPoints = fpsPoints.Select(pnt => new DataPoint(pnt.X, average));

            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                FpsModel.Series.Clear();

                var fpsSeries = new LineSeries {
                    Title = "FPS", StrokeThickness = 1, LegendStrokeThickness = 4, Color = ColorRessource.FpsStroke
                };
                var averageSeries = new LineSeries {
                    Title = "Average FPS", StrokeThickness = 2, LegendStrokeThickness = 4, Color = ColorRessource.FpsAverageStroke
                };

                fpsSeries.Points.AddRange(fpsDataPoints);
                averageSeries.Points.AddRange(averageDataPoints);

                var xAxis = FpsModel.GetAxisOrDefault("xAxis", null);
                var yAxis = FpsModel.GetAxisOrDefault("yAxis", null);

                xAxis.Minimum = fpsPoints.First().X;
                xAxis.Maximum = fpsPoints.Last().X;
                yAxis.Minimum = yMin - (yMax - yMin) / 6;
                yAxis.Maximum = yMax + (yMax - yMin) / 6;

                FpsModel.Series.Add(fpsSeries);
                FpsModel.Series.Add(averageSeries);

                FpsModel.InvalidatePlot(true);
            }));
        }