Beispiel #1
0
        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>());
        }
Beispiel #2
0
        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);
                        });
                    }
                }
            }
        }