private ReportInfo GetReportInfoFromRecordInfo(IFileRecordInfo recordInfo) { var session = _recordManager.LoadData(recordInfo.FullPath); double GeMetricValue(IList <double> sequence, EMetric metric) => _frametimeStatisticProvider.GetFpsMetricValue(sequence, metric); var frameTimes = session.Runs.SelectMany(r => r.CaptureData.MsBetweenPresents).ToList(); var recordTime = session.Runs.SelectMany(r => r.CaptureData.TimeInSeconds).Last(); var max = GeMetricValue(frameTimes, EMetric.Max); var p99_quantile = GeMetricValue(frameTimes, EMetric.P99); var p95_quantile = GeMetricValue(frameTimes, EMetric.P95); var average = GeMetricValue(frameTimes, EMetric.Average); var median = GeMetricValue(frameTimes, EMetric.Median); var p0dot1_quantile = GeMetricValue(frameTimes, EMetric.P0dot1); var p0dot2_quantile = GeMetricValue(frameTimes, EMetric.P0dot2); var p1_quantile = GeMetricValue(frameTimes, EMetric.P1); var p5_quantile = GeMetricValue(frameTimes, EMetric.P5); var p1_averageLow = GeMetricValue(frameTimes, EMetric.OnePercentLow); var p0dot1_averageLow = GeMetricValue(frameTimes, EMetric.ZerodotOnePercentLow); var min = GeMetricValue(frameTimes, EMetric.Min); var adaptiveStandardDeviation = GeMetricValue(frameTimes, EMetric.AdaptiveStd); var cpuFpsPerWatt = _frametimeStatisticProvider .GetPhysicalMetricValue(frameTimes, EMetric.CpuFpsPerWatt, SensorReport.GetAverageCpuPower(session.Runs.Select(run => run.SensorData), 0, double.PositiveInfinity)); //var gpuFpsPerWatt = _frametimeStatisticProvider // .GetPhysicalMetricValue(frameTimes, EMetric.GpuFpsPerWatt, // SensorReport.GetAverageGpuPower(session.Runs.Select(run => run.SensorData), // 0, double.PositiveInfinity)); var reportInfo = new ReportInfo() { Game = recordInfo.GameName, Resolution = recordInfo.Resolution, Date = recordInfo.CreationDate, Time = recordInfo.CreationTime, NumberOfSamples = frameTimes.Count, RecordTime = Math.Round(recordTime, 2).ToString(), Cpu = recordInfo.ProcessorName == null ? "" : recordInfo.ProcessorName.Trim(new Char[] { ' ', '"' }), GraphicCard = recordInfo.GraphicCardName == null ? "" : recordInfo.GraphicCardName.Trim(new Char[] { ' ', '"' }), Ram = recordInfo.SystemRamInfo == null ? "" : recordInfo.SystemRamInfo.Trim(new Char[] { ' ', '"' }), MaxFps = max, NinetyNinePercentQuantileFps = p99_quantile, NinetyFivePercentQuantileFps = p95_quantile, AverageFps = average, MedianFps = median, FivePercentQuantileFps = p5_quantile, OnePercentQuantileFps = p1_quantile, OnePercentLowAverageFps = p1_averageLow, ZeroDotTwoPercentQuantileFps = p0dot2_quantile, ZeroDotOnePercentQuantileFps = p0dot1_quantile, ZeroDotOnePercentLowAverageFps = p0dot1_averageLow, MinFps = min, AdaptiveSTDFps = adaptiveStandardDeviation, CpuFpsPerWatt = cpuFpsPerWatt, //GpuFpsPerWatt = gpuFpsPerWatt, CustomComment = recordInfo.Comment }; return(reportInfo); }
private void SetMetrics(ComparisonRecordInfoWrapper wrappedComparisonRecordInfo) { double startTime = FirstSeconds; double lastFrameStart = wrappedComparisonRecordInfo.WrappedRecordInfo.Session.Runs.SelectMany(r => r.CaptureData.TimeInSeconds).Last(); double endTime = LastSeconds > lastFrameStart ? lastFrameStart : lastFrameStart + LastSeconds; var frametimeTimeWindow = wrappedComparisonRecordInfo.WrappedRecordInfo.Session.GetFrametimeTimeWindow(startTime, endTime, _appConfiguration, ERemoveOutlierMethod.None); double GeMetricValue(IList <double> sequence, EMetric metric) => _frametimeStatisticProvider.GetFpsMetricValue(sequence, metric); if (SelectedFirstMetric == EMetric.CpuFpsPerWatt) { wrappedComparisonRecordInfo.WrappedRecordInfo.FirstMetric = _frametimeStatisticProvider.GetPhysicalMetricValue(frametimeTimeWindow, EMetric.CpuFpsPerWatt, SensorReport.GetAverageCpuPower(wrappedComparisonRecordInfo.WrappedRecordInfo.Session.Runs.Select(run => run.SensorData2), startTime, endTime)); } else if (SelectedFirstMetric == EMetric.GpuFpsPerWatt) { wrappedComparisonRecordInfo.WrappedRecordInfo.FirstMetric = _frametimeStatisticProvider.GetPhysicalMetricValue(frametimeTimeWindow, EMetric.GpuFpsPerWatt, SensorReport.GetAverageGpuPower(wrappedComparisonRecordInfo.WrappedRecordInfo.Session.Runs.Select(run => run.SensorData2), startTime, endTime)); } else { wrappedComparisonRecordInfo.WrappedRecordInfo.FirstMetric = GeMetricValue(frametimeTimeWindow, SelectedFirstMetric); } if (SelectedSecondMetric == EMetric.CpuFpsPerWatt) { wrappedComparisonRecordInfo.WrappedRecordInfo.SecondMetric = _frametimeStatisticProvider.GetPhysicalMetricValue(frametimeTimeWindow, EMetric.CpuFpsPerWatt, SensorReport.GetAverageCpuPower(wrappedComparisonRecordInfo.WrappedRecordInfo.Session.Runs.Select(run => run.SensorData2), startTime, endTime)); } else if (SelectedSecondMetric == EMetric.GpuFpsPerWatt) { wrappedComparisonRecordInfo.WrappedRecordInfo.SecondMetric = _frametimeStatisticProvider.GetPhysicalMetricValue(frametimeTimeWindow, EMetric.GpuFpsPerWatt, SensorReport.GetAverageGpuPower(wrappedComparisonRecordInfo.WrappedRecordInfo.Session.Runs.Select(run => run.SensorData2), startTime, endTime)); } else { wrappedComparisonRecordInfo.WrappedRecordInfo.SecondMetric = GeMetricValue(frametimeTimeWindow, SelectedSecondMetric); } if (SelectedThirdMetric == EMetric.CpuFpsPerWatt) { wrappedComparisonRecordInfo.WrappedRecordInfo.ThirdMetric = _frametimeStatisticProvider.GetPhysicalMetricValue(frametimeTimeWindow, EMetric.CpuFpsPerWatt, SensorReport.GetAverageCpuPower(wrappedComparisonRecordInfo.WrappedRecordInfo.Session.Runs.Select(run => run.SensorData2), startTime, endTime)); } else if (SelectedThirdMetric == EMetric.GpuFpsPerWatt) { wrappedComparisonRecordInfo.WrappedRecordInfo.ThirdMetric = _frametimeStatisticProvider.GetPhysicalMetricValue(frametimeTimeWindow, EMetric.GpuFpsPerWatt, SensorReport.GetAverageGpuPower(wrappedComparisonRecordInfo.WrappedRecordInfo.Session.Runs.Select(run => run.SensorData2), startTime, endTime)); } else { wrappedComparisonRecordInfo.WrappedRecordInfo.ThirdMetric = GeMetricValue(frametimeTimeWindow, SelectedThirdMetric); } }