public static void ConvertToSensorData2(ISessionRun sessionRun) { sessionRun.SensorData2 = new SessionSensorData2(); void InsertValues(string key, string sensorName, string sensorType, IEnumerable <object> values) { if (!values.All(v => v is double || v is int)) { return; } if (!sessionRun.SensorData2.TryGetValue(key, out var container)) { container = new SessionSensorEntry(sensorName, sensorType); sessionRun.SensorData2[key] = container; } foreach (var value in values) { container.Values.AddLast(Convert.ToDouble(value)); } } //Times InsertValues("MeasureTime", "MeasureTime", "Time", sessionRun.SensorData.MeasureTime.Cast <object>()); InsertValues("BetweenMeasureTime", "BetweenMeasureTime", "Time", sessionRun.SensorData.BetweenMeasureTimes.Cast <object>()); //CPU InsertValues("CpuPower", "CPU Package", "Power", sessionRun.SensorData.CpuPower.Cast <object>()); InsertValues("CpuTemp", "CPU Package", "Temperature", sessionRun.SensorData.CpuTemp.Cast <object>()); InsertValues("CpuLoad", "CPU Total", "Load", sessionRun.SensorData.CpuUsage.Cast <object>()); InsertValues("CpuMaxClock", "CPU Max Clock", "Clock", sessionRun.SensorData.CpuMaxClock.Cast <object>()); InsertValues("CpuMaxThreadLoad", "CPU Max", "Load", sessionRun.SensorData.CpuMaxThreadUsage.Cast <object>()); //GPU InsertValues("GpuClock", "GPU Core", "Clock", sessionRun.SensorData.GpuClock.Cast <object>()); InsertValues("GpuPower", "GPU Power", "Power", sessionRun.SensorData.GpuPower.Cast <object>()); InsertValues("GpuTemp", "GPU Core", "Temperature", sessionRun.SensorData.GpuTemp.Cast <object>()); InsertValues("GpuUsage", "GPU Core", "Load", sessionRun.SensorData.GpuUsage.Cast <object>()); InsertValues("RamUsage", "Used Memory", "Data", sessionRun.SensorData.RamUsage.Cast <object>()); InsertValues("VRamUsage", "GPU Memory Dedicated", "SmallData", sessionRun.SensorData.VRamUsage.Cast <object>()); InsertValues("VRamUsageGB", "GPU Memory Dedicated", "Data", sessionRun.SensorData.VRamUsageGB.Cast <object>()); }
public void AddRunToHistory(ISessionRun sessionRun, string process, string recordDirectory) { var frametimes = sessionRun.CaptureData.MsBetweenPresents; if (RunHistoryCount == _numberOfRuns) { if (!_runHistoryOutlierFlags.All(x => x == false) && _appConfiguration.OutlierHandling == EOutlierHandling.Replace.ConvertToString()) { var historyDefault = Enumerable.Repeat("N/A", _numberOfRuns).ToList(); var validRuns = _runHistory.Where((run, i) => _runHistoryOutlierFlags[i] == false).ToList(); for (int i = 0; i < validRuns.Count; i++) { historyDefault[i] = validRuns[i]; } var validCaptureData = _captureDataHistory.Where((run, i) => _runHistoryOutlierFlags[i] == false); var validFrametimes = _frametimeHistory.Where((run, i) => _runHistoryOutlierFlags[i] == false); var validMetricAnalysis = _metricAnalysis.Where((run, i) => _runHistoryOutlierFlags[i] == false); _runHistory = historyDefault.ToList(); _captureDataHistory = validCaptureData.ToList(); _frametimeHistory = validFrametimes.ToList(); _metricAnalysis = validMetricAnalysis.ToList(); // local reset _runHistoryOutlierFlags = Enumerable.Repeat(false, _numberOfRuns).ToArray(); _rTSSService.SetRunHistory(_runHistory.ToArray()); _rTSSService.SetRunHistoryAggregation(string.Empty); _rTSSService.SetRunHistoryOutlierFlags(_runHistoryOutlierFlags); } else { ResetHistory(); } } if (RunHistoryCount < _numberOfRuns) { // metric history var currentAnalysis = _statisticProvider.GetMetricAnalysis(frametimes, SecondMetric, ThirdMetric); _metricAnalysis.Add(currentAnalysis); _runHistory[RunHistoryCount] = currentAnalysis.ResultString; _rTSSService.SetRunHistory(_runHistory.ToArray()); // capture data history _captureDataHistory.Add(sessionRun); // frametime history _frametimeHistory.Add(frametimes); if (_appConfiguration.UseAggregation && RunHistoryCount == _numberOfRuns) { _runHistoryOutlierFlags = _statisticProvider .GetOutlierAnalysis(_metricAnalysis, _appConfiguration.RelatedMetricOverlay, _appConfiguration.OutlierPercentageOverlay); _rTSSService.SetRunHistoryOutlierFlags(_runHistoryOutlierFlags); if ((_runHistoryOutlierFlags.All(x => x == false) && _appConfiguration.OutlierHandling == EOutlierHandling.Replace.ConvertToString()) || _appConfiguration.OutlierHandling == EOutlierHandling.Ignore.ConvertToString()) { _rTSSService.SetRunHistoryAggregation(GetAggregation()); // write aggregated file Task.Run(async() => { await Task.Delay(1000); await _recordManager.SaveSessionRunsToFile(_captureDataHistory, process, recordDirectory); }); } } } }